in ml/nemo_xgboost_optimization.py [0:0]
def dict_union(d1, d2):
for k, v in d2.items():
if k in d1:
if type(d1[k]) is dict and type(v) is dict: # When same 'feature'
d1[k] = dict_union(d1[k], v)
else: # When same 'split'
d1[k] = d1[k] + v
elif type(v) is dict: # When no initial data
d1[k] = v
else: # k = split, v = diff. include if it does not violate.
if v > 0 > max(d1.values()) and k < max(d1.keys()): # If no positive values yet
d1[k] = v
elif v > max(d1.values()) > 0: # Update if greater value
max_key = max(d1, key=lambda key: d1[key])
del d1[max_key]
d1[k] = v
elif v < 0 < min(d1.values()) and min(d1.keys()) < k: # If no negative values yet
d1[k] = v
elif v < min(d1.values()) < 0: # Update if smaller value
min_key = min(d1, key=lambda key: d1[key])
del d1[min_key]
d1[k] = v
return d1