SuperModelingFactory 0.2.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.
Files changed (79) hide show
  1. ExcelMaster/ExcelFormatTool.py +487 -0
  2. ExcelMaster/ExcelMaster.py +917 -0
  3. ExcelMaster/Template.py +525 -0
  4. ExcelMaster/Utility.py +233 -0
  5. ExcelMaster/__init__.py +3 -0
  6. Modeling_Tool/Core/Binning_Tool.py +1608 -0
  7. Modeling_Tool/Core/Binning_Tool.pyi +48 -0
  8. Modeling_Tool/Core/Check_DuckDB_Compatibility.py +835 -0
  9. Modeling_Tool/Core/Json_Data_Converter.py +621 -0
  10. Modeling_Tool/Core/Model_Registry_Tool.py +199 -0
  11. Modeling_Tool/Core/ODPS_Tool.py +284 -0
  12. Modeling_Tool/Core/Slope_Tool.py +356 -0
  13. Modeling_Tool/Core/Slope_Tool.pyi +31 -0
  14. Modeling_Tool/Core/XOR_Encryptor.py +207 -0
  15. Modeling_Tool/Core/XOR_Encryptor.pyi +26 -0
  16. Modeling_Tool/Core/__init__.py +99 -0
  17. Modeling_Tool/Core/kDataFrame.py +228 -0
  18. Modeling_Tool/Core/kDataFrame.pyi +43 -0
  19. Modeling_Tool/Core/sample_weight_utils.py +77 -0
  20. Modeling_Tool/Core/utils.py +2672 -0
  21. Modeling_Tool/Eval/Evaluation_Tool.py +1452 -0
  22. Modeling_Tool/Eval/Evaluation_Tool.pyi +47 -0
  23. Modeling_Tool/Eval/Model_Eval_Tool.py +2548 -0
  24. Modeling_Tool/Eval/Model_Eval_Tool.pyi +37 -0
  25. Modeling_Tool/Eval/__init__.py +54 -0
  26. Modeling_Tool/Eval/evaluate_model.py +2008 -0
  27. Modeling_Tool/Eval/evaluate_model.pyi +50 -0
  28. Modeling_Tool/Eval/weighted_eval_utils.py +326 -0
  29. Modeling_Tool/Explainability/Coalition_Structure.py +305 -0
  30. Modeling_Tool/Explainability/Model_Explainer.py +743 -0
  31. Modeling_Tool/Explainability/__init__.py +24 -0
  32. Modeling_Tool/Feature/Distribution_Tool.py +509 -0
  33. Modeling_Tool/Feature/Distribution_Tool.pyi +42 -0
  34. Modeling_Tool/Feature/Feature_Insights.py +762 -0
  35. Modeling_Tool/Feature/Feature_Insights.pyi +33 -0
  36. Modeling_Tool/Feature/PSI_Tool.py +1195 -0
  37. Modeling_Tool/Feature/PSI_Tool.pyi +29 -0
  38. Modeling_Tool/Feature/WOE_Engine_Feature_Patch.py +355 -0
  39. Modeling_Tool/Feature/__init__.py +40 -0
  40. Modeling_Tool/Model/Backward_Tool.py +778 -0
  41. Modeling_Tool/Model/Backward_Tool.pyi +45 -0
  42. Modeling_Tool/Model/GBM_Search_Tool.py +251 -0
  43. Modeling_Tool/Model/GBM_Tool.py +1610 -0
  44. Modeling_Tool/Model/GBM_Tool.pyi +90 -0
  45. Modeling_Tool/Model/LRM_Tool.py +1198 -0
  46. Modeling_Tool/Model/LRM_Tool.pyi +47 -0
  47. Modeling_Tool/Model/__init__.py +61 -0
  48. Modeling_Tool/Sample/Distribution_Adaptation.py +131 -0
  49. Modeling_Tool/Sample/Distribution_Adaptation.pyi +30 -0
  50. Modeling_Tool/Sample/Reject_Infer.py +413 -0
  51. Modeling_Tool/Sample/Reject_Infer.pyi +43 -0
  52. Modeling_Tool/Sample/Sample_Split.py +520 -0
  53. Modeling_Tool/Sample/Sample_Split.pyi +43 -0
  54. Modeling_Tool/Sample/__init__.py +31 -0
  55. Modeling_Tool/UAT/UAT_Consistency_Checker.py +1180 -0
  56. Modeling_Tool/UAT/__init__.py +19 -0
  57. Modeling_Tool/WOE/WOE_Adapter.py +204 -0
  58. Modeling_Tool/WOE/WOE_Adapter.pyi +21 -0
  59. Modeling_Tool/WOE/WOE_Master.py +491 -0
  60. Modeling_Tool/WOE/WOE_Master.pyi +40 -0
  61. Modeling_Tool/WOE/WOE_Monotone_Binner.py +3324 -0
  62. Modeling_Tool/WOE/WOE_Monotone_Binner.pyi +71 -0
  63. Modeling_Tool/WOE/WOE_Plot_Tool.py +919 -0
  64. Modeling_Tool/WOE/WOE_Plot_Tool.pyi +46 -0
  65. Modeling_Tool/WOE/WOE_Report_Builder.py +214 -0
  66. Modeling_Tool/WOE/WOE_Report_Builder.pyi +24 -0
  67. Modeling_Tool/WOE/WOE_Tool.py +1094 -0
  68. Modeling_Tool/WOE/WOE_Tool.pyi +41 -0
  69. Modeling_Tool/WOE/__init__.py +86 -0
  70. Modeling_Tool/WOE/plot_woe_tool.py +290 -0
  71. Modeling_Tool/WOE/plot_woe_tool.pyi +25 -0
  72. Modeling_Tool/__init__.py +176 -0
  73. Report/Report_Tool.py +380 -0
  74. Report/__init__.py +3 -0
  75. supermodelingfactory-0.2.0.dist-info/METADATA +268 -0
  76. supermodelingfactory-0.2.0.dist-info/RECORD +79 -0
  77. supermodelingfactory-0.2.0.dist-info/WHEEL +5 -0
  78. supermodelingfactory-0.2.0.dist-info/licenses/LICENSE +102 -0
  79. supermodelingfactory-0.2.0.dist-info/top_level.txt +3 -0
@@ -0,0 +1,487 @@
1
+ import xlsxwriter
2
+ import pandas as pd
3
+ from datetime import datetime
4
+ import pdb, os
5
+ import logging
6
+ logger = logging.getLogger(__name__)
7
+
8
+ class ExcelFormat:
9
+ '''
10
+ Initialize excel format.
11
+
12
+ '''
13
+
14
+ def __init__(self, filepath):
15
+ '''
16
+ This creates the workbook using the filename specified in
17
+ filename_workbook.
18
+
19
+ '''
20
+
21
+ self.engine = pd.ExcelWriter(filepath, engine='xlsxwriter')
22
+ self.workbook = self.engine.book
23
+ self.basename = os.path.basename(filepath)
24
+ self.base_filepath = filepath.strip(self.basename)
25
+
26
+
27
+ ######### Basic Text-related Formatting ###############
28
+
29
+ self.dict_cell_format = {}
30
+
31
+ self.TEXT_NO_FORMAT = self.workbook.add_format({'font_name': 'Calibri', 'font_size': 11})
32
+ self.dict_cell_format['TEXT_NO_FORMAT'] = self.TEXT_NO_FORMAT
33
+ self.dict_cell_format[''] = self.TEXT_NO_FORMAT
34
+
35
+ self.HEADER_1 = self.workbook.add_format({
36
+ 'bold': True,
37
+ 'underline': False,
38
+ 'font_name': 'Calibri',
39
+ 'font_size': 18,
40
+ 'font_color': '#000000',
41
+ 'align': 'left'
42
+ })
43
+ self.dict_cell_format['HEADER_1'] = self.HEADER_1
44
+ self.dict_cell_format['#'] = self.HEADER_1
45
+
46
+ self.HEADER_2 = self.workbook.add_format({
47
+ 'bold': True,
48
+ 'underline': False,
49
+ 'font_name': 'Calibri',
50
+ 'font_size': 16,
51
+ 'font_color': '#000000',
52
+ 'align': 'left'
53
+ })
54
+ self.dict_cell_format['HEADER_2'] = self.HEADER_2
55
+ self.dict_cell_format['##'] = self.HEADER_2
56
+
57
+ self.HEADER_3 = self.workbook.add_format({
58
+ 'bold': True,
59
+ 'underline': False,
60
+ 'font_name': 'Calibri',
61
+ 'font_size': 14,
62
+ 'font_color': '#000000',
63
+ 'align': 'left'
64
+ })
65
+ self.dict_cell_format['HEADER_3'] = self.HEADER_3
66
+ self.dict_cell_format['###'] = self.HEADER_3
67
+
68
+ self.HEADER_4 = self.workbook.add_format({
69
+ 'bold': True,
70
+ 'underline': False,
71
+ 'font_name': 'Calibri',
72
+ 'font_size': 12,
73
+ 'font_color': '#000000',
74
+ 'align': 'left'
75
+ })
76
+ self.dict_cell_format['HEADER_4'] = self.HEADER_4
77
+ self.dict_cell_format['####'] = self.HEADER_4
78
+
79
+ self.HEADER_1I = self.workbook.add_format({
80
+ 'bold': True,
81
+ 'underline': True,
82
+ 'font_name': 'Calibri',
83
+ 'font_size': 18,
84
+ 'font_color': '#000000',
85
+ 'align': 'left'
86
+ })
87
+ self.dict_cell_format['HEADER_1I'] = self.HEADER_1I
88
+ self.dict_cell_format['#_'] = self.HEADER_1I
89
+
90
+ self.HEADER_2I = self.workbook.add_format({
91
+ 'bold': True,
92
+ 'underline': True,
93
+ 'font_name': 'Calibri',
94
+ 'font_size': 16,
95
+ 'font_color': '#000000',
96
+ 'align': 'left'
97
+ })
98
+ self.dict_cell_format['HEADER_2I'] = self.HEADER_2I
99
+ self.dict_cell_format['##_'] = self.HEADER_2I
100
+
101
+ self.HEADER_3I = self.workbook.add_format({
102
+ 'bold': True,
103
+ 'underline': True,
104
+ 'font_name': 'Calibri',
105
+ 'font_size': 14,
106
+ 'font_color': '#000000',
107
+ 'align': 'left'
108
+ })
109
+ self.dict_cell_format['HEADER_3I'] = self.HEADER_3I
110
+ self.dict_cell_format['###_'] = self.HEADER_3I
111
+
112
+ self.HEADER_4I = self.workbook.add_format({
113
+ 'bold': True,
114
+ 'underline': True,
115
+ 'font_name': 'Calibri',
116
+ 'font_size': 12,
117
+ 'font_color': '#000000',
118
+ 'align': 'left'
119
+ })
120
+ self.dict_cell_format['HEADER_4I'] = self.HEADER_4I
121
+ self.dict_cell_format['####_'] = self.HEADER_4I
122
+
123
+ self.TEXT_BOLD = self.workbook.add_format({
124
+ 'bold': True,
125
+ 'underline': False,
126
+ 'font_name': 'Calibri',
127
+ 'font_size': 11,
128
+ 'font_color': '#000000',
129
+ 'align': 'left'
130
+ })
131
+ self.dict_cell_format['TEXT_BOLD'] = self.TEXT_BOLD
132
+ self.dict_cell_format['B'] = self.TEXT_BOLD
133
+ self.dict_cell_format['**'] = self.TEXT_BOLD
134
+
135
+ self.TEXT_ITALIC = self.workbook.add_format({
136
+ 'bold': False,
137
+ 'underline': False,
138
+ 'font_name': 'Calibri',
139
+ 'font_size': 11,
140
+ 'font_color': '#000000',
141
+ 'align': 'left',
142
+ 'italic': True
143
+ })
144
+ self.dict_cell_format['TEXT_ITALIC'] = self.TEXT_ITALIC
145
+ self.dict_cell_format['I'] = self.TEXT_ITALIC
146
+ self.dict_cell_format['*'] = self.TEXT_ITALIC
147
+
148
+ self.TEXT_UNDERLINE = self.workbook.add_format({
149
+ 'bold': False,
150
+ 'underline': True,
151
+ 'font_name': 'Calibri',
152
+ 'font_size': 11,
153
+ 'font_color': '#000000',
154
+ 'align': 'left',
155
+ 'italic': False
156
+ })
157
+ self.dict_cell_format['TEXT_UNDERLINE'] = self.TEXT_UNDERLINE
158
+ self.dict_cell_format['U'] = self.TEXT_UNDERLINE
159
+ self.dict_cell_format['_'] = self.TEXT_UNDERLINE
160
+
161
+ self.TEXT_NO_FORMAT_BORDER = self.workbook.add_format({
162
+ 'bold': False,
163
+ 'underline': False,
164
+ 'font_name': 'Calibri',
165
+ 'font_size': 11,
166
+ 'font_color': '#000000',
167
+ 'align': 'left',
168
+ 'border': 1
169
+ })
170
+ self.dict_cell_format['TEXT_NO_FORMAT_BORDER'] = self.TEXT_NO_FORMAT_BORDER
171
+ self.dict_cell_format['BORDER'] = self.TEXT_NO_FORMAT_BORDER
172
+ self.dict_cell_format['----'] = self.TEXT_NO_FORMAT_BORDER
173
+
174
+ self.TEXT_BORDER_CENTER = self.workbook.add_format({
175
+ 'bold': False,
176
+ 'underline': False,
177
+ 'font_name': 'Calibri',
178
+ 'font_size': 11,
179
+ 'font_color': '#000000',
180
+ 'align': 'center',
181
+ 'valign': 'vcenter',
182
+ 'border': 1
183
+ })
184
+ self.dict_cell_format['TEXT_BORDER_CENTER'] = self.TEXT_BORDER_CENTER
185
+ self.dict_cell_format['BORDER_CENTER'] = self.TEXT_BORDER_CENTER
186
+ self.dict_cell_format['----C'] = self.TEXT_BORDER_CENTER
187
+
188
+ self.TEXT_RED = self.workbook.add_format({
189
+ 'font_name': 'Calibri',
190
+ 'font_size': 11,
191
+ 'font_color': '#FF3800',
192
+ 'align': 'left'
193
+ })
194
+ self.dict_cell_format['TEXT_RED'] = self.TEXT_RED
195
+ self.dict_cell_format['RED'] = self.TEXT_RED
196
+
197
+ self.TEXT_RED_BOLD = self.workbook.add_format({
198
+ 'font_name': 'Calibri',
199
+ 'font_size': 11,
200
+ 'font_color': '#FF3800',
201
+ "bold": True,
202
+ 'align': 'left'
203
+ })
204
+ self.dict_cell_format['TEXT_RED_BOLD'] = self.TEXT_RED_BOLD
205
+ self.dict_cell_format['**RED'] = self.TEXT_RED_BOLD
206
+
207
+ self.TEXT_BOLD_UNDERLINE = self.workbook.add_format({
208
+ 'bold': True,
209
+ 'underline': True,
210
+ 'font_name': 'Calibri',
211
+ 'font_size': 11,
212
+ 'align': 'left'
213
+ })
214
+ self.dict_cell_format['TEXT_BOLD_UNDERLINE'] = self.TEXT_BOLD_UNDERLINE
215
+ self.dict_cell_format['BU'] = self.TEXT_BOLD_UNDERLINE
216
+ self.dict_cell_format['**_'] = self.TEXT_BOLD_UNDERLINE
217
+
218
+ self.TEXT_ITALIC_UNDERLINE = self.workbook.add_format({
219
+ 'bold': False,
220
+ 'underline': True,
221
+ 'italic': True,
222
+ 'font_name': 'Calibri',
223
+ 'font_size': 11,
224
+ 'align': 'left'
225
+ })
226
+ self.dict_cell_format['TEXT_ITALIC_UNDERLINE'] = self.TEXT_ITALIC_UNDERLINE
227
+ self.dict_cell_format['IU'] = self.TEXT_ITALIC_UNDERLINE
228
+ self.dict_cell_format['*_'] = self.TEXT_ITALIC_UNDERLINE
229
+
230
+ self.TEXT_BOLD_ITALIC_UNDERLINE = self.workbook.add_format({
231
+ 'bold': True,
232
+ 'underline': True,
233
+ 'italic': True,
234
+ 'font_name': 'Calibri',
235
+ 'font_size': 11,
236
+ 'align': 'left'
237
+ })
238
+ self.dict_cell_format['TEXT_BOLD_ITALIC_UNDERLINE'] = self.TEXT_BOLD_ITALIC_UNDERLINE
239
+ self.dict_cell_format['BIU'] = self.TEXT_BOLD_ITALIC_UNDERLINE
240
+ self.dict_cell_format['***_'] = self.TEXT_BOLD_ITALIC_UNDERLINE
241
+
242
+ self.HEADER_3_BOLD_UNDERLINE = self.workbook.add_format({
243
+ 'bold': True,
244
+ 'underline': True,
245
+ 'font_name': 'Calibri',
246
+ 'font_size': 14,
247
+ 'align': 'left'
248
+ })
249
+ self.dict_cell_format['HEADER_4_BOLD_UNDERLINE'] = self.HEADER_3_BOLD_UNDERLINE
250
+ self.dict_cell_format['H3_BU'] = self.HEADER_3_BOLD_UNDERLINE
251
+ self.dict_cell_format['####**_'] = self.HEADER_3_BOLD_UNDERLINE
252
+
253
+ self.HEADER_4_BOLD_UNDERLINE = self.workbook.add_format({
254
+ 'bold': True,
255
+ 'underline': True,
256
+ 'font_name': 'Calibri',
257
+ 'font_size': 12,
258
+ 'align': 'left'
259
+ })
260
+ self.dict_cell_format['HEADER_4_BOLD_UNDERLINE'] = self.HEADER_4_BOLD_UNDERLINE
261
+ self.dict_cell_format['H4_BU'] = self.HEADER_4_BOLD_UNDERLINE
262
+ self.dict_cell_format['####**_'] = self.HEADER_4_BOLD_UNDERLINE
263
+
264
+ self.TEXT_NO_FORMAT_PERCENTAGE = self.workbook.add_format({
265
+ 'bold': False,
266
+ 'underline': False,
267
+ 'font_name': 'Calibri',
268
+ 'font_size': 11,
269
+ 'font_color': '#000000',
270
+ 'num_format': '0.0000%',
271
+ 'align': 'left',
272
+ 'border': 1
273
+ })
274
+ self.dict_cell_format['TEXT_NO_FORMAT_PERCENTAGE'] = self.TEXT_NO_FORMAT_PERCENTAGE
275
+ self.dict_cell_format['NUM_PERCENTAGE'] = self.TEXT_NO_FORMAT_PERCENTAGE
276
+ self.dict_cell_format['%'] = self.TEXT_NO_FORMAT_PERCENTAGE
277
+
278
+ self.TEXT_SECTION_HEADER = self.workbook.add_format({
279
+ 'bold': True,
280
+ 'font_name': 'Calibri',
281
+ 'font_size': 12,
282
+ 'font_color': '#1F497D',
283
+ 'bg_color': '#C5D9F1',
284
+ 'align': 'center',
285
+ 'valign': 'vcenter',
286
+ 'text_wrap': False
287
+ })
288
+ self.dict_cell_format['TEXT_SECTION_HEADER'] = self.TEXT_SECTION_HEADER
289
+ self.dict_cell_format['SECTION'] = self.TEXT_SECTION_HEADER
290
+
291
+ self.TEXT_ITALIC_10 = self.workbook.add_format({
292
+ 'italic': True,
293
+ 'font_name': 'Calibri',
294
+ 'font_size': 10,
295
+ 'align': 'left'
296
+ })
297
+ self.dict_cell_format['TEXT_ITALIC_10'] = self.TEXT_ITALIC_10
298
+
299
+ ######### Basic Text-related Formatting (END) ###############
300
+
301
+
302
+ ######### TABLE HEADER FORMATTING ##########################
303
+
304
+ self.TABLE_ROW_COL_HEADER = self.workbook.add_format({
305
+ 'bold': True,
306
+ 'font_name': 'Calibri',
307
+ 'font_size': 11,
308
+ 'font_color': '#1F4994',
309
+ 'align': 'left',
310
+ 'border': 1
311
+ })
312
+ self.dict_cell_format['ROW_COL_HEADER'] = self.TABLE_ROW_COL_HEADER
313
+
314
+ self.TABLE_HEADER = self.workbook.add_format({
315
+ 'bold': True,
316
+ 'font_name': 'Calibri',
317
+ 'font_size': 11,
318
+ 'font_color': '#000000',
319
+ # No 'bg_color' key = no fill. xlsxwriter >= 3.2 rejects None via
320
+ # Color._from_value(None) -> TypeError, so omit the key entirely.
321
+ 'align': 'center',
322
+ 'valign': 'vcenter',
323
+ 'text_wrap': False,
324
+ 'border': 1
325
+ })
326
+ self.dict_cell_format['TABLE_HEADER'] = self.TABLE_HEADER
327
+ self.dict_cell_format['HEADER'] = self.TABLE_HEADER
328
+
329
+ ######### TABLE HEADER FORMATTING (END) ##########################
330
+
331
+ ######## Colored Title Formatting #################################
332
+
333
+ self.BG_BOLD_ORANGE_H4 = self.workbook.add_format({
334
+ 'bold': True,
335
+ 'font_name': 'Calibri',
336
+ 'font_size': 12,
337
+ 'font_color': '#000000',
338
+ 'bg_color': '#FABF8F',
339
+ 'align': 'center',
340
+ 'border': 1
341
+ })
342
+ self.dict_cell_format['BG_BOLD_ORANGE_H4'] = self.BG_BOLD_ORANGE_H4
343
+ self.dict_cell_format['ORANGE_H4'] = self.BG_BOLD_ORANGE_H4
344
+
345
+ self.BG_BOLD_ORANGE_H3 = self.workbook.add_format({
346
+ 'bold': True,
347
+ 'font_name': 'Calibri',
348
+ 'font_size': 14,
349
+ 'font_color': '#000000',
350
+ 'bg_color': '#FABF8F',
351
+ 'align': 'center',
352
+ 'border': 1
353
+ })
354
+ self.dict_cell_format['BG_BOLD_ORANGE_H3'] = self.BG_BOLD_ORANGE_H3
355
+ self.dict_cell_format['ORANGE_H3'] = self.BG_BOLD_ORANGE_H3
356
+
357
+ self.BG_BOLD_ORANGE_H2 = self.workbook.add_format({
358
+ 'bold': True,
359
+ 'font_name': 'Calibri',
360
+ 'font_size': 16,
361
+ 'font_color': '#000000',
362
+ 'bg_color': '#FABF8F',
363
+ 'align': 'center',
364
+ 'border': 1
365
+ })
366
+ self.dict_cell_format['BG_BOLD_ORANGE_H2'] = self.BG_BOLD_ORANGE_H2
367
+ self.dict_cell_format['ORANGE_H2'] = self.BG_BOLD_ORANGE_H2
368
+
369
+ self.BG_BOLD_ORANGE_H1 = self.workbook.add_format({
370
+ 'bold': True,
371
+ 'font_name': 'Calibri',
372
+ 'font_size': 18,
373
+ 'font_color': '#000000',
374
+ 'bg_color': '#FABF8F',
375
+ 'align': 'center',
376
+ 'border': 1
377
+ })
378
+ self.dict_cell_format['BG_BOLD_ORANGE_H1'] = self.BG_BOLD_ORANGE_H1
379
+ self.dict_cell_format['ORANGE_H1'] = self.BG_BOLD_ORANGE_H1
380
+
381
+ self.BG_FONT_BLUE_H4 = self.workbook.add_format({
382
+ 'bold': True,
383
+ 'font_name': 'Calibri',
384
+ 'font_size': 12,
385
+ 'font_color': '#1F497D',
386
+ 'bg_color': '#C5D9F1',
387
+ 'align': 'center' ,
388
+ 'border': 1
389
+ })
390
+ self.dict_cell_format['BG_FONT_BLUE_H4'] = self.BG_FONT_BLUE_H4
391
+ self.dict_cell_format['BLUE_H4'] = self.BG_FONT_BLUE_H4
392
+
393
+ self.BG_FONT_BLUE_H3 = self.workbook.add_format({
394
+ 'bold': True,
395
+ 'font_name': 'Calibri',
396
+ 'font_size': 14,
397
+ 'font_color': '#1F497D',
398
+ 'bg_color': '#C5D9F1',
399
+ 'align': 'center' ,
400
+ 'border': 1
401
+ })
402
+ self.dict_cell_format['BG_FONT_BLUE_H3'] = self.BG_FONT_BLUE_H3
403
+ self.dict_cell_format['BLUE_H3'] = self.BG_FONT_BLUE_H3
404
+
405
+ self.BG_FONT_BLUE_H2 = self.workbook.add_format({
406
+ 'bold': True,
407
+ 'font_name': 'Calibri',
408
+ 'font_size': 16,
409
+ 'font_color': '#1F497D',
410
+ 'bg_color': '#C5D9F1',
411
+ 'align': 'center' ,
412
+ 'border': 1
413
+ })
414
+ self.dict_cell_format['BG_FONT_BLUE_H2'] = self.BG_FONT_BLUE_H2
415
+ self.dict_cell_format['BLUE_H2'] = self.BG_FONT_BLUE_H2
416
+
417
+ self.BG_FONT_BLUE_H1 = self.workbook.add_format({
418
+ 'bold': True,
419
+ 'font_name': 'Calibri',
420
+ 'font_size': 18,
421
+ 'font_color': '#1F497D',
422
+ 'bg_color': '#C5D9F1',
423
+ 'align': 'center' ,
424
+ 'border': 1
425
+ })
426
+ self.dict_cell_format['BG_FONT_BLUE_H1'] = self.BG_FONT_BLUE_H1
427
+ self.dict_cell_format['BLUE_H1'] = self.BG_FONT_BLUE_H1
428
+
429
+ ########## Colored Title Formatting (END) #################################
430
+
431
+ self.SECTION_HEADER_PERCENTAGE = self.workbook.add_format({
432
+ 'bold': True,
433
+ 'font_name': 'Calibri',
434
+ 'font_size': 11,
435
+ 'font_color': '#1F497D',
436
+ 'bg_color': '#C5D9F1',
437
+ 'align': 'left',
438
+ 'valign': 'vcenter',
439
+ 'text_wrap': True,
440
+ 'border': 1,
441
+ 'num_format': '0.0000%',
442
+ })
443
+ self.dict_cell_format['SECTION_HEADER_PERCENTAGE'] = self.SECTION_HEADER_PERCENTAGE
444
+ self.dict_cell_format['SECTION%'] = self.SECTION_HEADER_PERCENTAGE
445
+
446
+ self.TEXT_RIGHT_JUSTIFY = self.workbook.add_format({
447
+ 'font_name': 'Calibri',
448
+ 'font_size': 11,
449
+ 'align': 'right'
450
+ })
451
+ self.dict_cell_format['TEXT_RIGHT_JUSTIFY'] = self.TEXT_RIGHT_JUSTIFY
452
+ self.dict_cell_format['TEXT_RIGHT'] = self.TEXT_RIGHT_JUSTIFY
453
+
454
+ ################# Number Formatting #################
455
+ self.NUM_COMMA = self.workbook.add_format({'num_format': '#,##0', 'border': 1})
456
+ self.dict_cell_format['NUM_COMMA'] = self.NUM_COMMA
457
+ self.dict_cell_format['NUM,'] = self.NUM_COMMA
458
+
459
+ self.NUM_PERCENTAGE = self.workbook.add_format({'num_format': "0.0000%", 'border': 1})
460
+ self.dict_cell_format['NUM_PERCENTAGE'] = self.NUM_PERCENTAGE
461
+ self.dict_cell_format['NUM%.4'] = self.NUM_PERCENTAGE
462
+
463
+ self.NUM_PERCENTAGE = self.workbook.add_format({'num_format': "0.000%", 'border': 1})
464
+ self.dict_cell_format['NUM_PERCENTAGE'] = self.NUM_PERCENTAGE
465
+ self.dict_cell_format['NUM%.3'] = self.NUM_PERCENTAGE
466
+
467
+ self.NUM_PERCENTAGE = self.workbook.add_format({'num_format': "0.00%", 'border': 1})
468
+ self.dict_cell_format['NUM_PERCENTAGE'] = self.NUM_PERCENTAGE
469
+ self.dict_cell_format['NUM%.2'] = self.NUM_PERCENTAGE
470
+
471
+ self.NUM_PERCENTAGE = self.workbook.add_format({'num_format': "0.0%", 'border': 1})
472
+ self.dict_cell_format['NUM_PERCENTAGE'] = self.NUM_PERCENTAGE
473
+ self.dict_cell_format['NUM%.1'] = self.NUM_PERCENTAGE
474
+
475
+
476
+ ################# Highlight Formatting #################
477
+ self.BG_LIGHT_YELLOW = self.workbook.add_format({"bg_color": "fcfc81"})
478
+ self.dict_cell_format['BG_LIGHT_YELLOW'] = self.BG_LIGHT_YELLOW
479
+ self.dict_cell_format['YELLOW_BG'] = self.BG_LIGHT_YELLOW
480
+
481
+ def add_new_format(self, format_dict, format_name):
482
+ """ Add a new user-defined format. """
483
+ if format_name not in self.dict_cell_format.keys():
484
+ self.dict_cell_format[format_name] = self.workbook.add_format(format_dict)
485
+ return 0
486
+ logger.info("ERROR: Failed to add new format, the format name has already existed!")
487
+ return 1