def _copy_scope_info(src: Var, dst: Var) -> None:
        """
        Populate meta data from old var (src) to new var (dst)
        """
        curr_scopes = SCOPE_STACK.get_curr_scopes()

        if ScopeSource.COREMLTOOLS_GRAPH_PASS in curr_scopes:

            if src.op in VALID_OPS_TO_COPY_SCOPE_INFO[-1]:
                return

            elif dst.op in VALID_OPS_TO_COPY_SCOPE_INFO[-1]:
                op = dst.op
                assert op is not None, "new_var cannot be a placeholder output"
                VALID_OPS_TO_COPY_SCOPE_INFO[-1].remove(op)

                # If old_var is a placeholder output, we assign defaults values to essential scope source
                old_scopes = src.scopes
                if len(old_scopes) == 0:
                    essential_scope_sources = op.enclosing_block._essential_scope_sources
                    for val in essential_scope_sources:
                        res = None
                        if val == ScopeSource.TORCHSCRIPT_MODULE_TYPE:
                            res = ["__COREML__::TORCHSCRIPT_PLACEHOLDER"]
                        elif val == ScopeSource.TORCHSCRIPT_MODULE_NAME:
                            res = [f"__COREML__::TORCHSCRIPT_PLACEHOLDER_{src.name}"]
                        elif val == ScopeSource.EXIR_STACK_TRACE:
                            res = [None]
                        elif val == ScopeSource.EXIR_DEBUG_HANDLE:
                            res = [None]
                        else:
                            raise ValueError(f"No default placeholder info for {val}.")
                        old_scopes[val] = res

                dst.scopes = add_graph_pass_scope(old_scopes, dst.scopes)

                for input in op.inputs.values():
                    if not isinstance(input, (list, tuple)):
                        input = [input]
                    for i in input:
                        Block._copy_scope_info(src, i)

        Populate meta data from old var (src) to new var (dst)
        
coremltools/converters/mil/mil/block.py