def validate_record(self, record):
        self.current_record = record
        errors = validate(self.record_valid, record)

        # Проверка на уникальность значений
        if record['N_ZAP'] in self.record_unique['N_ZAP']:
            errors['N_ZAP'] = [u'904;Значение не является уникальным']
        self.record_unique['N_ZAP'].append(record['N_ZAP'])
        return handle_errors(errors, parent='ZAP', record_uid=record['N_ZAP'])
    def validate_patient(self, patient):
        self.current_patient = patient
        errors = validate(self.patient_valid, patient)

        # Проверка на уникальность значений
        if patient['ID_PAC'] in self.patient_unique['ID_PAC']:
            errors['ID_PAC'] = [u'904;Значение не является уникальным']
        self.patient_unique['ID_PAC'].append(patient['ID_PAC'])

        return errors
async def xkcd(ctx, number=None):
    """Grabs an XKCD comic, random if no number is supplied"""
    valid = True
    if number:
        valid = validate(number)
        if not valid:
            await ctx.send("Please give a valid number")
            return
    post = get_url(number) if number else get_random_url()
    await ctx.send(post)
async def set_threshold(ctx: commands.Context, number):
    valid = validate(number)
    if not valid:
        await ctx.send("Please give a valid number")
        return

    with open("settings.json", "r") as f:
        current = json.load(f)
    current["hall_of_fame_threshold"] = int(number)
    with open("settings.json", "w") as f:
        json.dump(current, f)
    await ctx.send("Threshold successfully set (will not affect old messages)")
Exemple #5
0
        def wrapper():
            token_id = None
            explicit_id = None

            token = request.cookies.get("token") or ""
            if token: token_id = token_login(token)

            data = request.get_json()
            if data: explicit_id = data.get("id")

            # if there's an explicit_id, validate it using `type`
            if explicit_id and \
               not valid.validate(explicit_id, type):
                explicit_id = None

            return func(token_id, explicit_id)
Exemple #6
0
def main(data_dir: str = './data',
         epochs: int = 100,
         print_every: int = 1,
         gpu: bool = False,
         tbs: int = 64,
         vbs: int = 64,
         reshuffle_data: bool = False,
         nworkers: int = 2,
         lr: float = 0.001,
         wd: float = 1e-05,
         seed: int = 42,
         **kwargs):

    # Planting random seeds
    random.seed(seed)
    torch.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)

    # Setting device
    logging.info('Setting device...')
    device = set_device(gpu)
    logging.info(f'Training on {str(device).upper()}.')

    # Getting data ready..
    logging.info('Preparing dataloaders...')
    train_loader, val_loader = prepare_loaders(data_dir, tbs, vbs,
                                               reshuffle_data, nworkers)
    logging.info('Data is ready!')

    # Initilize model, loss, optimizer
    logging.info(f'Initializing model FooBar...')
    model = models.FooBar().to(device)
    loss_fn = torch.nn.MSELoss()
    optimizer = torch.optim.Adam(model.parameters(), lr=lr, weight_decay=wd)

    # Train/val loop
    logging.info('Starting training...')
    for epoch in range(0, epochs):
        train_loss = train(model, train_loader, loss_fn, optimizer, device)
        val_loss = validate(model, val_loader, loss_fn, device)
        # Print some info on training process
        if (epoch % print_every == print_every - 1) or (epoch == 0):
            print(
                f'[{epoch + 1}/{epochs}] lr: {lr} | train_loss: {train_loss:.3f} | val_loss: {val_loss:.3f}'
            )
    logging.debug('Training has finished!')
async def award(ctx, member: discord.Member, xp: int = 50):
    with open('users.json', 'r') as f:
        users = json.load(f)

    message = ctx.message

    # I don't know why, but this refuses to work
    valid = validate(str(xp))

    if valid:
        await update_data(users, member)
        await add_experience(users, member, xp)
        await level_up(users, member, message)

        with open('users.json', 'w') as f:
            json.dump(users, f)

        await ctx.send(f'```Awarded {xp}xp to {member.name}```')
    else:
        await ctx.send('Please enter a valid number')
    def validate_service(self, service):
        self.current_service = service
        errors = validate(self.service_valid, service)

        # Проверка на уникальность значений
        if service['IDSERV'] in self.service_unique['IDSERV']:
            errors['IDSERV'] = [u'904;Значение не является уникальным']
        self.service_unique['IDSERV'].append(service['IDSERV'])

        h_errors = handle_errors(errors, parent='USL', record_uid=self.current_record['N_ZAP'],
                                 event_uid=self.current_event['IDCASE'],
                                 service_uid=service['IDSERV'])

        if not CheckFunction.is_active_operation(service['CODE_USL']):
            h_errors += handle_errors({'CODE_USL': [u'904;Код услуги отсутствует в номенклатуре']},
                                      parent='USL', record_uid=self.current_record['N_ZAP'],
                                      event_uid=self.current_event['IDCASE'],
                                      service_uid=service['IDSERV'])

        # Проверка на соответсвтие кода услуги типу файла
        if not CheckFunction.is_service_corresponds_registry_type(service['CODE_USL'], self.registry_type):
            h_errors += handle_errors({'CODE_USL': [u'904;Услуга не соответсвует типу файла']},
                                      parent='USL', record_uid=self.current_record['N_ZAP'],
                                      event_uid=self.current_event['IDCASE'],
                                      service_uid=service['IDSERV'])

        # Проверка на соответствие кода услуги периоду
        if not CheckFunction.is_expired_service(service['CODE_USL'], self.current_event['DATE_2']):
            h_errors += handle_errors({'CODE_USL': [u'904;Код услуги не может быть применён в текущем периоде']},
                                      parent='USL', record_uid=self.current_record['N_ZAP'],
                                      event_uid=self.current_event['IDCASE'],
                                      service_uid=service['IDSERV'])

        # Проверка на соответствие кода услуги методу ВМП
        if self.registry_type == 2 and not CheckFunction.is_service_code_matching_hitech_method(
                service['CODE_USL'], self.current_event['METOD_HMP']):
            h_errors += handle_errors({'CODE_USL': [u'904;Код услуги не соответствует методу ВМП']},
                                      parent='USL', record_uid=self.current_record['N_ZAP'],
                                      event_uid=self.current_event['IDCASE'],
                                      service_uid=service['IDSERV'])

        # Проверка наличия уточнения в диагнозах
        if self.current_event['LPU'] != '280043' \
                and not CheckFunction.is_disease_has_precision(service.get('DS', None)):
            h_errors += handle_errors({'DS': [u'904;Диагноз указан без уточняющей подрубрики']},
                                      parent='USL', record_uid=self.current_record['N_ZAP'],
                                      event_uid=self.current_event['IDCASE'],
                                      service_uid=service['IDSERV'])

        # Проверка на соответствие признака детского профиля услуги признаку детского профиля случая
        if self.registry_type in (1, 2) and \
                not CheckFunction.is_service_children_profile_matching_event_children_profile(
                    service.get('DET'),
                    self.current_event.get('DET')):
            h_errors += handle_errors({'CODE_USL': [u'904;Признак детского профиля случая '
                                                    u'не совпадает с признаком детского профиля услуги']},
                                      parent='USL', record_uid=self.current_record['N_ZAP'],
                                      event_uid=self.current_event['IDCASE'],
                                      service_uid=service['IDSERV'])

        # Проверка на соответствие даты начала случая по диспансеризации с датой опроса
        if service['CODE_USL'] in ('019002', '19002') and service['DATE_IN'] != self.current_event['DATE_1']:
            h_errors += handle_errors({'DATE_1': [u'904;Дата начала случая диспансеризации не совпадает '
                                                  u'с датой начала услуги анкетирования']},
                                      parent='SLUCH', record_uid=self.current_record['N_ZAP'],
                                      event_uid=self.current_event['IDCASE'],
                                      service_uid='')

        # Проверка на соответствие даты окончания случая по диспансеризации дате итогового приёма терапевта
        if service['CODE_USL'] in ('019021', '019023', '019022', '019024', '19021', '19023', '19022', '19024',) \
                and service['DATE_OUT'] != self.current_event['DATE_2']:
            h_errors += handle_errors({'DATE_2': [u'904;Дата окончания случая диспансеризации не совпадает с '
                                                  u'датой окончания услуги приёма терапевта']},
                                      parent='SLUCH', record_uid=self.current_record['N_ZAP'],
                                      event_uid=self.current_event['IDCASE'],
                                      service_uid='')

        # Проверка на соответствие кода услуги условиям оказания
        # Посещение в неотложной форме в приемном отделении стационара
        if self.current_event.get('USL_OK', '') in ('1', '2') \
                and service.get('CODE_USL', '') in ('056066', '56066', '156066', '56066'):
            h_errors += handle_errors({'DATE_2': [u'904;Услуга не может оказываться в текущих условиях']},
                                      parent='SLUCH', record_uid=self.current_record['N_ZAP'],
                                      event_uid=self.current_event['IDCASE'],
                                      service_uid=service['IDSERV'])

        # Проверки на целостность случаев по поликлинике
        code_obj = CODES.get(service['CODE_USL'], None)
        if code_obj and self.current_event.get('USL_OK', '') == '3' and not service['CODE_USL'].startswith('A'):
            if code_obj.division_id:
                self.divisions_check_list.append(code_obj.division_id)
            if code_obj.reason_id:
                self.reasons_check_list.append(code_obj.reason_id)
            self.groups_check_list.append(code_obj.group_id)

        return h_errors
    def validate_event(self, event):
        h_errors = []

        if self.current_event:
            if len(set(self.divisions_check_list)) > 1:
                h_errors += handle_errors({'SLUCH': [u'904;В законченном случае обнаружены услуги с разными '
                                                     u'отделениями поликлиники.']},
                                          parent='ZAP', record_uid=self.previous_record['N_ZAP'],
                                          event_uid=self.current_event['IDCASE'])

            if 19 not in self.groups_check_list and len(set(self.reasons_check_list)) > 1:
                h_errors += handle_errors({'SLUCH': [u'904;В законченном случае обнаружены поликлинические услуги '
                                                     u'с разной целью обращения/посещения.']},
                                          parent='ZAP', record_uid=self.previous_record['N_ZAP'],
                                          event_uid=self.current_event['IDCASE'])

            if 19 in self.groups_check_list and len(set(self.groups_check_list)) > 1:
                h_errors += handle_errors({'SLUCH': [u'904;В законченном стоматологическом случае '
                                                     u'обнаружены услуги не относящиеся к стоматологии.']},
                                          parent='ZAP', record_uid=self.previous_record['N_ZAP'],
                                          event_uid=self.current_event['IDCASE'])

        self.previous_record = self.current_record

        self.current_event = event
        self.divisions_check_list = []
        self.reasons_check_list = []
        self.groups_check_list = []
        errors = validate(self.event_valid, event)

        # Проверка на уникальность значений
        if event['IDCASE'] in self.event_unique['IDCASE']:
            errors['IDCASE'] = [u'904;Значение не является уникальным']
        self.event_unique['IDCASE'].append(event['IDCASE'])

        if event.get('USL_OK', '') in ['1', '2'] and self.registry_type == 1 \
                and event.get('P_PER', '0') not in INCOMING_SIGNS:
            errors['P_PER'] = [u'904;Значение не соответствует справочному.']
        if event.get('USL_OK', '') in ['1', '2'] and event.get('P_PER', '0') == '0' and self.registry_type == 1:
            errors['P_PER'] = [u'902;Отсутствует обязательное значение.']

        h_errors += handle_errors(errors, parent='SLUCH', record_uid=self.current_record['N_ZAP'],
                                  event_uid=event['IDCASE'])

        # Проверка на соостветствие вида помощи усуловию оказания
        if not CheckFunction.is_event_kind_corresponds_term(event.get('VIDPOM', None), event.get('USL_OK', None)):
            h_errors += handle_errors(
                {'SLUCH': [u'904;Указанный вид помощи не может быть оказанным в текущих условиях']},
                parent='ZAP', record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])

        # Проверка на соостветствие результата диспансеризации комментарию
        if self.registry_type in (3, 4) and not CheckFunction.is_examination_result_matching_comment(
                event.get('RSLT_D'), event.get('COMENTSL')):
            h_errors += handle_errors(
                {'RSLT_D': [u'904;Указанный код результата диспансеризации не совпадает с указанным комментарием']},
                parent='SLUCH', record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])

        if self.registry_type == 1:
            # Проверка КСГ
            if event.get('USL_OK', '') in ('1', '2') and not event.get('KSG_MO', None):
                h_errors += handle_errors(
                    {'KSG_MO': [u'902;Отсутствует обязательное значение.']},
                    parent='SLUCH', record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])

            if event.get('KSG_MO', None) and \
                    ((event.get('USL_OK', '') == '1' and event.get('KSG_MO', None) not in HOSPITAL_KSGS)
                     or (event.get('USL_OK', '') == '2' and event.get('KSG_MO', None) not in DAY_HOSPITAL_KSGS)):
                h_errors += handle_errors(
                    {'KSG_MO': [u'904;Значение не соответствует справочному.']},
                    parent='SLUCH', record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])

        # Проверка наличия уточнения в диагнозах
        if event['LPU'] != '280043':
            if not CheckFunction.is_disease_has_precision(event.get('DS0', None)):
                h_errors += handle_errors(
                    {'DS0': [u'904;Диагноз указан без уточняющей подрубрики']},
                    parent='SLUCH', record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])

            if not CheckFunction.is_disease_has_precision(event.get('DS1', None)):
                h_errors += handle_errors(
                    {'DS1': [u'904;Диагноз указан без уточняющей подрубрики']},
                    parent='SLUCH', record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])

            concomitants = event.get('DS2', [])
            if type(concomitants) != list:
                concomitants = [concomitants]
            for disease in concomitants:
                if not CheckFunction.is_disease_has_precision(disease):
                    h_errors += handle_errors(
                        {'DS2': [u'904;Диагноз указан без уточняющей подрубрики']},
                        parent='SLUCH', record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])

            complicateds = event.get('DS3', [])
            if type(complicateds) != list:
                complicateds = [complicateds]
            for disease in complicateds:
                if not CheckFunction.is_disease_has_precision(disease):
                    h_errors += handle_errors(
                        {'DS3': [u'904;Диагноз указан без уточняющей подрубрики']},
                        parent='SLUCH', record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])

        # Проверка лекарственных препаратов
        medicine_valid = {
            'CODE_LP': [_required, _in(MEDICINES)],
            'NAME_LP': _required
        }

        medicines = event.get('LEKPREP', [])
        if type(medicines) != list:
            medicines = [medicines]

        for medicine in medicines:
            h_errors += handle_errors(validate(medicine_valid, medicine), parent='LEKPREP',
                                      record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])

        if self.registry_type in (10, 9, 8, 7, 6, 5, 4, 3):
            # Проверка сопутствующих заболеваний
            exam_concomitants_valid = {
                'DS2': [_required, _in(DISEASES)],
                'DS2_PR': _in(['0', '1'])
            }
            exam_concomitant_diseases = event.get('DS2_N', [])
            if type(exam_concomitant_diseases) != list:
                exam_concomitant_diseases = [exam_concomitant_diseases]
            for disease in exam_concomitant_diseases:
                h_errors += handle_errors(validate(exam_concomitants_valid, disease), parent='DS2_N',
                                          record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])
                if not CheckFunction.is_disease_has_precision(disease.get('DS2', None)):
                    h_errors += handle_errors(
                        {'DS2_N': [u'904;Диагноз указан без уточняющей подрубрики']},
                        parent='DS2_N', record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])

            # Проверка назначения после присвоения группы здоровья, кроме I и II
            health_group = HealthGroup.get_health_group(self.registry_type, event.get('COMENTSL', '') or '')
            is_required_appointment = False
            if health_group not in ('0', '1', '2') or event.get('RSLT_D', '0') in ('3', '4', '5', '31', '32'):
                is_required_appointment = True
            if event.get('RSLT_D', '0') in ('6', '11', '12', '13', '14', '15'):
                is_required_appointment = False

            if is_required_appointment:
                appointments = event.get('NAZR', [])
                if not appointments:
                    h_errors += handle_errors({'NAZR': [u'902;Отсутствует обязательное значение для '
                                                        u'группы здоровья %s, рассчитанной из комментария случая (%s) '
                                                        u'и результата диспансеризации %s.'
                                                        % (health_group, event.get('COMENTSL', '') or '',
                                                           event.get('RSLT_D', '0'))]},
                                              parent='SLUCH',
                                              record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])
                if type(appointments) != list:
                    appointments = [appointments]
                appointment_valid = {
                    'NAZ_SP': {'check': None, 'valid': SPECIALITIES_NEW},
                    'NAZ_V': {'check': None, 'valid': EXAMINATION_KINDS},
                    'NAZ_PMP': {'check': None, 'valid': PROFILES},
                    'NAZ_PK': {'check': None, 'valid': BED_PROFILES},
                }
                for direction_type in appointment_valid:
                    check_values = event.get(direction_type, [])
                    if type(check_values) != list:
                        check_values = [check_values]
                    appointment_valid[direction_type]['check'] = check_values

                direction_type = None
                for appointment in appointments:
                    if appointment in ['1', '2']:
                        direction_type = 'NAZ_SP'
                    elif appointment == '3':
                        direction_type = 'NAZ_V'
                    elif appointment in ['4', '5']:
                        direction_type = 'NAZ_PMP'
                    elif appointment == '6':
                        direction_type = 'NAZ_PK'
                    else:
                        h_errors += handle_errors(
                            {'NAZR': [u'904;Значение не соответствует справочному для '
                                      u'группы здоровья %s, рассчитанной из комментария случая (%s) '
                                      u'и результата диспансеризации %s.'
                                      % (health_group, event.get('COMENTSL', '') or '',
                                         event.get('RSLT_D', '0'))]}, parent='SLUCH',
                            record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])
                    if direction_type:
                        valid_values = appointment_valid[direction_type]['valid']
                        check_values = appointment_valid[direction_type]['check']
                        if not check_values:
                            h_errors += handle_errors(
                                {direction_type: [u'902;Отсутствует обязательное значение.']}, parent='SLUCH',
                                record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])
                        for value in check_values:
                            if value not in valid_values:
                                h_errors += handle_errors(
                                    {direction_type: [u'904;Значение не соответствует справочному.']}, parent='SLUCH',
                                    record_uid=self.current_record['N_ZAP'], event_uid=event['IDCASE'])
        return h_errors
 def validate_patient_policy(self, patient_policy):
     return handle_errors(validate(self.policy_valid, patient_policy),
                          parent='PACIENT', record_uid=self.current_record['N_ZAP'])
 def validate_header(self, header):
     return validate(self.header_valid, header)
Exemple #12
0
# Parameters
valid_img_height = config.VALID.img_height
valid_img_width = config.VALID.img_width

if __name__ == '__main__':
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--mode',
                        type=str,
                        default='train',
                        help='Running process')
    parser.add_argument('--img_height',
                        type=int,
                        default=1080,
                        help='Height of images')
    parser.add_argument('--img_width',
                        type=int,
                        default=1920,
                        help='Width of images')
    args = parser.parse_args()
    if args.mode == 'train':
        training()
    elif args.mode == 'valid':
        validate(valid_ldr_dir, valid_hdr_dir, valid_gen_dir, logs_valid,
                 valid_img_height, valid_img_width)
    elif args.mode == 'test':
        testing(test_ldr_dir, test_gen_dir, logs_test, args.img_height,
                args.img_width, 500)
    else:
        raise Exception("Unknown mode")