chore: use doctype as btree
This commit is contained in:
parent
85f2a6dd54
commit
9d20256366
@ -58,33 +58,51 @@ class BTree(object):
|
|||||||
return lst
|
return lst
|
||||||
|
|
||||||
def bfs(self, from_date: datetime, to_date: datetime):
|
def bfs(self, from_date: datetime, to_date: datetime):
|
||||||
root_node = Node(parent=None, period=(getdate(from_date), getdate(to_date)))
|
node = frappe.new_doc("Nodes")
|
||||||
root_node.parent = None
|
node.period_from_date = from_date
|
||||||
|
node.period_to_date = to_date
|
||||||
|
node.root = None
|
||||||
|
node.insert()
|
||||||
|
|
||||||
# add root node to tree
|
period_list = deque([node])
|
||||||
self.btree.append(root_node)
|
|
||||||
cur_node = root_node
|
|
||||||
period_list = deque([root_node])
|
|
||||||
|
|
||||||
while period_list:
|
while period_list:
|
||||||
cur_node = period_list.popleft()
|
cur_node = period_list.popleft()
|
||||||
cur_node_index = len(self.btree) - 1
|
|
||||||
|
|
||||||
delta = cur_node.period[1] - cur_node.period[0]
|
print(cur_node.as_dict())
|
||||||
|
delta = cur_node.period_to_date - cur_node.period_from_date
|
||||||
if delta.days == 0:
|
if delta.days == 0:
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
cur_floor = floor(delta.days / 2)
|
cur_floor = floor(delta.days / 2)
|
||||||
left = (cur_node.period[0], (cur_node.period[0] + relativedelta(days=+cur_floor)))
|
left = (
|
||||||
left_node = Node(parent=cur_node_index, period=left)
|
cur_node.period_from_date,
|
||||||
self.btree.append(left_node)
|
(cur_node.period_from_date + relativedelta(days=+cur_floor)),
|
||||||
cur_node.left_child = len(self.btree) - 1
|
)
|
||||||
|
left_node = frappe.get_doc(
|
||||||
|
{
|
||||||
|
"doctype": "Nodes",
|
||||||
|
"period_from_date": cur_node.period_from_date,
|
||||||
|
"period_to_date": left,
|
||||||
|
"root": cur_node.name,
|
||||||
|
}
|
||||||
|
).insert()
|
||||||
|
cur_node.left_child = left_node.name
|
||||||
period_list.append(left_node)
|
period_list.append(left_node)
|
||||||
|
|
||||||
right = ((cur_node.period[0] + relativedelta(days=+(cur_floor + 1))), cur_node.period[1])
|
right = (
|
||||||
right_node = Node(parent=cur_node_index, period=right)
|
(cur_node.period_from_date + relativedelta(days=+(cur_floor + 1))),
|
||||||
self.btree.append(right_node)
|
cur_node.period_to_date,
|
||||||
cur_node.right_child = len(self.btree) - 1
|
)
|
||||||
|
right_node = frappe.get_doc(
|
||||||
|
{
|
||||||
|
"doctype": "Nodes",
|
||||||
|
"period_from_date": right,
|
||||||
|
"period_to_date": cur_node.period_to_date,
|
||||||
|
"root": cur_node.name,
|
||||||
|
}
|
||||||
|
).insert()
|
||||||
|
cur_node.right_child = right_node
|
||||||
period_list.append(right_node)
|
period_list.append(right_node)
|
||||||
|
|
||||||
def dfs(self, from_date: datetime, to_date: datetime):
|
def dfs(self, from_date: datetime, to_date: datetime):
|
||||||
@ -144,6 +162,7 @@ class BTree(object):
|
|||||||
self.current_node = n
|
self.current_node = n
|
||||||
|
|
||||||
def build_tree(self, from_date: datetime, to_date: datetime, alogrithm: str):
|
def build_tree(self, from_date: datetime, to_date: datetime, alogrithm: str):
|
||||||
|
frappe.db.delete("Nodes")
|
||||||
if alogrithm == "BFS":
|
if alogrithm == "BFS":
|
||||||
self.bfs(from_date, to_date)
|
self.bfs(from_date, to_date)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user