# 
# author:  nvx
# created: 2021.05.25 13:31:08
# 

from nvxfrac import Frac







# types
class Expr:
	'''
	Expr — это абстрактный класс, обозначающий
	любое арифметическое выражение, которое
	может содержать всё что угодно: суммы,
	произведения, степени, числа, параметры,
	переменные 
	'''

	def __init__(self):
		raise

	@abstructmethod
	def reduce(self):
		pass





class ConstExpr(Expr):
	'''
	ConstExpr — константное выражение. С двумя
	константными выражениями можно производить любые
	арифметические действия, в результате которых
	получится снова конст. выражение. Само выражение,
	однако, может быть неоднородным, например,
	3*sqrt(5) или 2 + 5 ** (3/8); константное
	выражение может содержать параметры: 10*g
	'''

	def __init__(self):
		pass





class Const(Frac, Expr):
	'''
	Const — константа, отдельное, конечное число (точнее
	дробь).  Не может содержать никаких арифметических
	действий (кроме, собственно, деления числа на число,
	т.к. это дробь, но это действие никак не развёртывается)
	'''

	def __init__(self, v):
		self.v = v
		pass





class Param(Expr):
	'''
	Param — параметр, т.е. константа, конкретное
	значение которой неизвестно
	'''

	def __init__(self):
		pass





class Var(Expr):
	'''
	Var — переменная
	'''

	def __init__(self):
		pass





class Sum(Expr):
	'''
	Sum — это класс, представляющий из себя
	сумму выражений
	'''

	mems = []

	def __init__(self, mems=[]):
		self.mems = mems
		return





class Mul(Expr):
	'''
	Mul — это класс, представляющий из себя
	произведение выражений
	'''

	def __init__(self):
		pass





class Div(Expr):
	'''
	Mul — это класс, представляющий из себя
	произведение выражений
	'''

	def __init__(self):
		pass





class Pow(Expr):
	'''
	Pow — это степени выражения
	'''







# END
