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}),
     )