import operator, math

class victor(object):
	def __init__(self, obj=None):
		if not obj:
			self.size = 0
			self.obj = [None]
		elif type(obj) != tuple and type(obj) != list:
			self.size = 1
			self.obj = [obj]
		else:
			self.size = len(obj)
			self.obj = []
			for it in obj:
				self.obj.append(it)

	def __len__(self):
		return self.size

	#index system
	def __getitem__(self, key):
		if key > self.size:
			print IndexError("The victor have only "+str(self.size)+" unit")
		else:
			return self.obj[key]

 
	def __setitem__(self, key, value):
		if key > self.size:
			print IndexError("The victor have only "+str(self.size)+" unit")
		elif type(value) != int and float:
			print "only number alowed"
		else:
			self.obj[key] = value

	# vector operation
	def dothisopinvector(self,src,des,op):
		pass

	# Comparison
	def __eq__(self, other):
 		pass
    
	def __ne__(self, other):
		pass

	def __nonzero__(self):
		pass

	# Addition
	def __add__(self, other):	#+
		summ = []
		if type(other) == victor and tuple and list:
			if self.size < len(other):
				first, second = self, other
			else:
				second, first = self, other
			for key in range(len(first)):
				summ.append(self[key] + other[key])
			for key in range(len(second)-len(first)):
				summ.append(second[key+len(first)])
		elif type(other) == int and float:
			for it in self:
				summ.append(it + other)
		return victor(summ)
	__radd__ = __add__

	def __iadd__(self, other):	#+=
		if type(other) == victor and tuple and list:
			if self.size < len(other):
				first, second = self, other
			else:
				second, first = self, other
			for key in range(len(first)):
				self[key] += other[key]
		elif type(other) == int and float:
			for key in range(len(self)):
				self[key] += other
		return self

	# substract
	def __sub__(self, other):	#-
		summ = []
		if type(other) == victor and tuple and list:
			if self.size < len(other):
				first, second = self, other
			else:
				second, first = self, other
			for key in range(len(first)):
				summ.append(self[key] - other[key])
			for key in range(len(second)-len(first)):
				summ.append(second[key+len(first)])
		elif type(other) == int and float:
			for it in self:
				summ.append(it - other)
		return victor(summ)
	__rsub__ = __sub__

	def __isub__(self, other):	#-=
		if type(other) == victor and tuple and list:
			if self.size < len(other):
				first, second = self, other
			else:
				second, first = self, other
			for key in range(len(first)):
				self[key] -= other[key]
		elif type(other) == int and float:
			for key in range(len(self)):
				self[key] -= other
		return self

	# Multiplication
	def __mul__(self, other):	#*
		summ = []
		if type(other) == victor and tuple and list:
			if self.size < len(other):
				first, second = self, other
			else:
				second, first = self, other
			for key in range(len(first)):
				summ.append(self[key] * other[key])
			for key in range(len(second)-len(first)):
				summ.append(second[key+len(first)])
		elif type(other) == int and float:
			for it in self:
				summ.append(it * other)
		return victor(summ)
	__rmul__ = __mul__

	def __imul__(self, other):	#*=
		if type(other) == victor and tuple and list:
			if self.size < len(other):
				first, second = self, other
			else:
				second, first = self, other
			for key in range(len(first)):
				self[key] /= other[key]
		elif type(other) == int and float:
			for key in range(len(self)):
				self[key] /= other
		return self

	# division
	def __div__(self, other):	#/
		summ = []
		if type(other) == victor and tuple and list:
			if self.size < len(other):
				first, second = self, other
			else:
				second, first = self, other
			for key in range(len(first)):
				summ.append(self[key] * other[key])
			for key in range(len(second)-len(first)):
				summ.append(second[key+len(first)])
		elif type(other) == int and float:
			for it in self:
				summ.append(it * other)
		return victor(summ)
	__rdiv__ = __div__

	def __idiv__(self, other):	#/=
		if type(other) == victor and tuple and list:
			if self.size < len(other):
				first, second = self, other
			else:
				second, first = self, other
			for key in range(len(first)):
				self[key] /= other[key]
		elif type(other) == int and float:
			for key in range(len(self)):
				self[key] /= other
		return self

a = victor()
b = victor(5)
c = victor((1,2))
d = victor([2,3])
e = victor([1])
print a.obj,b.obj,c.obj,d.obj,e.obj
print len(a), len(b), len(c),  len(d), len(e)
