1313import threading
1414from multiprocessing .dummy import Pool as ThreadPool
1515from itertools import repeat
16+
17+ import pandas as pd
18+
1619import demeter .demeter_io .writer as wdr
1720
18- def intense_parallel_helper (regix_metix ,spat_region , order_rules , allregnumber , allregmet , spat_ludata ,
19- spat_landmatrix , gcam_landmatrix , yr_idx , d_regid_nm , target_change , spat_ludataharm ,
20- spat_met , kernel_vector , cons_data , final_landclasses ,spat_ludataharm_orig_steps , yr ,
21- land_mismatch , constraint_rules , transition_rules ,log , pass_number , c ,diag_file ):
2221
22+ def intense_parallel_helper (regix_metix , spat_region , order_rules , allregnumber , allregmet , spat_ludata ,
23+ spat_landmatrix , gcam_landmatrix , yr_idx , d_regid_nm , target_change , spat_ludataharm ,
24+ spat_met , kernel_vector , cons_data , final_landclasses , spat_ludataharm_orig_steps , yr ,
25+ land_mismatch , constraint_rules , transition_rules , log , pass_number , c , diag_file ,
26+ transitions ):
2327 reg_idx , met_idx = regix_metix
24- # print("processing region " + str(reg_idx))
28+ # print("processing region " + str(reg_idx))
2529
26- # set previous region index to current
27- # prev_reg = reg_idx
30+ # set previous region index to current
31+ # prev_reg = reg_idx
2832
2933 # update user per region change
3034
31- # update user per region change
35+ # update user per region change
3236 regnumber , reg_idx , target_intensification = _create_summary (reg_idx , allregnumber , spat_ludata ,
33- spat_landmatrix , gcam_landmatrix , d_regid_nm ,
34- log , spat_region , yr_idx , target_change ,
35- pass_number , c )
37+ spat_landmatrix , gcam_landmatrix , d_regid_nm ,
38+ log , spat_region , yr_idx , target_change ,
39+ pass_number , c )
3640
3741 # calculate and write area diagnostic
3842 # diff_diagnostic(c.diag_dir, d_regid_nm, gcam_landmatrix, spat_landmatrix, reg_idx, yr, yr_idx)
@@ -53,25 +57,25 @@ def intense_parallel_helper(regix_metix,spat_region, order_rules, allregnumber,
5357
5458 # apply intensification
5559 spat_ludataharm [reg_met_mask ], trans_mat , target_change , target_intensification = citz
56-
60+ # print("Number of dimensions:", trans_mat.ndim)
61+ # print("Shape:", trans_mat.shape)
62+ # wdr.write_transitions(s,c.step, transitions=trans_mat)
63+ # arr_reshaped = trans_mat.reshape(trans_mat.shape[0], -1)
64+ # np.savetxt("test.csv", arr_reshaped, delimiter=",")
5765 # log transition
58- # transitions[reg_met_mask, :, :] += trans_mat
66+ transitions [reg_met_mask , :, :] += trans_mat
5967
6068 # calculate non-achieved change
6169
62-
6370 non_chg = np .sum (abs (target_change [:, :, :])) / 2.0
6471
6572 if non_chg > 0 :
66- non_chg_per = np .sum (abs (target_change [:, :, :].flatten ())) / np .sum (abs (land_mismatch [:, :, :].flatten ())) * 100
73+ non_chg_per = np .sum (abs (target_change [:, :, :].flatten ())) / np .sum (
74+ abs (land_mismatch [:, :, :].flatten ())) * 100
6775 else :
68- non_chg_per = 0
69-
70- #log.info("Total non-achieved intensification change for pass {0} time step {1}: {2} km2 ({3} %)".format(pass_number, yr, non_chg, non_chg_per))
71-
72-
73-
76+ non_chg_per = 0
7477
78+ # log.info("Total non-achieved intensification change for pass {0} time step {1}: {2} km2 ({3} %)".format(pass_number, yr, non_chg, non_chg_per))
7579
7680
7781def diff_diagnostic (diag_outdir , d_regid_nm , gcam_landmatrix , spat_landmatrix , reg , yr , yr_idx ):
@@ -82,17 +86,14 @@ def diff_diagnostic(diag_outdir, d_regid_nm, gcam_landmatrix, spat_landmatrix, r
8286 :return:
8387 """
8488 # set outfile names
85- gcam_out = os .path .join (diag_outdir , "{0}_{1}_gcam_landmatrix.csv" .format (d_regid_nm [str (reg + 1 )], yr ))
86- base_out = os .path .join (diag_outdir , "{0}_{1}_spat_landmatrix.csv" .format (d_regid_nm [str (reg + 1 )], yr ))
89+ gcam_out = os .path .join (diag_outdir , "{0}_{1}_gcam_landmatrix.csv" .format (d_regid_nm [str (reg + 1 )], yr ))
90+ base_out = os .path .join (diag_outdir , "{0}_{1}_spat_landmatrix.csv" .format (d_regid_nm [str (reg + 1 )], yr ))
8791
8892 # write files
8993 wdr .array_to_csv (gcam_landmatrix [yr_idx , reg , :, :], gcam_out )
9094 wdr .array_to_csv (spat_landmatrix [reg , :, :], base_out )
9195
9296
93-
94-
95-
9697def reg_metric_iter (allregnumber , allregmet ):
9798 """
9899 Create region, metric iterator.
@@ -108,14 +109,14 @@ def reg_metric_iter(allregnumber, allregmet):
108109
109110
110111def _convert_pft (notdone , int_target , metnumber , pft_toconv , spat_ludataharm_sub , pft , cons_data_subpft , reg ,
111- target_intensification , trans_mat , target_change , errortol , diag_file , diagnostic ):
112+ target_intensification , trans_mat , target_change , errortol , diag_file , diagnostic ):
112113 """
113114 Apply conversion to every qualifying PFT.
114115
115116 :return: Array of PFTs
116117 """
117118 if diagnostic == 1 :
118- diag_file .write ('{},{},{},{},{}\n ' .format (reg + 1 , metnumber , pft , pft_toconv , int_target ))
119+ diag_file .write ('{},{},{},{},{}\n ' .format (reg + 1 , metnumber , pft , pft_toconv , int_target ))
119120
120121 while notdone :
121122 # grid cells with both the expanding and to-convert PFT
@@ -223,7 +224,7 @@ def _intensification(diagnostic, diag_file, spat_ludataharm_sub, target_intensif
223224 cons_data_sub [:, - 1 ] = kdc
224225
225226 # create index order for constraints array where kernel density will be position 0
226- cons_idx_order = [0 if i == cons_data_sub .shape [1 ]- 1 else i + 1 for i in range (cons_data_sub .shape [1 ])]
227+ cons_idx_order = [0 if i == cons_data_sub .shape [1 ] - 1 else i + 1 for i in range (cons_data_sub .shape [1 ])]
227228
228229 # reorder constraint weights array
229230 c_arg = np .argsort (cons_idx_order )
@@ -233,7 +234,8 @@ def _intensification(diagnostic, diag_file, spat_ludataharm_sub, target_intensif
233234 cons_data_subpft = cons_data_sub
234235
235236 # invert negative constraints
236- arr = np .ones (shape = np .shape (cons_data_sub [:, cons_rules_pft < 0 ])) + cons_data_subpft [:, cons_rules_pft < 0 ]
237+ arr = np .ones (shape = np .shape (cons_data_sub [:, cons_rules_pft < 0 ])) + cons_data_subpft [:,
238+ cons_rules_pft < 0 ]
237239 cons_data_subpft [:, cons_rules_pft < 0 ] = arr
238240
239241 # multiply negative constraints weight by -1 to turn it positive
@@ -316,15 +318,13 @@ def _create_summary(reg_idx, allregnumber, spat_ludata, spat_landmatrix, gcam_la
316318 if pass_number == 1 :
317319 target_intensification [target_intensification > 0 ] *= c .intensification_ratio
318320
319-
320-
321321 return regnumber , prev_reg , target_intensification
322322
323323
324324def apply_intensification (log , pass_number , c , spat_region , order_rules , allregnumber , allregmet , spat_ludata ,
325325 spat_landmatrix , gcam_landmatrix , yr_idx , d_regid_nm , target_change , spat_ludataharm ,
326- spat_met , kernel_vector , cons_data , final_landclasses ,spat_ludataharm_orig_steps , yr ,
327- land_mismatch , constraint_rules , transition_rules ):
326+ spat_met , kernel_vector , cons_data , final_landclasses , spat_ludataharm_orig_steps , yr ,
327+ land_mismatch , constraint_rules , transition_rules , transitions ):
328328 """
329329 There are two ways to expand land covers:
330330 1) on grid-cells where they do exist (intensification, at the expense of contracting land covers)
@@ -354,14 +354,19 @@ def apply_intensification(log, pass_number, c, spat_region, order_rules, allregn
354354
355355 pool = ThreadPool (len (np .unique (regix_metix )))
356356
357- pool .starmap (intense_parallel_helper ,zip (regix_metix ,repeat (spat_region ), repeat (order_rules ), repeat (allregnumber ), repeat (allregmet ), repeat (spat_ludata ),
358- repeat (spat_landmatrix ), repeat (gcam_landmatrix ), repeat (yr_idx ), repeat (d_regid_nm ), repeat (target_change ), repeat (spat_ludataharm ),
359- repeat (spat_met ), repeat (kernel_vector ), repeat (cons_data ), repeat (final_landclasses ),repeat (spat_ludataharm_orig_steps ), repeat (yr ),
360- repeat (land_mismatch ), repeat (constraint_rules ), repeat (transition_rules ),repeat (log ), repeat (pass_number ), repeat (c ),repeat (diag_file )))
357+ pool .starmap (intense_parallel_helper ,
358+ zip (regix_metix , repeat (spat_region ), repeat (order_rules ), repeat (allregnumber ), repeat (allregmet ),
359+ repeat (spat_ludata ),
360+ repeat (spat_landmatrix ), repeat (gcam_landmatrix ), repeat (yr_idx ), repeat (d_regid_nm ),
361+ repeat (target_change ), repeat (spat_ludataharm ),
362+ repeat (spat_met ), repeat (kernel_vector ), repeat (cons_data ), repeat (final_landclasses ),
363+ repeat (spat_ludataharm_orig_steps ), repeat (yr ),
364+ repeat (land_mismatch ), repeat (constraint_rules ), repeat (transition_rules ), repeat (log ),
365+ repeat (pass_number ), repeat (c ), repeat (diag_file ), repeat (transitions )))
361366 # for each region
362- #for index, pkg in enumerate(regix_metix):
363-
364- # unpack index vars
367+ # for index, pkg in enumerate(regix_metix):
365368
369+ # unpack index vars
370+ # wdr.write_transitions(self, c.step, transitions=transitions)
366371 pool .terminate ()
367372 return [spat_ludataharm , spat_ludataharm_orig_steps , land_mismatch , cons_data , target_change ]
0 commit comments