def diff_arrays(one_arr, two_arr): """ for array elements s_a_ states """ if not len(one_arr) or not len(two_arr): return None # todo create set of some object which has equals method vdo = difference_factory._validate_dict_of_array(one_arr) vdt = difference_factory._validate_dict_of_array(two_arr) so = difference_factory.__create_h_set(vdo) st = difference_factory.__create_h_set(vdt) int = so.intersection(st) was_in_old = so.difference(int) lwas_in_old = len(was_in_old) added_in_new = st.difference(int) ladded_in_new = len(added_in_new) de = None if lwas_in_old: de = difference_element(difference_element.s_rem, [], None, difference_factory.diff_int) if ladded_in_new: de = difference_element(difference_element.s_add, [], None, difference_factory.diff_int) if len(added_in_new): de.add_arr_element(difference_element.s_a_new, difference_factory.__destruct_h_set(added_in_new)) if len(was_in_old): de.add_arr_element(difference_element.s_a_old, difference_factory.__destruct_h_set(was_in_old)) if len(int): de.add_arr_element(difference_element.s_a_intersect, difference_factory.__destruct_h_set(int)) return de
def diff_int(one_int, two_int): one_int = int(one_int) two_int = int(two_int) if one_int == two_int: return difference_element(difference_element.s_no_grow, None, difference_factory.diff_int) elif max(one_int, two_int) == one_int: return difference_element(difference_element.s_stag, one_int - two_int, difference_factory.diff_int) else: return difference_element(difference_element.s_grow, two_int - one_int, difference_factory.diff_int)
def _field_symmetric_difference(self, difference, fields_now, fields_before): keys_of_fields_before = set(fields_before.keys()) keys_of_fields_now = set(fields_now.keys()) symmetric_difference = keys_of_fields_before.symmetric_difference(keys_of_fields_now) union = keys_of_fields_before.union(keys_of_fields_now) for field in symmetric_difference: diff_state = "can_not_diff_by_this" difference_element = difference_element(state=diff_state, content=None) added.field_type = type(fields_before[field]) added.field_diff_function = self._field_symmetric_difference() difference.set_field(field, added) return difference
def diff_str(element1, element2): difference_element( difference_element.s_changed, m_hash_dict({difference_element.s_a_old: element1, difference_element.s_a_new: element2}), )