operator function
        :param f: operator.add/sub/mul... used operator
        :param x: other object view should be add/sub... with (other View, number, numpy.ndarray, Field)
        :return: dictionary (same shape as field.d) with result of operation

def __math(self, f, x):
        """operator function
        :param f: operator.add/sub/mul... used operator
        :param x: other object view should be add/sub... with (other View, number, numpy.ndarray, Field)
        :return: dictionary (same shape as field.d) with result of operation
        """

        d = {}
        #operation with single number
        if isinstance(x, (int, long, float, complex)):
            for i in self.d: d[i] = f(self.d[i], x)
            return d
        #operation with other view (must have same size and partitions as self) or Field from same mesh and same bounds like View
        elif isinstance(x, View) or isinstance(x, Field):
            try:
                for i in self.d:
                    d[i] = f(self.d[i], x.d[i])
                return d
            except: raise ValueError('Views have to be partitioned and shaped in the same way to be add/sub/mul/div/pow/mod\nField has to have same bounds and origin mesh as View.')
        #operation with numpy array
        elif isinstance(x, ndarray):
            #array has to be of the same Size as View
            try:
                for i in self.d:
                    ind = self.__indices(self.__partition.meta_data[i], self.__mask)
                    d[i] = f(self.d[i], x[ind])
                return d
            except: raise ValueError('Array has to have same shape as View for operation')

        else: raise ValueError('Operators only available for View and (View, Field, numpy.ndarray with same shape View, integer, float, complex).')