Execute outro notebook ipython em um namespace separado

Eu tenho usado algum código muito legaleste exemplo para executar um notebook ipython de outro, que eu (basicamente) copio abaixo. Isso acaba sendo uma ótima maneira de organizar meu código.

Mas agora, quero comparar algumas expressões sympy que eu codifiquei com expressões sympy aproximadamente equivalentes que alguém codificou. E como há alguns conflitos de nomes, gostaria de poder executar os dois blocos de anotações em seus próprios namespaces, para que Bob e eu definamos uma expressão sympyxPosso apenas avaliar

Bob.x - Me.x

para ver se eles são os mesmos (ou encontrar suas diferenças). [Note que é fácil alterar um dicionário de espaço de nomes para um espaço de nomes "acessível" usando algo comoeste objeto Bunch.]

Aqui está a função:

def exec_nb(nbfile):
    from io import open
    from IPython.nbformat import current
    with open(nbfile) as f:
        nb = current.read(f, 'json')
    ip = get_ipython()
    for cell in nb.worksheets[0].cells:
        if cell.cell_type != 'code':
            continue
        ip.run_cell(cell.input)

O problema básico é oget_ipython obtém a instância ipython atualmente em execução e, em seguida,run_cell executa as células do outro bloco de notas no namespace atual dessa instância.

Eu não consigo descobrir como mudar isso. Por exemplo, executando o comando inteiro emexec com um namespace diferente ainda encontra a instância ipython atual e usa esse namespace.

Além disso, ambos os notebooks precisam ser executados no ipython; Eu não posso exportá-los para um script e executar os scripts em um namespace.

questionAnswers(1)

yourAnswerToTheQuestion