예제 #1
0
파일: test.py 프로젝트: bluecatchbird/sms
async def patchElement(new_element: schemas.Element,
                       element: models.Element = Depends(getElement),
                       db: Session = Depends(get_db)):
    element.name = new_element.name
    element.value = new_element.value
    db.commit()
    return element
예제 #2
0
 def structure_from_dict(data, root):
     elements = list()
     vals = data.get(root.value, None)
     if not vals:
         # no children, break
         return list()
     for c in vals.split(', '):
         el = Element(c)
         nodes = structure_from_dict(data, el)
         if nodes:
             el.set_children(nodes)
         elements.append(el)
     return elements
예제 #3
0
def csv_convert_obj(path):
    _list = list()
    with open(path) as f:
        _csv = csv.reader(f, delimiter=';')
        if os.path.basename(path).lower().startswith('cell-'):
            for row in _csv:
                if list(row).__len__() == 5:
                    _list.append(Cell(row[1], row[2], row[3], row[4]))
        elif os.path.basename(path).lower().startswith('element-'):
            for row in _csv:
                if list(row).__len__() == 7:
                    _list.append(
                        Element(row[1], row[2], row[3], row[4], row[5],
                                row[6]))
        elif os.path.basename(path).lower().startswith('dimension-'):
            for row in _csv:
                if list(row).__len__() == 4:
                    _list.append(Dimension(row[1], row[2], row[3]))
        elif os.path.basename(path).lower().startswith('cube-'):
            for row in _csv:
                if list(row).__len__() == 5:
                    _list.append(Cube(row[1], row[2], row[3], row[4]))
        elif os.path.basename(path).lower().startswith('database-'):
            for row in _csv:
                if list(row).__len__() == 3:
                    _list.append(Database(row[1], row[2]))
    return _list
예제 #4
0
    def read_code(self):
        self.code_lines = [line.rstrip('\n') for line in open(self.code_filename)]
        elements = []

        for line in self.code_lines:
            for e in line.split(' '):
                elements.append(Element(name=e, terminal=True))
        return elements
예제 #5
0
    def add_dot(self, production):
        p = deepcopy(production)
        for idx, val in enumerate(p.rhs):
            if val.isDot and idx == len(p.rhs) - 1:
                return []
            elif val.isDot:
                p.rhs.insert(idx + 1, p.rhs.pop(idx))
                return p
        p.rhs.insert(0, Element(name='.', isDot=True, terminal=True))

        return p
예제 #6
0
    def read_grammar(self):
        self.grammar_lines = [line.rstrip('\n') for line in open(self.grammar_filename)]
        starting_symbol = Element(name=self.grammar_lines[0], terminal=False)
        elements = []
        productions = []
        for terminal in self.grammar_lines[1].split(' '):
            elements.append(Element(name=terminal, terminal=True))
        for nonterminal in self.grammar_lines[2].split(' '):
            elements.append(Element(name=nonterminal, terminal=False))
        for production in self.grammar_lines[3:]:
            elems = production.split(' ')
            lhs = [lhselem for lhselem in elements if lhselem.name == elems[0]]
            rhs = []
            for rhsinput in elems[1:]:
                rhselem = [rhsele for rhsele in elements if rhsele.name == rhsinput]
                rhs.append(rhselem[0])
            prod = Production(lhs=lhs[0], rhs=rhs)
            productions.append(prod)

        return Grammar(starting_symbol=starting_symbol, productions=productions, elements=elements)
예제 #7
0
def consumption_elements(fns_json_cheque_info):
    if fns_json_cheque_info:
        list_buy = Base.list_buy_milk()
    else:
        list_buy = Base.list_buy_cheese()
    elements = []
    for i in list_buy:
        for j in i['items']:
            elements.append(
                Element(j['name'], i['dateTime'], j['volume'] * j['quantity']))
    return elements
예제 #8
0
    def _build_project(self, data):
        if not 'Project' in data.keys():
            return None
        else:
            from models import Element
            def structure_from_dict(data, root):
                elements = list()
                vals = data.get(root.value, None)
                if not vals:
                    # no children, break
                    return list()
                for c in vals.split(', '):
                    el = Element(c)
                    nodes = structure_from_dict(data, el)
                    if nodes:
                        el.set_children(nodes)
                    elements.append(el)
                return elements

            root = Element(data['Project'])
            root.set_children(structure_from_dict(data, root))
        return root
예제 #9
0
def create_element():
    id = request.json["id"]
    name = request.json["name"]
    symbol = request.json["symbol"]
    mass = request.json["mass"]
    new_element = Element(id=id, name=name, symbol=symbol, mass=mass)

    db.session.add(new_element)
    db.session.commit()

    response_json = jsonify(message="Element Created!",
                            element=serialize_detail(new_element))
    return (response_json, 201)
예제 #10
0
    def evaluate(self):
        input_buffer_index = 0
        self.input_buffer.append(Element(name='$', terminal=False))
        pointer = self.input_buffer[input_buffer_index]
        stack = [0]
        output_data = []
        pretty_print(work_stack=stack,
                     input_stack=stringify_list(
                         self.input_buffer[input_buffer_index:]),
                     output_band=stringify_list(output_data))
        while True:
            currentstate = stack[-1]
            action = self.table.entries[int(currentstate)].action[pointer.name]
            if not action:
                print 'Errors found in source code.'
                break
            elif action.action == 'shift':
                stack.append(pointer.name)
                stack.append(int(action.number))
                input_buffer_index += 1
                pretty_print(work_stack=stack,
                             input_stack=stringify_list(
                                 self.input_buffer[input_buffer_index:]),
                             output_band=stringify_list(output_data,
                                                        comma=True))

            elif action.action == 'accept':

                if input_buffer_index != (len(self.input_buffer) - 1):
                    print 'Errors found in source code.'
                else:
                    print 'The source code is correct.'
                break
            elif action.action == 'reduce':
                production = self.grammar.productions.productions[
                    int(action.number) - 1]
                popcount = 2 * len(production.rhs)
                del stack[-popcount:]
                currentstate = stack[-1]
                stack.append(production.lhs.name)
                goto = self.table.entries[currentstate].goto[stack[-1]]
                output_data.insert(0, production)
                stack.append(goto.number)
                pretty_print(work_stack=stack,
                             input_stack=stringify_list(
                                 self.input_buffer[input_buffer_index:]),
                             output_band=stringify_list(output_data,
                                                        comma=True))
            if pointer.name != '$':
                pointer = self.input_buffer[input_buffer_index]
예제 #11
0
    def test_2(self):
        """
	Найти какрточки продуктов которые подойдут для данной функии потребления.

	Функция потребления состоит из:
	    1) ресурсы которые в нее включены
		а также продукты на которые ссылаются включенные ресурсы
	    2) учитывает все ресурсов которые обработаны в рамках данной фирм и не включенных в эту функцию.
		после обработки(добавления в другую ф. слеует подождать несколько дней так возможно еще не успели оработать)
		    простой случайесли ресурс добавлен в другую ф. в эту его автоматом не предлагать
	    3) ресурсов предложенных но отвергнутых пользователем
	    4) продуктов предложенных но отвергнутых пользоватеоем
	    5) есть авто функции которые есть у всех пользоватеей МОЛОКО 3.2% в них автоматом для рекомедаций добавлять все продукты и ресурсы с таким покащатеоем.

	Как лучше сделать?
	    1) привязть определенный ресурс
		тогда придется по ресурсу определять
		    1.1) продкуты с которыми он связан или к которые подходит.
	    2) привязать карточку продукта
		тогда все ресурсы привязнные к карточе добавятся атоматом - НЕТ	 
		но легко будет искать то чем функцию расширить, т.е. аналоги - ДА

	Нужна ли функции явная связь с карточками продуктов?
	+
	1) упрощает поиск продуктов для замещения
	-
	1) пользователю придется привязывать все альтернативные продукты
	"""

        # получаю список ресурсов функции
        list_buy_milk = self.__list_buy_milk()
        elements = []
        for i in list_buy_milk:
            for j in i['items']:
                elements.append(
                    Element(j['name'], i['dateTime'],
                            j['volume'] * j['quantity']))
        prediction = PredictionLinear(elements)

        product_cards = prediction.product_cards()

        #self.assertEqual([ProductCard(), ProductCard(), ProductCard()], product_cards)
        self.assertEqual(
            set([
                ProductCard.objects.get(id=1),
                ProductCard.objects.get(id=2),
                ProductCard.objects.get(id=3)
            ]), product_cards)
예제 #12
0
    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)

        if form.is_valid():
            box = form.save(commit=False)
            element = Element()
            element.type = 2
            element.value = -1
            element.save()
            box.element = element
            box.save()
            return shortcuts.redirect(self.get_success_url())
        return super(BoxCreateView, self).post(request, *args, **kwargs)
예제 #13
0
    def setup_categories():
        categories = open('{}/initial/categories.txt'.format(dir_path),
                          'r').read().splitlines()
        for category_name in categories:
            # print 'checked {}'.format(category_name)
            # check category
            try:
                category = session.query(Category) \
                    .filter(Category.name == category_name) \
                    .one()
            # make new entry if not found
            except NoResultFound as e:
                category = add(Category(name=category_name))
            '''please do this pio huhuhuhu'''
            elements = json.loads(
                open(
                    '{}/initial/categories/{}.json'.format(
                        dir_path, category_name), 'r').read())
            # continue

            for element in elements:
                # print 'checked q \'{}\''.format(question['title'])
                # check element wrt category
                try:
                    q = session.query(Element) \
                        .filter(Element.name == element['name']) \
                        .filter(Element.category_id == category.id) \
                        .one()
                # check if meta is the same
                # make new entry if not found
                except NoResultFound as e:
                    q = Element(name=element['name'],
                                category_id=category.id,
                                klass=element['klass'],
                                kind=element['kind'],
                                text=element['text'])
                    q.width = element.get('width', 16)
                    q.required = element.get('required', None)
                    q.choices = element.get('choices', None)
                    q.default = element.get('default', None)
                    add(q)
예제 #14
0
 def gen_code(self, code):
     elements = []
     for line in code:
         for e in line.split(' '):
             elements.append(Element(name=e, terminal=True))
     return elements
예제 #15
0
    def test_linear_forecasting_for_the_whole_period(self):
        """
        Попробуем линейное прогнозированите на всем периоде

        Идет потребление некоторых ресурсов постоянно но не очень системно.
        К примеру молоко.
        Покупается несколько раз внеделю.
        Изменять потребление не планируется.
        Попробуем линейно апроксимировать данную функцию.
	добавил нужгыеразмеры в нашем случае молоко употребляется в литрахт 'volume': 1

	сначала получим среднее потребление молока в день.
	    просумируем все потребление и поделимгачисло дней закоторое было произведено потребление
		получили в итоге производную

	далее попробуем полчить производную исключив один элемет потребления и сокративчисло дней до момента его приобретения

	затем рассчитам на сколько днейхватит послежней покупк если потребление будет таким же
	    сейчас рассматриваем простую можель когда потребление рассчитываеися от даты первой покупки до даты последней покупки.

	прибавим к дельте котороая между первой и последней покупкой, количество дней накоторых хватит последей покупки и получим дату когда нужно установить хакупку в календаре.
        """

        delta_days = 40
        delta_days_2 = 35

        list_buy_milk = self.__list_buy_milk()

        elements = []
        for i in list_buy_milk:
            for j in i['items']:
                elements.append(
                    Element(j['name'], i['dateTime'],
                            j['volume'] * j['quantity']))

#self.assertEqual('', elements)

        self.assertEqual(
            0.318,
            Prediction.average_weight_per_day_in_during_period(
                elements, delta_days))

        pl = PredictionLinear(elements)
        self.assertEqual(30, pl.delta_days())
        self.assertEqual(27, pl.without_last_delta_days())
        self.assertEqual(0.424, pl.average_weight_per_day_in_during_period())

        #self.assertEqual(0.3, Prediction.average_weight_per_day_in_during_period(elements[1:], delta_days_2))
        delta = Prediction.average_weight_per_day_in_during_period(
            elements[1:], delta_days_2)
        self.assertEqual(0.278, delta)

        pl_2 = PredictionLinear(elements[1:])
        delta = pl_2.average_weight_per_day_in_during_period()
        self.assertEqual(0.324, delta)

        #self.assertEqual(10.0, elements[0].get_weight() / delta)
        days_continue_for_last_buy = float("{0:.3f}".format(
            elements[0].get_weight() / delta))
        self.assertEqual(9.259, days_continue_for_last_buy)

        delta_days_future = pl.days_future()
        self.assertEqual(8.333, delta_days_future)

        today_is = 44.259  #какойто день месяца в который долженсработать напоминание что сегоднявсе кончится.
        self.assertEqual(today_is, delta_days_2 + days_continue_for_last_buy)
예제 #16
0
from app import app
from models import db, Element

db.drop_all()
db.create_all()

h = Element(
    id=1,
    name="Hydrogen",
    symbol="H",
    mass= 1.008
)

he = Element(
    id=2,
    name="Helium",
    symbol="He",
    mass= 4.0026
)

li = Element(
    id=3,
    name="Lithium",
    symbol="Li",
    mass=6.94
)

db.session.add_all([h, he, li])
db.session.commit()