2017-02-15 13 views
2

%%time и %%timeit магии позволяют синхронизировать одну ячейку в ноутбуке Jupyter или iPython.Как включить тайминги для каждой ячейки в ноутбуке Jupyter?

Есть ли аналогичные функции для включения и выключения синхронизации для каждой ячейки в ноутбуке Jupyter?

This question связан, но не имеет ответа на более общий вопрос, связанный с возможностью автоматического включения данной магии в каждую ячейку.

ответ

2

Hacky способ сделать это через custom.js файл (обычно помещается в ~/.jupyter/custom/custom.js)

Пример того, как создать кнопки для панели инструментов находится here и это то, что я на основе этого ответа прочь. Он просто добавляет строчную форму магии, которую вы хотите для всех ячеек, когда нажимаете кнопку включения, а кнопка отключения использует str.replace, чтобы «выключить» ее.

define([ 
    'base/js/namespace', 
    'base/js/events' 
], function(Jupyter, events) { 
    events.on('app_initialized.NotebookApp', function(){ 
     Jupyter.toolbar.add_buttons_group([ 
      { 
       'label' : 'enable timing for all cells', 
       'icon' : 'fa-clock-o', // select your icon from http://fortawesome.github.io/Font-Awesome/icons 
       'callback': function() { 
        var cells = Jupyter.notebook.get_cells(); 
        cells.forEach(function(cell) { 
         var prev_text = cell.get_text(); 
         if(prev_text.indexOf('%%time\n%%timeit\n') === -1) { 
          var text = '%%time\n%%timeit\n' + prev_text; 
          cell.set_text(text); 
         } 
        }); 
       } 
      }, 
      { 
       'label' : 'disable timing for all cells', 
       'icon' : 'fa-stop-circle-o', // select your icon from http://fortawesome.github.io/Font-Awesome/icons 
       'callback': function() { 
        var cells = Jupyter.notebook.get_cells(); 
        cells.forEach(function(cell) { 
         var prev_text = cell.get_text(); 
         var text = prev_text.replace('%%time\n%%timeit\n',''); 
         cell.set_text(text); 
        }); 
       } 
      } 
      // add more button here if needed. 
     ]); 
    }); 
}); 
+0

Фантастический ответ, но я не упомянул, что я работаю на корпоративном сервере Jupyter, и я не уверен, что у меня есть доступ к 'custom.js' для его проверки. – abeboparebop

+0

Наконец-то появилась возможность проверить это на другой системе. Как написано, ответ не имеет большого смысла - наличие как '%% time', так и' %% timeit' в каждой ячейке не является полезным. Поэтому везде ваш ответ говорит «%% time \ n %% timeit \ n', я заменил его на' %% time \ n'. Но общий подход работает очень хорошо. Благодаря! – abeboparebop

+0

Кстати, значок 'fa-clock-o' работает, но не' fa-stop-circle-o'. Jupyter core version 4.2.0. – abeboparebop