from gdisdk.modules.filters import DropDuplicateRows
from gdisdk.modules.operators import AddTableColumns
from gdisdk.modules.readers import CsvReader
from gdisdk.pipeline.pipeline import PipeLine

# ---- 实例化模块 -------
# 读取csv数据
read_csv = CsvReader(mname="ReadCsv")
read_csv.file = "地层表.csv"

# 去除钻孔编号重复的行
drop_duplicate = DropDuplicateRows(mname="DropDuplicate")
drop_duplicate.subset = ["bore_number"]  # 设置需要去重的列名，支持设置多列

# 增加一列，用于存储新的地层名称 - 地层编号+岩性名称
add_column = AddTableColumns(mname="AddColumn")
add_column.column_names = [{"name": "layer_name", "title": "layer_name", "unit": "-"}]  # 设置新列的名称、标题、单位
add_column.column_templates = {"layer_name": "{layer_number} + {material_name}"}  # 设置新列的计算方式

# ----- 组织pipeline -------
# 初始化pipeline
pipeline = PipeLine(app_name="GetBoreTable", app_title="获取地层表")

# 链接模块
links = read_csv.OutputTable >> drop_duplicate.InputTable | drop_duplicate.OutputTable >> add_column.InputTable

# 添加模块和链接至pipeline
pipeline.add_links(links)

# 保存pipeline至本地
pipeline.save_pipeline(file="GetBoreTable.pipe")

# 运行pipeline
pipeline.run()

# 获取最后一个模块`add_column`的输出表数据
print(add_column.OutputTable.data.head())
