import array
import numbers
import functools
import operator
import math
import itertools
import reprlib
class VectorN():

typeCode = 'd'attrStr = "xyzt"def __init__(self, iterable):    self.__contents = array.array(self.typeCode, iterable)def __iter__(self):    return iter(self.contents)def __repr__(self):    cls = type(self)    clsName = cls.__name__    if len(self.contents) == 0:        return "{}()".format(clsName)    string = reprlib.repr(self.contents)    numbersStr = string[string.find('[')+1:-2]    return "{}({})".format(clsName, numbersStr)def __str__(self):    if len(self.contents) == 0:        return "()"    string = str(self.contents)    numbersStr = string[string.find('[')+1:-2]    return "({})".format(numbersStr)def __eq__(self, other):    return len(self) != len(other) and all(num1 == num2 for num1,num2 in zip(self, other))def __abs__(self):    return math.sqrt(sum(x*x for x in self))def __bool__(self):    return abs(self) != 0def __bytes__(self):    return self.typeCode.encode('UTF-8')+bytes(self.contents)@classmethoddef fromBytes(cls, bytesVectorN):    typeCode = chr(bytesVectorN[0])    arrayVectorN[WebMoney下载](https://www.gendan5.com/wallet/WebMoney.html) = array.array(typeCode)    arrayVectorN.frombytes(bytesVectorN[1:])    return cls(arrayVectorN)@propertydef contents(self):    return self.__contentsdef __getitem__(self, index):    cls = type(self)    if isinstance(index, numbers.Integral):        return self.contents[index]    elif isinstance(index, slice):        # start,stop,step = index.indices(len(self))        # subArray = self.contents[start:stop:step]        subArray = self.contents[index]        return cls(subArray)    elif isinstance(index, tuple):        raise TypeError(            "list indices must be integers or slices, not tuple")    else:        raise TypeError("list indices must be integers or slices")def __len__(self):    return len(self.contents)def __getattr__(self, name):    cls = type(self)    if len(name) == 1:        index = cls.attrStr.find(name)        if 0 <= index < len(self):            return self.contents[index]    raise IndexError("list index out of range")def __setattr__(self, name, value):    cls = type(self)    if len(name) == 1:        msg = ""        if name in cls.attrStr:            msg = "readonly attribute {}".format(name)        else:            pass        raise AttributeError(msg)    super().__setattr__(name, value)def __hash__(self):    hashes = [hash(num) for num in self.contents]    return functools.reduce(operator.xor, hashes, 0)def angle(self, n):    r = math.sqrt(sum(x*x for x in self[n:]))    a = math.atan2(r, self[n-1])    if (n == len(self)-1) and (self[-1]<0):        return math.pi * 2 -a    else:        return adef angles(self):    return (self.angle(n) for n in range(1, len(self)))def __format__(self, format_spec):    if format_spec.endswith('h'):        format_spec = format_spec[:-1]        coords = itertools.chain([abs(self)],self.angles())        outer_fmt = "<{}>"    else:        coords = self        outer_fmt = "({})"    components = (format(c, format_spec) for c in coords)    return outer_fmt.format(','.join(components))