MCPcopy Create free account
hub / github.com/PaddlePaddle/Paddle / complete

Method complete

python/paddle/static/nn/control_flow.py:278–320  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

276 return ConditionalBlockGuard(self)
277
278 def complete(self):
279 inside_block = self.helper.main_program.current_block()
280 parent_block = self.helper.main_program.block(inside_block.parent_idx)
281
282 intermediate = set()
283 params = set()
284 params, intermediate = get_inputs_outputs_in_block(
285 inside_block, params, intermediate, helper=self.helper
286 )
287
288 # Todo(liym27) Here assume that all params are in recursive parent block
289 # but when minimize() called in control flow, some params may be in
290 # conditional grad block
291 param_list = [
292 parent_block._var_recursive(each_name) for each_name in params
293 ]
294
295 out_list = []
296 for inner_out_name in intermediate:
297 inner_var = parent_block._find_var_recursive(inner_out_name)
298 if inner_var:
299 out_list.append(inner_var)
300
301 step_scope = parent_block.create_var(
302 type=core.VarDesc.VarType.STEP_SCOPES
303 )
304 conditional_block_op = parent_block.append_op(
305 type='conditional_block',
306 inputs={
307 'Cond': self.inputs,
308 'Input': param_list,
309 },
310 outputs={'Out': out_list, 'Scope': [step_scope]},
311 attrs={
312 'sub_block': inside_block,
313 'is_scalar_condition': self.is_scalar_condition,
314 },
315 )
316
317 if self.need_append_conditional_block_grad(inside_block):
318 self.append_conditional_block_grad(
319 parent_block, inside_block, conditional_block_op
320 )
321
322 def need_append_conditional_block_grad(self, inside_block):
323 grad_sub_block_idx = inside_block.backward_block_idx

Callers 1

__exit__Method · 0.45

Calls 11

setClass · 0.85
current_blockMethod · 0.80
_var_recursiveMethod · 0.80
_find_var_recursiveMethod · 0.80
blockMethod · 0.45
appendMethod · 0.45
create_varMethod · 0.45
append_opMethod · 0.45

Tested by

no test coverage detected