Remove Isolated Variable from Graph.
(self)
| 399 | self.delete_isolated() |
| 400 | |
| 401 | def delete_isolated(self): |
| 402 | """Remove Isolated Variable from Graph.""" |
| 403 | blacklist = [None] |
| 404 | while len(blacklist) > 0: |
| 405 | blacklist = [] |
| 406 | # delete all operations which are not links to a valid graph output |
| 407 | for op in self.graph.operations.values(): |
| 408 | if len(self.graph.get_downstream_operations(op)) == 0: |
| 409 | output_names = [var.name for var in op.outputs] |
| 410 | if all([name not in self.graph.outputs for name in output_names]): |
| 411 | blacklist.append(op) |
| 412 | |
| 413 | for op in blacklist: |
| 414 | for var in op.outputs: |
| 415 | self.graph.remove_variable(var) |
| 416 | self.graph.remove_operation(op) |
| 417 | |
| 418 | var_blacklist = [None] |
| 419 | while len(var_blacklist) > 0: |
| 420 | var_blacklist = set() |
| 421 | # delete all variables that links to invalid operations: |
| 422 | for var in self.graph.variables.values(): |
| 423 | # 删除无根无输出的变量 |
| 424 | if var.source_op is None and len(var.dest_ops) == 0: |
| 425 | var_blacklist.add(var) |
| 426 | |
| 427 | # 删除根节点不在图中的变量 |
| 428 | if var.source_op is not None and var.source_op.name not in self.graph.operations: |
| 429 | var_blacklist.add(var) |
| 430 | |
| 431 | # 删除连接到未知节点的变量 |
| 432 | for op in var.dest_ops: |
| 433 | if op.name not in self.graph.operations: |
| 434 | var_blacklist.add(var) |
| 435 | |
| 436 | # 删除孤立变量 |
| 437 | if var.source_op is None and var.name not in self.graph.inputs: |
| 438 | if len(var.dest_ops) == 0: var_blacklist.add(var) |
| 439 | |
| 440 | # 没有输出的不能删...会影响算子输出顺序... |
| 441 | |
| 442 | for var in var_blacklist: |
| 443 | self.graph.remove_variable(var) |
| 444 | |
| 445 | def format_parameter(self) -> None: |
| 446 | """ Split parameter that has more than 1 dest ops """ |
no test coverage detected