Користувальницькькі налаштування

Налаштування сайту


sage_tricks

Запуск произвольных программ на Sage-сервере

Чтобы запустить программу, написанную не на Python, а на других языках программирования (C/C++, Fortran, …), на Sage-сервере, используя Sage Notebook только как графический веб-интерфейс для этого, можно:

1. Загрузить в какой-либо рабочий лист (например, новый) свой файл с программой. Назовём его для примера program.c

2. Скомпилировать программу в исполнимый файл. Для этого в одной из ячеек рабочего листа выполнить команды:

os.chdir(DATA)
os.system('gcc -o program.bin -program.c')

или

os.system('cc -lm -fopenmp -o program.bin program.c')

или

os.system("gfortran -o program.bin *.f90")

3. Затем выполнить скомпилированную программу

os.chdir(DATA)
os.system('./program.bin')

Примечание: Вывод на экран

Если в программе используется вывод чего-либо на экран (например, printf() в языке C), то программа будет работать только тогда, когда её рабочий лист открыт в окне браузера. Это связано с тем, что вывод на экран буферизируется, и когда вы закрываете рабочий лист, буфер начинает заполняться, так как реального вывода на экран не происходит. После заполнения буфера ядро ОС приостанавливает работу программы до тех пор, пока всё накопившееся в буфере не будет реально выведено на экран.

Чтобы избежать остановки расчётов через пару минут после закрытия браузера, существует несколько вариантов:

  • Не использовать вывод на экран в программе вообще (выкинуть все printf()-ы) (плохой, неудобный вариант);
  • Вместо вывода на экран запрограммировать вывод в файл (заменить все printf(…) на fprintf(file,…)) (плохой, негибкий вариант);
  • Перенаправить вывод программы в файл средствами командной оболочки (запускать как ./program.bin > program.log) (хороший, гибкий вариант);

FIXME Если использован последний из вариантов (хороший, годный), то вывод программы можно всегда проверить вручную, выполнив (а оно не выполнится!!!)

os.chdir(DATA)
os.system('tail program.log')

Загрузка архива на Sage-сервер

Если на сервер нужно загрузить сразу несколько файлов или просто сжать файлы для передачи, вместо самих файлов можно загрузить архив, содержащий их. Тогда для работы с этими файлами в одной из ячеек соответствующего рабочего листа Sage нужно выполнить команду распаковки загруженного архива. В зависимости от типа архива, команды могут быть такими:

os.chdir(DATA) # вход в каталог -- общая для всех
os.system('unzip infinite_cycle.zip')
os.system('tar -xf infinite_cycle.tar.xz')
os.system('tar -xf infinite_cycle.tar.bz2')
os.system('tar -xf infinite_cycle.tar.gz')
os.system('unxz infinite_cycle.c.xz')
os.system('bunzip2 infinite_cycle.c.bz2')
os.system('gunzip infinite_cycle.c.gz')  

Эти команды подразумевают, что в архиве находится сама программа (состоящая из одного или более файлов), а не вложенный каталог, содержащий программу. Поэтому нужно либо архивировать файлы с текстами программы напрямую (в корень архива), либо после распаковки переходить в распакованный вложенный каталог с файлами программы.

Тонкая настройка matplotlib

http://matplotlib.org/users/customizing.html

import matplotlib as mpl; 
mpl.rcParams['font.family'] = 'STIXGeneral';
mpl.rcParams['axes.labelsize'] = '18';
mpl.rcParams['xtick.labelsize'] = '18';
mpl.rcParams['ytick.labelsize'] = '18';
mpl.rcParams['axes.grid'] = 'True';
mpl.rcParams['figure.figsize'] = '5,4';
mpl.rcParams['savefig.pad_inches'] = '0.1';
mpl.rcParams['savefig.bbox'] = 'tight';

Русский текст на рисунке

Произвольный маркер в list_plot

http://ask.sagemath.org/question/9581/markers-in-list_plot/?answer=14317#post-id-14317

list_plot([(1,2),(2,2),(3,3)],plotjoined=True,linestyle='',marker='v')
sage_tricks.txt · В останнє змінено: 2015/03/24 11:43 by wombat