import pandas as pd

def reverseDict(dictionary):
    return {value: key for key, value in dictionary.items()}

contractMonthInfo = {
    1: {
        'int': 1,
        'bloombergCode': 'F',
        'abbreviation': 'JAN',
        'fullName': 'January'
    },
    2: {
        'int': 2,
        'bloombergCode': 'G',
        'abbreviation': 'FEB',
        'fullName': 'February'
    },
    3: {
        'int': 3,
        'bloombergCode': 'H',
        'abbreviation': 'MAR',
        'fullName': 'March'
    },
    4: {
        'int': 4,
        'bloombergCode': 'J',
        'abbreviation': 'APR',
        'fullName': 'April'
    },
    5: {
        'int': 5,
        'bloombergCode': 'K',
        'abbreviation': 'MAY',
        'fullName': 'May'
    },
    6: {
        'int': 6,
        'bloombergCode': 'M',
        'abbreviation': 'JUN',
        'fullName': 'June'
    },
    7: {
        'int': 7,
        'bloombergCode': 'N',
        'abbreviation': 'JUL',
        'fullName': 'July'
    },
    8: {
        'int': 8,
        'bloombergCode': 'Q',
        'abbreviation': 'AUG',
        'fullName': 'August'
    },
    9: {
        'int': 9,
        'bloombergCode': 'U',
        'abbreviation': 'SEP',
        'fullName': 'September'
    },
    10: {
        'int': 10,
        'bloombergCode': 'V',
        'abbreviation': 'OCT',
        'fullName': 'October'
    },
    11: {
        'int': 11,
        'bloombergCode': 'X',
        'abbreviation': 'NOV',
        'fullName': 'November'
    },
    12: {
        'int': 12,
        'bloombergCode': 'Z',
        'abbreviation': 'DEC',
        'fullName': 'December'
    },
}

contractMonthCodeToInt = {
    'F': 1,
    'G': 2,
    'H': 3,
    'J': 4,
    'K': 5,
    'M': 6,
    'N': 7,
    'Q': 8,
    'U': 9,
    'V': 10,
    'X': 11,
    'Z': 12
}
contractMonthIntToCode = reverseDict(contractMonthCodeToInt)

contractMonthCodeToStr = {
    'F': 'JAN',
    'G': 'FEB',
    'H': 'MAR',
    'J': 'APR',
    'K': 'MAY',
    'M': 'JUN',
    'N': 'JUL',
    'Q': 'AUG',
    'U': 'SEP',
    'V': 'OCT',
    'X': 'NOV',
    'Z': 'DEC'
}
contractMonthStrToCode = reverseDict(contractMonthCodeToStr)

contractTermIntToStr = {
    0: 'front',
    1: 'second',
    2: 'third',
    3: 'fourth',
    4: 'fifth',
    5: 'sixth',
    6: 'seventh',
    7: 'eighth',
    8: 'ninth',
    9: 'tenth',
    10: 'eleventh',
    11: 'twelfth'
}
contractTermStrToInt = reverseDict(contractTermIntToStr)

colorDict = {
    'black': '#17202A',
    'darkGrey': '#4D5656',
    'medGrey': '#B3B6B7',
    'lightGrey': '#F0F3F4',
    'darkBrown': '#6E2C00',
    'medBrown': '#BA4A00',
    'burntOrange': '#CA6F1E',
    'lightOrange': '#EB984E',
    'burntOchre': '#B7950B',
    'gold': '#F1C40F',
    'softYellow': '#F7DC6F',
    'darkGreen': '#196F3D',
    'medGreen': '#27AE60',
    'lightGreen': '#7DCEA0',
    'darkBlue': '#1A5276',
    'medBlue': '#2980B9',
    'lightBlue': '#A9CCE3',
    'darkPurple': '#4A235A',
    'medPurple': '#A569BD',
    'lightPurple': '#E8DAEF',
    'darkRed': '#922B21',
    'medRed': '#CD6155',
    'pink': '#F2D7D5'
}

commodityInfo = {
    'cl': {
        'shortName': 'cl',
        'oldName': 'crude',
        'formalName': 'WTI',
        'bloombergSymbol': 'CL',
        'yellowKey': 'Comdty',
        'systemTicker': 'cl',
        'sector': 'Energy',
        'drwSymbol': 'CL',
        'currency': 'USD',
        'varName': 'WTI',
        'variableContractSize': False,
        'contractSize': 1_000,
        'bloombergDollarDivisor': 1,
        'settlementTime': '14:30',
    },
    'cl_alt': {
        'shortName': 'cl',
        'oldName': 'crude',
        'formalName': 'WTI',
        'bloombergSymbol': 'CL',
        'yellowKey': 'Comdty',
        'systemTicker': 'cl',
        'sector': 'Energy',
        'drwSymbol': 'WBS',
        'currency': 'USD',
        'varName': 'WTI',
        'variableContractSize': False,
        'contractSize': 1_000,
        'bloombergDollarDivisor': 1,
        'settlementTime': '14:30',
    },
    'co': {
        'shortName': 'co',
        'oldName': 'brent',
        'formalName': 'Brent',
        'bloombergSymbol': 'CO',
        'yellowKey': 'Comdty',
        'systemTicker': 'co',
        'sector': 'Energy',
        'drwSymbol': 'BC',
        'currency': 'USD',
        'varName': 'Brent',
        'variableContractSize': False,
        'contractSize': 1_000,
        'bloombergDollarDivisor': 1,
        'settlementTime': '14:30',
    },
    'co_alt': {
        'shortName': 'co',
        'oldName': 'brent',
        'formalName': 'Brent',
        'bloombergSymbol': 'CO',
        'yellowKey': 'Comdty',
        'systemTicker': 'co',
        'sector': 'Energy',
        'drwSymbol': 'BZ',
        'currency': 'USD',
        'varName': 'Brent',
        'variableContractSize': False,
        'contractSize': 1_000,
        'bloombergDollarDivisor': 1,
        'settlementTime': '14:30',
    },
    'ho': {
        'shortName': 'ho',
        'oldName': 'diesel',
        'formalName': 'Diesel',
        'bloombergSymbol': 'HO',
        'yellowKey': 'Comdty',
        'systemTicker': 'ho',
        'sector': 'Energy',
        'drwSymbol': 'HO',
        'currency': 'USD',
        'varName': 'Heating Oil',
        'variableContractSize': False,
        'contractSize': 42_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '14:30',
    },
    'xb': {
        'shortName': 'xb',
        'oldName': 'gasoline',
        'formalName': 'Gasoline',
        'bloombergSymbol': 'XB',
        'yellowKey': 'Comdty',
        'systemTicker': 'xb',
        'sector': 'Energy',
        'drwSymbol': 'RB',
        'currency': 'USD',
        'varName': 'RBOB',
        'variableContractSize': False,
        'contractSize': 42_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '14:30',
    },
    'ng': {
        'shortName': 'ng',
        'oldName': 'natgas',
        'formalName': 'Natural Gas',
        'bloombergSymbol': 'NG',
        'yellowKey': 'Comdty',
        'systemTicker': 'ng',
        'sector': 'Energy',
        'drwSymbol': 'NG',
        'currency': 'USD',
        'varName': 'Henry Hub',
        'variableContractSize': False,
        'contractSize': 10_000,
        'bloombergDollarDivisor': 1,
        'settlementTime': '14:30',
    },
    'tzt': {
        'shortName': 'tzt',
        'oldName': 'ttf',
        'formalName': 'TTF',
        'bloombergSymbol': 'TZT',
        'yellowKey': 'Comdty',
        'systemTicker': 'ttf',
        'sector': 'Energy',
        'drwSymbol': 'TTF',
        'currency': 'EUR',
        'varName': 'Dutch',
        'variableContractSize': True,
        'contractSize': 'C:/Users/jkarisch/Projects/common/data/ttfContractSizes.csv',
        'bloombergDollarDivisor': 1,
        'settlementTime': '11:15',
    },
    'bap': {
        'shortName': 'bap',
        'oldName': 'propane',
        'formalName': 'Propane',
        'bloombergSymbol': 'BAP',
        'yellowKey': 'Comdty',
        'systemTicker': 'bap',
        'sector': 'Energy',
        'drwSymbol': 'B0',
        'currency': 'USD',
        'varName': 'Propane',
        'variableContractSize': False,
        'contractSize': 42_000,
        'bloombergDollarDivisor': 1,
        'settlementTime': '14:30',
    },
    'zls': {
        'shortName': 'zls',
        'oldName': 'pjm',
        'formalName': 'PJM',
        'bloombergSymbol': 'ZLS',
        'yellowKey': 'Comdty',
        'systemTicker': 'pjm',
        'sector': 'Energy',
        'drwSymbol': 'PMI',
        'currency': 'USD',
        'varName': 'PJM',
        'variableContractSize': True,
        'contractSize': 'C:/Users/jkarisch/Projects/common/data/pjmContractSizes.csv',
        'bloombergDollarDivisor': 1,
        'settlementTime': '14:30',
    },
    'gc': {
        'shortName': 'gc',
        'oldName': 'gold',
        'formalName': 'Gold',
        'bloombergSymbol': 'GC',
        'yellowKey': 'Comdty',
        'systemTicker': 'gc',
        'sector': 'Metals',
        'drwSymbol': 'GC',
        'currency': 'USD',
        'varName': 'Gold',
        'variableContractSize': False,
        'contractSize': 100,
        'bloombergDollarDivisor': 1,
        'settlementTime': '13:30',
    },
    'si': {
        'shortName': 'si',
        'oldName': 'silver',
        'formalName': 'Silver',
        'bloombergSymbol': 'SI',
        'yellowKey': 'Comdty',
        'systemTicker': 'si',
        'sector': 'Metals',
        'drwSymbol': 'SI',
        'currency': 'USD',
        'varName': 'Silver',
        'variableContractSize': False,
        'contractSize': 5_000,
        'bloombergDollarDivisor': 1,
        'settlementTime': '13:25',
    },
    'pl': {
        'shortName': 'pl',
        'oldName': 'platinum',
        'formalName': 'Platinum',
        'bloombergSymbol': 'PL',
        'yellowKey': 'Comdty',
        'systemTicker': 'pl',
        'sector': 'Metals',
        'drwSymbol': 'PL',
        'currency': 'USD',
        'varName': 'Platinum',
        'variableContractSize': False,
        'contractSize': 50,
        'bloombergDollarDivisor': 1,
        'settlementTime': '13:05',
    },
    'pa': {
        'shortName': 'pa',
        'oldName': 'palladium',
        'formalName': 'Palladium',
        'bloombergSymbol': 'PA',
        'yellowKey': 'Comdty',
        'systemTicker': 'pa',
        'sector': 'Metals',
        'drwSymbol': 'PA',
        'currency': 'USD',
        'varName': 'Palladium',
        'variableContractSize': False,
        'contractSize': 100,
        'bloombergDollarDivisor': 1,
        'settlementTime': '13:00',
    },
    'hg': {
        'shortName': 'hg',
        'oldName': 'copper',
        'formalName': 'Copper',
        'bloombergSymbol': 'HG',
        'yellowKey': 'Comdty',
        'systemTicker': 'hg',
        'sector': 'Metals',
        'drwSymbol': 'CU',
        'currency': 'USD',
        'varName': 'Copper',
        'variableContractSize': False,
        'contractSize': 25_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '13:00',
    },
    'la': {
        'shortName': 'la',
        'oldName': 'aluminum',
        'formalName': 'Aluminum',
        'bloombergSymbol': 'LA',
        'yellowKey': 'Comdty',
        'systemTicker': 'la',
        'sector': 'Metals',
        'drwSymbol': 'LMEAHD',
        'currency': 'USD',
        'varName': 'Aluminum',
        'variableContractSize': False,
        'contractSize': 25,
        'bloombergDollarDivisor': 1,
        'settlementTime': '11:30',
    },
    'ln': {
        'shortName': 'ln',
        'oldName': 'nickel',
        'formalName': 'Nickel',
        'bloombergSymbol': 'LN',
        'yellowKey': 'Comdty',
        'systemTicker': 'ln',
        'sector': 'Metals',
        'drwSymbol': 'LMENID',
        'currency': 'USD',
        'varName': 'Nickel',
        'variableContractSize': False,
        'contractSize': 6,
        'bloombergDollarDivisor': 1,
        'settlementTime': '11:20',
    },
    'sco': {
        'shortName': 'sco',
        'oldName': 'iron',
        'formalName': 'Iron Ore',
        'bloombergSymbol': 'SCO',
        'yellowKey': 'Comdty',
        'systemTicker': 'sco',
        'sector': 'Metals',
        'drwSymbol': 'SGFEF',
        'currency': 'USD',
        'varName': 'Iron',
        'variableContractSize': False,
        'contractSize': 100,
        'bloombergDollarDivisor': 1,
        'settlementTime': '04:30',
    },
    'lh': {
        'shortName': 'lh',
        'oldName': 'leanhogs',
        'formalName': 'Lean Hogs',
        'bloombergSymbol': 'LH',
        'yellowKey': 'Comdty',
        'systemTicker': 'lh',
        'sector': 'Livestock',
        'drwSymbol': '54',
        'currency': 'USD',
        'varName': 'Lean Hogs',
        'variableContractSize': False,
        'contractSize': 40_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '14:00',
    },
    'fc': {
        'shortName': 'fc',
        'oldName': 'feeder',
        'formalName': 'Feeder Cattle',
        'bloombergSymbol': 'FC',
        'yellowKey': 'Comdty',
        'systemTicker': 'fc',
        'sector': 'Livestock',
        'drwSymbol': 'FC',
        'currency': 'USD',
        'varName': 'Feeder Cattle',
        'variableContractSize': False,
        'contractSize': 50_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '14:00',
    },
    'sm': {
        'shortName': 'sm',
        'oldName': 'soymeal',
        'formalName': 'Soybean Meal',
        'bloombergSymbol': 'SM',
        'yellowKey': 'Comdty',
        'systemTicker': 'sm',
        'sector': 'Grains',
        'drwSymbol': 'SM',
        'currency': 'USD',
        'varName': 'Soybean Meal',
        'variableContractSize': False,
        'contractSize': 100,
        'bloombergDollarDivisor': 1,
        'settlementTime': '14:15',
    },
    'kw': {
        'shortName': 'kw',
        'oldName': 'hrw',
        'formalName': 'KC Wheat',
        'bloombergSymbol': 'KW',
        'yellowKey': 'Comdty',
        'systemTicker': 'kw',
        'sector': 'Grains',
        'drwSymbol': 'KCB',
        'currency': 'USD',
        'varName': 'Wheat',
        'variableContractSize': False,
        'contractSize': 5_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '14:15',
    },
    'w ': {
        'shortName': 'w ',
        'oldName': 'srw',
        'formalName': 'Chicago Wheat',
        'bloombergSymbol': 'W ',
        'yellowKey': 'Comdty',
        'systemTicker': 'w',
        'sector': 'Grains',
        'drwSymbol': 'W',
        'currency': 'USD',
        'varName': 'Wheat',
        'variableContractSize': False,
        'contractSize': 5_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '14:15',
    },
    'c ': {
        'shortName': 'c ',
        'oldName': 'corn',
        'formalName': 'Corn',
        'bloombergSymbol': 'C ',
        'yellowKey': 'Comdty',
        'systemTicker': 'c',
        'sector': 'Grains',
        'drwSymbol': 'C',
        'currency': 'USD',
        'varName': 'Corn',
        'variableContractSize': False,
        'contractSize': 5_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '14:15',
    },
    's ': {
        'shortName': 's ',
        'oldName': 'soybean',
        'formalName': 'Soybeans',
        'bloombergSymbol': 'S ',
        'yellowKey': 'Comdty',
        'systemTicker': 's',
        'sector': 'Grains',
        'drwSymbol': 'S',
        'currency': 'USD',
        'varName': 'Soybeans',
        'variableContractSize': False,
        'contractSize': 5_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '14:15',
    },
    'sb': {
        'shortName': 'sb',
        'oldName': 'sugar',
        'formalName': 'Sugar',
        'bloombergSymbol': 'SB',
        'yellowKey': 'Comdty',
        'systemTicker': 'sb',
        'sector': 'Softs',
        'drwSymbol': 'S11',
        'currency': 'USD',
        'varName': 'Sugar',
        'variableContractSize': False,
        'contractSize': 112_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '12:55',
    },
    'ct': {
        'shortName': 'ct',
        'oldName': 'cotton',
        'formalName': 'Cotton',
        'bloombergSymbol': 'CT',
        'yellowKey': 'Comdty',
        'systemTicker': 'ct',
        'sector': 'Softs',
        'drwSymbol': 'CT',
        'currency': 'USD',
        'varName': 'Cotton',
        'variableContractSize': False,
        'contractSize': 50_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '14:15',
    },
    'kc': {
        'shortName': 'kc',
        'oldName': 'coffee',
        'formalName': 'Coffee',
        'bloombergSymbol': 'KC',
        'yellowKey': 'Comdty',
        'systemTicker': 'kc',
        'sector': 'Softs',
        'drwSymbol': 'CF',
        'currency': 'USD',
        'varName': 'Coffee',
        'variableContractSize': False,
        'contractSize': 37_500,
        'bloombergDollarDivisor': 100,
        'settlementTime': '12:25',
    },
    'ko': {
        'shortName': 'ko',
        'oldName': 'palmoil',
        'formalName': 'Palm Oil',
        'bloombergSymbol': 'KO',
        'yellowKey': 'Comdty',
        'systemTicker': 'ko',
        'sector': 'Softs',
        'drwSymbol': 'FCPO',
        'currency': 'MYR',
        'varName': 'Palm Oil',
        'variableContractSize': False,
        'contractSize': 25,
        'bloombergDollarDivisor': 1,
        'settlementTime': '05:00',
    },
    'bo': {
        'shortName': 'bo',
        'oldName': 'beanoil',
        'formalName': 'Bean Oil',
        'bloombergSymbol': 'BO',
        'yellowKey': 'Comdty',
        'systemTicker': 'bo',
        'sector': 'Softs',
        'drwSymbol': 'BO',
        'currency': 'USD',
        'varName': 'Soybean Oil',
        'variableContractSize': False,
        'contractSize': 60_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '14:15',
    },
    'rs': {
        'shortName': 'rs',
        'oldName': 'canola',
        'formalName': 'Canola',
        'bloombergSymbol': 'RS',
        'yellowKey': 'Comdty',
        'systemTicker': 'rs',
        'sector': 'Softs',
        'drwSymbol': 'W8',
        'currency': 'CAD',
        'varName': 'Canola',
        'variableContractSize': False,
        'contractSize': 20,
        'bloombergDollarDivisor': 1,
        'settlementTime': '14:15',
    },
    'ec': {
        'shortName': 'ec',
        'oldName': 'euro',
        'formalName': 'EUR',
        'bloombergSymbol': 'EC',
        'yellowKey': 'Curncy',
        'systemTicker': 'eur',
        'sector': 'FX',
        'drwSymbol': 'EC',
        'currency': 'USD',
        'varName': 'EUR-USD',
        'variableContractSize': False,
        'contractSize': 100_000,
        'bloombergDollarDivisor': 1,
        'settlementTime': '15:00',
    },
    'ad': {
        'shortName': 'ad',
        'oldName': 'aus',
        'formalName': 'AUD',
        'bloombergSymbol': 'AD',
        'yellowKey': 'Curncy',
        'systemTicker': 'aud',
        'sector': 'FX',
        'drwSymbol': 'AD',
        'currency': 'USD',
        'varName': 'AUD-USD',
        'variableContractSize': False,
        'contractSize': 100_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '15:00',
    },
    'jy': {
        'shortName': 'jy',
        'oldName': 'yen',
        'formalName': 'JPY',
        'bloombergSymbol': 'JY',
        'yellowKey': 'Curncy',
        'systemTicker': 'jpy',
        'sector': 'FX',
        'drwSymbol': 'JY',
        'currency': 'USD',
        'varName': 'USD-JPY',
        'variableContractSize': False,
        'contractSize': 12_500_000,
        'bloombergDollarDivisor': 10_000,
        'settlementTime': '15:00',
    },
    'br': {
        'shortName': 'br',
        'oldName': 'real',
        'formalName': 'BRL',
        'bloombergSymbol': 'BR',
        'yellowKey': 'Curncy',
        'systemTicker': 'brl',
        'sector': 'FX',
        'drwSymbol': '6L',
        'currency': 'USD',
        'varName': 'USD-BRL',
        'variableContractSize': False,
        'contractSize': 100_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '15:00',
    },
    'ty': {
        'shortName': 'ty',
        'oldName': 'ty',
        'formalName': 'US Ten Year',
        'bloombergSymbol': 'TY',
        'yellowKey': 'Comdty',
        'systemTicker': 'ty',
        'sector': 'Bonds',
        'drwSymbol': 'TY',
        'currency': 'USD',
        'varName': '10 Year Treasury Notes',
        'variableContractSize': False,
        'contractSize': 100_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '15:00',
    },
    'oat': {
        'shortName': 'oat',
        'oldName': 'oat',
        'formalName': 'French Ten Year',
        'bloombergSymbol': 'OAT',
        'yellowKey': 'Comdty',
        'systemTicker': 'oat',
        'sector': 'Bonds',
        'drwSymbol': 'FOAT',
        'currency': 'EUR',
        'varName': 'FOAT',
        'variableContractSize': False,
        'contractSize': 100_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '11:15',
    },

    #need to reorder these
    'cc': {
        'shortName': 'cc',
        'oldName': 'cocoa',
        'formalName': 'Cocoa',
        'bloombergSymbol': 'CC',
        'yellowKey': 'Comdty',
        'systemTicker': 'cc',
        'sector': 'Softs',
        'drwSymbol': 'CY',
        'currency': 'USD',
        'varName': '',
        'variableContractSize': False,
        'contractSize': 10,
        'bloombergDollarDivisor': 1,
        'settlementTime': '11:50',
    },
    'lc': {
        'shortName': 'lc',
        'oldName': 'livecattle',
        'formalName': 'Live Cattle',
        'bloombergSymbol': 'LC',
        'yellowKey': 'Comdty',
        'systemTicker': 'lc',
        'sector': 'Livestock',
        'drwSymbol': '48',
        'currency': 'USD',
        'varName': '',
        'variableContractSize': False,
        'contractSize': 40_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '14:00',
    },
    'qw': {
        'shortName': 'qw',
        'oldName': 'whitesugar',
        'formalName': 'White Sugar',
        'bloombergSymbol': 'QW',
        'yellowKey': 'Comdty',
        'systemTicker': 'qw',
        'sector': 'Softs',
        'drwSymbol': 'S5',
        'currency': 'USD',
        'varName': '',
        'contractSize': 50,
        'bloombergDollarDivisor': 1,
        'settlementTime': '12:55',
    },
    'df': {
        'shortName': 'df',
        'oldName': 'robusta',
        'formalName': 'Robusta',
        'bloombergSymbol': 'DF',
        'yellowKey': 'Comdty',
        'systemTicker': 'df',
        'sector': 'Softs',
        'drwSymbol': 'RC',
        'currency': 'USD',
        'varName': '',
        'variableContractSize': False,
        'contractSize': 50,
        'bloombergDollarDivisor': 1,
        'settlementTime': '12:25',
    },
    'or': {
        'shortName': 'or',
        'oldName': 'rubber',
        'formalName': 'Rubber',
        'bloombergSymbol': 'OR',
        'yellowKey': 'Comdty',
        'systemTicker': 'or',
        'sector': 'Softs',
        'drwSymbol': 'SGTF',
        'currency': 'USD',
        'varName': '',
        'variableContractSize': False,
        'contractSize': 5_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '05:00',
    },
    'mw': {
        'shortName': 'mw',
        'oldName': 'hrs',
        'formalName': 'Minneapolis Wheat',
        'bloombergSymbol': 'MW',
        'yellowKey': 'Comdty',
        'systemTicker': 'mw',
        'sector': 'Grains',
        'drwSymbol': 'MWE',
        'currency': 'USD',
        'varName': '',
        'variableContractSize': False,
        'contractSize': 5_000,
        'bloombergDollarDivisor': 100,
        'settlementTime': '14:15',
    },
    'es': {
        'shortName': 'es',
        'oldName': 'es',
        'formalName': 'S&P500',
        'bloombergSymbol': 'ES',
        'yellowKey': 'Index',
        'systemTicker': 'es',
        'sector': 'Stocks',
        'drwSymbol': 'RVB',
        'currency': 'USD',
        'varName': '',
        'variableContractSize': False,
        'contractSize': 50,
        'bloombergDollarDivisor': 1,
        'settlementTime': '15:00',
    },
    'tmt': {
        'shortName': 'tmt',
        'oldName': 'tmt',
        'formalName': 'Tetco M3',
        'bloombergSymbol': 'ZOY',
        'yellowKey': 'Comdty',
        'systemTicker': 'tmt',
        'sector': 'Energy',
        'drwSymbol': 'TMT',
        'currency': 'USD',
        'varName': '',
        'variableContractSize': False,
        'contractSize': 2500,
        'bloombergDollarDivisor': 1,
        'settlementTime': '14:30',
    },
}

commodNameOrder = [
    'crude',
    'brent',
    'diesel',
    'gasoline',
    'natgas',
    'ttf',
    'propane',
    'pjm',
    'gold',
    'silver',
    'platinum',
    'palladium',
    'copper',
    'aluminum',
    'nickel',
    'iron',
    'leanhogs',
    'feeder',
    'soymeal',
    'hrw',
    'srw',
    'corn',
    'soybean',
    'sugar',
    'cotton',
    'coffee',
    'palmoil',
    'beanoil',
    'canola',
    'euro',
    'aus',
    'yen',
    'real',
    'ty',
    'oat'
]

commodNameToFormalName = {
    'palmoil': 'Palm Oil',
    'soymeal': 'Soybean Meal',
    'sugar': 'Sugar',
    'coffee': 'Coffee',
    'crude': 'WTI',
    'brent': 'Brent',
    'natgas': 'Natural Gas',
    'gold': 'Gold',
    'platinum': 'Platinum',
    'copper': 'Copper',
    'palladium': 'Palladium',
    'cotton': 'Cotton',
    'nickel': 'Nickel',
    'aluminum': 'Aluminum',
    'leanhogs': 'Lean Hogs',
    'canola': 'Canola',
    'hrw': 'KC Wheat',
    'feeder': 'Feeder Cattle',
    'ttf': 'TTF',
    'propane': 'Propane',
    'pjm': 'PJM',
    'euro': 'EUR',
    'real': 'BRL',
    'aus': 'AUD',
    'yen': 'JPY',
    'ty': 'US Ten Year',
    'oat': 'French Ten Year',
    'tmt': 'Tetco M3',
    'iron': 'Iron Ore',
    'beanoil': 'Bean Oil',
    'diesel': 'Diesel',
    'gasoline': 'Gasoline',
    'silver': 'Silver',
    'srw': 'Chicago Wheat',
    'corn': 'Corn',
    'soybean': 'Soybeans',
}

commodNameToBloombergSym = {
    'palmoil': 'KO',
    'soymeal': 'SM',
    'sugar': 'SB',
    'coffee': 'KC',
    'crude': 'CL',
    'brent': 'CO',
    'natgas': 'NG',
    'gold': 'GC',
    'platinum': 'PL',
    'copper': 'HG',
    'nickel': 'LN',
    'aluminum': 'LA',
    'palladium': 'PA',
    'cotton': 'CT',
    'leanhogs': 'LH',
    'feeder': 'FC',
    'canola': 'RS',
    'hrw': 'KW',
    'ttf': 'TZT',
    'pjm': 'ZLS',
    'propane': 'BAP',
    'real': 'BR',
    'yen': 'JY',
    'euro': 'EC',
    'aus': 'AD',
    'ty': 'TY',
    'oat': 'OAT',
    'tmt': 'ZOY',
    'iron': 'SCO',
    'beanoil': 'BO',
    'diesel': 'HO',
    'gasoline': 'XB',
    'silver': 'SI',
    'srw': 'W ',
    'corn': 'C ',
    'soybean': 'S ',
}

commodNameToBloombergCategory = {
    'palmoil': 'Comdty',
    'soymeal': 'Comdty',
    'sugar': 'Comdty',
    'coffee': 'Comdty',
    'crude': 'Comdty',
    'brent': 'Comdty',
    'natgas': 'Comdty',
    'gold': 'Comdty',
    'platinum': 'Comdty',
    'copper': 'Comdty',
    'nickel': 'Comdty',
    'aluminum': 'Comdty',
    'palladium': 'Comdty',
    'cotton': 'Comdty',
    'leanhogs': 'Comdty',
    'feeder': 'Comdty',
    'canola': 'Comdty',
    'hrw': 'Comdty',
    'ttf': 'Comdty',
    'pjm': 'Comdty',
    'propane': 'Comdty',
    'real': 'Curncy',
    'yen': 'Curncy',
    'euro': 'Curncy',
    'aus': 'Curncy',
    'ty': 'Comdty',
    'oat': 'Comdty',
    'tmt': 'Comdty',
    'iron': 'Comdty',
    'beanoil': 'Comdty',
    'diesel': 'Comdty',
    'gasoline': 'Comdty',
    'silver': 'Comdty',
    'srw': 'Comdty',
    'corn': 'Comdty',
    'soybean': 'Comdty',
}

commodNameToTicker = {
    'palmoil': 'ko',
    'soymeal': 'sm',
    'sugar': 'sb',
    'coffee': 'kc',
    'crude': 'cl',
    'brent': 'co',
    'natgas': 'ng',
    'gold': 'gc',
    'platinum': 'pl',
    'copper': 'hg',
    'nickel': 'ln',
    'aluminum': 'la',
    'palladium': 'pa',
    'cotton': 'ct',
    'leanhogs': 'lh',
    'feeder': 'fc',
    'canola': 'rs',
    'hrw': 'kw',
    'ttf': 'ttf',
    'pjm': 'pjm',
    'propane': 'bap',
    'real': 'brl',
    'yen': 'jpy',
    'euro': 'eur',
    'aus': 'aud',
    'ty': 'ty',
    'oat': 'oat',
    'tmt': 'tmt',
    'iron': 'sco',
    'beanoil': 'bo',
    'diesel': 'ho',
    'gasoline': 'xb',
    'silver': 'si',
    'srw': 'w',
    'corn': 'c',
    'soybean': 's',
}

commodNameToSector = {
    'palmoil': 'Softs',
    'soymeal': 'Grains',
    'sugar': 'Softs',
    'coffee': 'Softs',
    'crude': 'Energy',
    'brent': 'Energy',
    'natgas': 'Energy',
    'gold': 'Metals',
    'platinum': 'Metals',
    'copper': 'Metals',
    'nickel': 'Metals',
    'aluminum': 'Metals',
    'palladium': 'Metals',
    'cotton': 'Softs',
    'leanhogs': 'Livestock',
    'feeder': 'Livestock',
    'canola': 'Softs',
    'hrw': 'Grains',
    'ttf': 'Energy',
    'pjm': 'Energy',
    'propane': 'Energy',
    'real': 'FX',
    'yen': 'FX',
    'euro': 'FX',
    'aus': 'FX',
    'ty': 'Bonds',
    'oat': 'Bonds',
    'tmt': 'Energy',
    'iron': 'Metals',
    'beanoil': 'Softs',
    'diesel': 'Energy',
    'gasoline': 'Energy',
    'silver': 'Metals',
    'srw': 'Grains',
    'corn': 'Grains',
    'soybean': 'Grains',
}

commodNameToDRWSym = {
    'palmoil': 'FCPO',
    'soymeal': 'SM',
    'sugar': 'S11',
    'coffee': 'CF',
    'crude': 'CL',
    'brent': 'BC',
    'natgas': 'NG',
    'gold': 'GC',
    'platinum': 'PL',
    'copper': 'CU',
    'nickel': 'LMENID',
    'aluminum': 'LMEAHD',
    'palladium': 'PA',
    'cotton': 'CT',
    'leanhogs': '54',
    'feeder': 'FC',
    'canola': 'W8',
    'hrw': 'KCB',
    'ttf': 'TTF',
    'pjm': 'PMI',
    'propane': 'B0',
    'real': '6L',
    'yen': 'JY',
    'euro': 'EC',
    'aus': 'AD',
    'ty': 'TY',
    'oat': 'FOAT',
    'tmt': 'TMT',
    'iron': 'SGFEF',
    'beanoil': 'BO',
    'diesel': 'HO',
    'gasoline': 'RB',
    'silver': 'SI',
    'srw': 'W',
    'corn': 'C',
    'soybean': 'S',
}

commodNameToCurrency = {
    'palmoil': 'MYR',
    'soymeal': 'USD',
    'sugar': 'USD',
    'coffee': 'USD',
    'crude': 'USD',
    'brent': 'USD',
    'natgas': 'USD',
    'gold': 'USD',
    'platinum': 'USD',
    'copper': 'USD',
    'nickel': 'USD',
    'aluminum': 'USD',
    'palladium': 'USD',
    'cotton': 'USD',
    'leanhogs': 'USD',
    'feeder': 'USD',
    'canola': 'CAD',
    'hrw': 'USD',
    'ttf': 'EUR',
    'pjm': 'USD',
    'propane': 'USD',
    'real': 'USD',
    'yen': 'USD',
    'euro': 'USD',
    'aus': 'USD',
    'ty': 'USD',
    'oat': 'EUR',
    'tmt': 'USD',
    'iron': 'USD',
    'beanoil': 'USD',
    'diesel': 'USD',
    'gasoline': 'USD',
    'silver': 'USD',
    'srw': 'USD',
    'corn': 'USD',
    'soybean': 'USD',
}

commodNameToVaRName = {
    'ty': '10 Year Treasury Notes',
    'aus': 'AUD-USD',
    'aluminum': 'Aluminum',
    'brent': 'Brent',
    'canola': 'Canola',
    'coffee': 'Coffee',
    'copper': 'Copper',
    'corn': 'Corn',
    'cotton': 'Cotton',
    'ttf': 'Dutch',
    'euro': 'EUR-USD',
    'oat': 'FOAT',
    'feeder': 'Feeder Cattle',
    'gold': 'Gold',
    'diesel': 'Heating Oil',
    'natgas': 'Henry Hub',
    'iron': 'Iron',
    'leanhogs': 'Lean Hogs',
    'nickel': 'Nickel',
    'pjm': 'PJM',
    'palladium': 'Palladium',
    'palmoil': 'Palm Oil',
    'platinum': 'Platinum',
    'propane': 'Propane',
    'gasoline': 'RBOB',
    'silver': 'Silver',
    'soymeal': 'Soybean Meal',
    'beanoil': 'Soybean Oil',
    'soybean': 'Soybeans',
    'sugar': 'Sugar',
    'real': 'USD-BRL',
    'yen': 'USD-JPY',
    'crude': 'WTI',
    'hrw': 'Wheat',
    'srw': 'Wheat',
}

commodTickerToName = reverseDict(commodNameToTicker)
commodNames = list(commodNameToTicker.keys())

weekdaysDf = pd.read_csv('C:/Users/jkarisch/Projects/common/data/weekdays.csv', parse_dates=['date'])
weekdaysSeries = weekdaysDf['date']
weekdays = weekdaysSeries.to_numpy()

contractLvd = pd.read_csv('C:/Users/jkarisch/Projects/common/data/contractLvd.csv', index_col=0).astype('datetime64')
contractFnd = pd.read_csv('C:/Users/jkarisch/Projects/common/data/contractFnd.csv', index_col=0).astype('datetime64')
contractLtd = pd.read_csv('C:/Users/jkarisch/Projects/common/data/contractLtd.csv', index_col=0).astype('datetime64')

stripContracts = pd.read_csv('C:/Users/jkarisch/Projects/common/data/stripContracts.csv', index_col=0)

variablesContractSizes = {
    'tzt': pd.read_csv('C:/Users/jkarisch/Projects/common/data/ttfContractSizes.csv'),
    'zls': pd.read_csv('C:/Users/jkarisch/Projects/common/data/pjmContractSizes.csv')
}

contractExpirationDict = {
    'fnd': contractFnd,
    'ltd': contractLtd,
    'lvd': contractLvd
}

weekdayStrToInt = {
    'monday': 0,
    'tuesday': 1,
    'wednesday': 2,
    'thursday': 3,
    'friday': 4,
    'saturday': 5,
    'sunday': 6
}
weekdayIntToStr = reverseDict(weekdayStrToInt)