class UpsertIngester(Utils):
    def __init__(self, db_connection):

        self.db = Database(helpers_connection=db_connection)

    def add_target(self, target_data, table_name, output_schema, primary_keys,
                   date_format):

        self.target_data = target_data

        self.table_name = table_name
        self.schema = output_schema
        self.primary_keys = primary_keys

        date_cols = [
            x['column_name'] for x in self.db.execute_query(
                f""" SELECT column_name FROM information_schema.columns WHERE table_schema = '{output_schema}' AND table_name = '{table_name}' AND ( data_type ILIKE '%timestamp%' OR data_type ILIKE '%date%' ); """,
                return_object=True)
        ]

        if not self.target_data:

            raise IndexError('Target data for table ' + self.table_name +
                             ' is empty.')

        else:
            self.target_data, self.target_columns = Utils.add_missing_keys(
                Utils.keys_to_snakecase(self, self.target_data))

            self.column_names = ', '.join([x for x in self.target_columns])
            self.columns_insert = ', '.join([
                '%(' + x +
                ')s' if x not in [k
                                  for k in date_cols] else f"TO_TIMESTAMP(%(" +
                x + ")s, '" + date_format + "')" for x in self.target_columns
            ])

            self._ingest_target()

    def _ingest_target(self):

        self.db.execute_query(
            f""" INSERT INTO       {self.schema}.{self.table_name}
                                                     ({self.column_names})
                                   VALUES            ({self.columns_insert})
                                   ON CONFLICT       (""" +
            ', '.join([x for x in self.primary_keys]) + """)
                                   DO NOTHING
                                   ;
                                   """,
            multiple=True,
            args=self.target_data)

    def close(self):

        self.db.close()
Esempio n. 2
0
def main():
    # clean output folder
    if CLEAN:
        clean_folder(cfg.PATH_2D)
        clean_folder(cfg.PATH_3D)

    database = Database(name=cfg.DATABASE)

    # LEA
    if LEA_IN:
        winjulea_in(os.path.join(cfg.PATH_LEA, 'winjulea.lea'))
    if LEA_OUT:
        evals, depths = winjulea_out(os.path.join(cfg.PATH_LEA, 'winjulea.rpt'))
        np.save(os.path.join(cfg.PATH_LEA, 'evals'+cfg.FILE_SUFFIX_LEA+'.npy'), evals)
        np.save(os.path.join(cfg.PATH_LEA, 'depths'+cfg.FILE_SUFFIX_LEA+'.npy'), depths)

    # 2D
    if D2:
        d2 = Superposition(database)
        d2.run(cfg.VEHICLE, cfg.NUM_TIRES)

    # 3D
    if D3:
        d3 = FEM3D(database)
        d3.run(cfg.VEHICLE, cfg.NUM_TIRES)

    # plot
    if PLOT:
        """
        # LEA vs superposition 2D
        evals_lea = np.load(os.path.join(cfg.PATH_LEA, 'evals'+cfg.FILE_SUFFIX_LEA+'.npy'))
        depths_lea = np.load(os.path.join(cfg.PATH_LEA, 'depths'+cfg.FILE_SUFFIX_LEA+'.npy'))
        evals_2d = np.load(os.path.join(cfg.PATH_2D, 'evals'+cfg.FILE_SUFFIX_2D+'.npy'))
        depths_2d = np.load(os.path.join(cfg.PATH_2D, 'depths'+cfg.FILE_SUFFIX_2D+'.npy'))
        plot_eval_depth_lea_2d(evals_lea, depths_lea, evals_2d, depths_2d, cfg.PATH_LEA)
        """

        # LEA vs superposition 2D vs 3D
        evals_lea = np.load(os.path.join(cfg.PATH_LEA, 'evals'+cfg.FILE_SUFFIX_LEA+'.npy'))
        depths_lea = np.load(os.path.join(cfg.PATH_LEA, 'depths'+cfg.FILE_SUFFIX_LEA+'.npy'))
        evals_2d = np.load(os.path.join(cfg.PATH_2D, 'evals'+cfg.FILE_SUFFIX_2D+'.npy'))
        depths_2d = np.load(os.path.join(cfg.PATH_2D, 'depths'+cfg.FILE_SUFFIX_2D+'.npy'))
        evals_3d = np.load(os.path.join(cfg.PATH_3D, 'evals'+cfg.FILE_SUFFIX_3D+'.npy'))
        depths_3d = np.load(os.path.join(cfg.PATH_3D, 'depths'+cfg.FILE_SUFFIX_3D+'.npy'))
        plot_eval_depth_all(evals_lea, depths_lea, evals_2d, depths_2d, evals_3d, depths_3d, cfg.PATH_3D)

    database.close()
Esempio n. 3
0
            """Old version
            dataArray = []
            for i in fields:
                array = vtk.vtkDoubleArray()
                array.SetName(i)
                array.SetNumberOfTuples(grid.GetNumberOfPoints()) # axis 0
                array.SetNumberOfComponents(1) # axis 1
                dataArray.append(array)
                grid.GetPointData().AddArray(array)

            for i in range(results.shape[0]): # points
                for j in range(results.shape[1]): # fields
                    dataArray[j].SetValue(i, results[i,j])
            """


if __name__ == "__main__":
    database = Database(name=cfg.DATABASE)

    task = Superposition(database)
    mode = 'single'
    if mode == 'single':
        # run one vehicle (single mode)
        task.run(cfg.VEHICLE, cfg.NUM_TIRES)
    elif mode == 'batch':
        # run all vehicles (batch mode)
        for vehicle in database.vehicle_all():
            task.run(vehicle, cfg.NUM_TIRES)

    database.close()
Esempio n. 4
0
from models.intent.intent_model import IntentModel
intent = IntentModel(model_name='../models/intent/intent_model.h5', proprocess=p)
predict = intent.predict_class(query)
intent_name = intent.labels[predict]


from models.ner.nermodel import NerModel
ner = NerModel(model_name='../models/ner/ner_model.h5', proprocess=p)
predicts = ner.predict(query)
ner_tags = ner.predict_tags(query)

print('질문 : ', query)
print('=' * 40)
print('의도 파악 : ', intent_name)
print('개체명 인식 : ', predicts)
print('답변 검색에 필요한 NER 태그 : ', ner_tags)
print('=' * 40)


from utils.findanswer import FindAnswer
try:
    f = FindAnswer(db)
    answer_text, answer_image = f.search(intent_name, ner_tags)
    answer = f.tag_to_word(predicts, answer_text)
except:
    answer = '죄송해요, 무슨 말인지 모르겠어요.'

print('답변 : ', answer)

db.close()