mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-13 02:47:48 +00:00
Quality - run black on api/sequence directory
This commit is contained in:
@@ -59,10 +59,12 @@ class Usecase:
|
||||
|
||||
if attempts > max_worst_case_attempts:
|
||||
is_cyclic = True
|
||||
break # We have an infinite loop due to a cyclic graph
|
||||
break # We have an infinite loop due to a cyclic graph
|
||||
|
||||
if is_cyclic:
|
||||
raise RecursionError("Task graph is cyclic and so critical path method cannot be performed.")
|
||||
raise RecursionError(
|
||||
"Task graph is cyclic and so critical path method cannot be performed."
|
||||
)
|
||||
return
|
||||
|
||||
self.pending_nodes = set(self.g.nodes)
|
||||
@@ -88,7 +90,9 @@ class Usecase:
|
||||
self.g = nx.DiGraph()
|
||||
self.edges = []
|
||||
self.g.add_node("start", duration=0, duration_type="ELAPSEDTIME", calendar=None)
|
||||
self.g.add_node("finish", duration=0, duration_type="ELAPSEDTIME", calendar=None)
|
||||
self.g.add_node(
|
||||
"finish", duration=0, duration_type="ELAPSEDTIME", calendar=None
|
||||
)
|
||||
for rel in self.settings["work_schedule"].Controls:
|
||||
for related_object in rel.RelatedObjects:
|
||||
if not related_object.is_a("IfcTask"):
|
||||
@@ -103,7 +107,9 @@ class Usecase:
|
||||
return
|
||||
|
||||
if task.TaskTime and task.TaskTime.ScheduleDuration:
|
||||
duration = ifcopenshell.util.date.ifc2datetime(task.TaskTime.ScheduleDuration).days
|
||||
duration = ifcopenshell.util.date.ifc2datetime(
|
||||
task.TaskTime.ScheduleDuration
|
||||
).days
|
||||
duration_type = task.TaskTime.DurationType
|
||||
else:
|
||||
duration = 0
|
||||
@@ -124,7 +130,9 @@ class Usecase:
|
||||
{
|
||||
"lag_time": 0
|
||||
if not rel.TimeLag
|
||||
else ifcopenshell.util.date.ifc2datetime(rel.TimeLag.LagValue.wrappedValue).days,
|
||||
else ifcopenshell.util.date.ifc2datetime(
|
||||
rel.TimeLag.LagValue.wrappedValue
|
||||
).days,
|
||||
"type": self.sequence_type_map[rel.SequenceType],
|
||||
},
|
||||
)
|
||||
@@ -137,7 +145,9 @@ class Usecase:
|
||||
if not predecessor_types:
|
||||
self.edges.append(("start", task.id(), {"lag_time": 0, "type": "FS"}))
|
||||
if task.TaskTime and task.TaskTime.ScheduleStart:
|
||||
self.start_dates.append(ifcopenshell.util.date.ifc2datetime(task.TaskTime.ScheduleStart))
|
||||
self.start_dates.append(
|
||||
ifcopenshell.util.date.ifc2datetime(task.TaskTime.ScheduleStart)
|
||||
)
|
||||
if not successor_types:
|
||||
self.edges.append((task.id(), "finish", {"lag_time": 0, "type": "FF"}))
|
||||
|
||||
@@ -154,13 +164,25 @@ class Usecase:
|
||||
self.file,
|
||||
task_time=task.TaskTime,
|
||||
attributes={
|
||||
"FreeFloat": ifcopenshell.util.date.datetime2ifc(data["free_float"], "IfcDuration"),
|
||||
"TotalFloat": ifcopenshell.util.date.datetime2ifc(data["total_float"], "IfcDuration"),
|
||||
"FreeFloat": ifcopenshell.util.date.datetime2ifc(
|
||||
data["free_float"], "IfcDuration"
|
||||
),
|
||||
"TotalFloat": ifcopenshell.util.date.datetime2ifc(
|
||||
data["total_float"], "IfcDuration"
|
||||
),
|
||||
"IsCritical": data["total_float"].days == 0,
|
||||
"EarlyStart": ifcopenshell.util.date.datetime2ifc(data["early_start"], "IfcDateTime"),
|
||||
"EarlyFinish": ifcopenshell.util.date.datetime2ifc(data["early_finish"], "IfcDateTime"),
|
||||
"LateStart": ifcopenshell.util.date.datetime2ifc(data["late_start"], "IfcDateTime"),
|
||||
"LateFinish": ifcopenshell.util.date.datetime2ifc(data["late_finish"], "IfcDateTime"),
|
||||
"EarlyStart": ifcopenshell.util.date.datetime2ifc(
|
||||
data["early_start"], "IfcDateTime"
|
||||
),
|
||||
"EarlyFinish": ifcopenshell.util.date.datetime2ifc(
|
||||
data["early_finish"], "IfcDateTime"
|
||||
),
|
||||
"LateStart": ifcopenshell.util.date.datetime2ifc(
|
||||
data["late_start"], "IfcDateTime"
|
||||
),
|
||||
"LateFinish": ifcopenshell.util.date.datetime2ifc(
|
||||
data["late_finish"], "IfcDateTime"
|
||||
),
|
||||
},
|
||||
)
|
||||
|
||||
@@ -190,10 +212,15 @@ class Usecase:
|
||||
if edge["lag_time"]:
|
||||
days += edge["lag_time"]
|
||||
if days:
|
||||
starts.append(datetime.datetime.combine(self.offset_date(finish, days, data), datetime.time(9)))
|
||||
starts.append(
|
||||
datetime.datetime.combine(
|
||||
self.offset_date(finish, days, predecessor_data), datetime.time(9)
|
||||
self.offset_date(finish, days, data), datetime.time(9)
|
||||
)
|
||||
)
|
||||
starts.append(
|
||||
datetime.datetime.combine(
|
||||
self.offset_date(finish, days, predecessor_data),
|
||||
datetime.time(9),
|
||||
)
|
||||
)
|
||||
else:
|
||||
@@ -204,7 +231,9 @@ class Usecase:
|
||||
return
|
||||
if edge["lag_time"]:
|
||||
starts.append(self.offset_date(start, edge["lag_time"], data))
|
||||
starts.append(self.offset_date(start, edge["lag_time"], predecessor_data))
|
||||
starts.append(
|
||||
self.offset_date(start, edge["lag_time"], predecessor_data)
|
||||
)
|
||||
else:
|
||||
starts.append(start)
|
||||
elif edge["type"] == "FF":
|
||||
@@ -212,8 +241,12 @@ class Usecase:
|
||||
if finish is None:
|
||||
return
|
||||
if edge["lag_time"]:
|
||||
finishes.append(self.offset_date(finish, edge["lag_time"], data))
|
||||
finishes.append(self.offset_date(finish, edge["lag_time"], predecessor_data))
|
||||
finishes.append(
|
||||
self.offset_date(finish, edge["lag_time"], data)
|
||||
)
|
||||
finishes.append(
|
||||
self.offset_date(finish, edge["lag_time"], predecessor_data)
|
||||
)
|
||||
else:
|
||||
finishes.append(finish)
|
||||
elif edge["type"] == "SF":
|
||||
@@ -225,11 +258,14 @@ class Usecase:
|
||||
days += edge["lag_time"]
|
||||
if days or edge["lag_time"]:
|
||||
finishes.append(
|
||||
datetime.datetime.combine(self.offset_date(start, days, data), datetime.time(17))
|
||||
datetime.datetime.combine(
|
||||
self.offset_date(start, days, data), datetime.time(17)
|
||||
)
|
||||
)
|
||||
finishes.append(
|
||||
datetime.datetime.combine(
|
||||
self.offset_date(start, days, predecessor_data), datetime.time(17)
|
||||
self.offset_date(start, days, predecessor_data),
|
||||
datetime.time(17),
|
||||
)
|
||||
)
|
||||
else:
|
||||
@@ -247,7 +283,9 @@ class Usecase:
|
||||
if potential_finish > data["early_finish"]:
|
||||
data["early_finish"] = potential_finish
|
||||
else:
|
||||
data["early_start"] = ifcopenshell.util.sequence.get_start_or_finish_date(
|
||||
data[
|
||||
"early_start"
|
||||
] = ifcopenshell.util.sequence.get_start_or_finish_date(
|
||||
data["early_finish"],
|
||||
datetime.timedelta(days=data["duration"]),
|
||||
data["duration_type"],
|
||||
@@ -303,10 +341,15 @@ class Usecase:
|
||||
days += edge["lag_time"]
|
||||
if days or edge["lag_time"]:
|
||||
finishes.append(
|
||||
datetime.datetime.combine(self.offset_date(start, -days, data), datetime.time(17))
|
||||
datetime.datetime.combine(
|
||||
self.offset_date(start, -days, data), datetime.time(17)
|
||||
)
|
||||
)
|
||||
finishes.append(
|
||||
datetime.datetime.combine(self.offset_date(start, -days, successor_data), datetime.time(17))
|
||||
datetime.datetime.combine(
|
||||
self.offset_date(start, -days, successor_data),
|
||||
datetime.time(17),
|
||||
)
|
||||
)
|
||||
else:
|
||||
finishes.append(start)
|
||||
@@ -325,12 +368,18 @@ class Usecase:
|
||||
return
|
||||
if edge["lag_time"]:
|
||||
starts.append(self.offset_date(start, -edge["lag_time"], data))
|
||||
starts.append(self.offset_date(start, -edge["lag_time"], successor_data))
|
||||
starts.append(
|
||||
self.offset_date(start, -edge["lag_time"], successor_data)
|
||||
)
|
||||
else:
|
||||
starts.append(start)
|
||||
free_floats.append(
|
||||
self.calculate_free_float(
|
||||
data["early_start"], successor_data["early_start"], edge["lag_time"], data, successor_data
|
||||
data["early_start"],
|
||||
successor_data["early_start"],
|
||||
edge["lag_time"],
|
||||
data,
|
||||
successor_data,
|
||||
)
|
||||
)
|
||||
elif edge["type"] == "FF":
|
||||
@@ -338,13 +387,21 @@ class Usecase:
|
||||
if finish is None:
|
||||
return
|
||||
if edge["lag_time"]:
|
||||
finishes.append(self.offset_date(finish, -edge["lag_time"], data))
|
||||
finishes.append(self.offset_date(finish, -edge["lag_time"], successor_data))
|
||||
finishes.append(
|
||||
self.offset_date(finish, -edge["lag_time"], data)
|
||||
)
|
||||
finishes.append(
|
||||
self.offset_date(finish, -edge["lag_time"], successor_data)
|
||||
)
|
||||
else:
|
||||
finishes.append(finish)
|
||||
free_floats.append(
|
||||
self.calculate_free_float(
|
||||
data["early_finish"], successor_data["early_finish"], edge["lag_time"], data, successor_data
|
||||
data["early_finish"],
|
||||
successor_data["early_finish"],
|
||||
edge["lag_time"],
|
||||
data,
|
||||
successor_data,
|
||||
)
|
||||
)
|
||||
elif edge["type"] == "SF":
|
||||
@@ -356,23 +413,37 @@ class Usecase:
|
||||
days += edge["lag_time"]
|
||||
if days:
|
||||
starts.append(
|
||||
datetime.datetime.combine(self.offset_date(finish, -days, data), datetime.time(9))
|
||||
datetime.datetime.combine(
|
||||
self.offset_date(finish, -days, data), datetime.time(9)
|
||||
)
|
||||
)
|
||||
starts.append(
|
||||
datetime.datetime.combine(self.offset_date(finish, -days, successor_data), datetime.time(9))
|
||||
datetime.datetime.combine(
|
||||
self.offset_date(finish, -days, successor_data),
|
||||
datetime.time(9),
|
||||
)
|
||||
)
|
||||
else:
|
||||
starts.append(finish)
|
||||
free_floats.append(
|
||||
self.calculate_free_float(
|
||||
data["early_start"], successor_data["early_finish"], edge["lag_time"], data, successor_data
|
||||
data["early_start"],
|
||||
successor_data["early_finish"],
|
||||
edge["lag_time"],
|
||||
data,
|
||||
successor_data,
|
||||
)
|
||||
)
|
||||
if starts and finishes:
|
||||
data["late_start"] = min(starts)
|
||||
data["late_finish"] = min(finishes)
|
||||
if self.offset_date(data["late_start"], data["duration"], data) < data["late_finish"]:
|
||||
data["late_finish"] = ifcopenshell.util.sequence.get_start_or_finish_date(
|
||||
if (
|
||||
self.offset_date(data["late_start"], data["duration"], data)
|
||||
< data["late_finish"]
|
||||
):
|
||||
data[
|
||||
"late_finish"
|
||||
] = ifcopenshell.util.sequence.get_start_or_finish_date(
|
||||
data["late_start"],
|
||||
datetime.timedelta(days=data["duration"]),
|
||||
data["duration_type"],
|
||||
@@ -380,7 +451,9 @@ class Usecase:
|
||||
date_type="FINISH",
|
||||
)
|
||||
else:
|
||||
data["late_start"] = ifcopenshell.util.sequence.get_start_or_finish_date(
|
||||
data[
|
||||
"late_start"
|
||||
] = ifcopenshell.util.sequence.get_start_or_finish_date(
|
||||
data["late_finish"],
|
||||
datetime.timedelta(days=data["duration"]),
|
||||
data["duration_type"],
|
||||
@@ -421,7 +494,9 @@ class Usecase:
|
||||
data["total_float"] = data["late_finish"] - data["early_finish"]
|
||||
# If the float is within the span of a single day, it may show as a 8 hours
|
||||
if data["total_float"].seconds == 60 * 60 * 8:
|
||||
data["total_float"] = datetime.timedelta(days=data["total_float"].days + 1)
|
||||
data["total_float"] = datetime.timedelta(
|
||||
days=data["total_float"].days + 1
|
||||
)
|
||||
|
||||
data["free_float"] = min(free_floats) if free_floats else None
|
||||
# If the float is within the span of a single day, it may show as a 8 hours
|
||||
@@ -430,7 +505,14 @@ class Usecase:
|
||||
|
||||
return True
|
||||
|
||||
def calculate_free_float(self, predecessor_date, successor_date, lag_time, predecessor_data, successor_data):
|
||||
def calculate_free_float(
|
||||
self,
|
||||
predecessor_date,
|
||||
successor_date,
|
||||
lag_time,
|
||||
predecessor_data,
|
||||
successor_data,
|
||||
):
|
||||
if not lag_time:
|
||||
min_successor_date = successor_date
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user