Mathematica и GAP: есть ли интерфейс?

Хотя надстройка "Абстрактная алгебра" - прекрасный пакет для Mathematica, imo ничто не сравнится с GAP, по крайней мере, для теории групп. Когда я посмотрел на Sage несколько лет назад, я обнаружил, что у него есть интерфейс с Mma, но когда я посмотрел на него поближе, он оказался несколько примитивным (но работающим). Я знаю, что в Техническом университете Эйндховена ( OpenMath) была проделана работа над платформой для интеграции / сопряжения основных математических инструментов, я даже начал над ней работать. Но эта работа потерялась. Теперь на мой вопрос:

Есть ли у кого-нибудь, и вы готовы поделиться, интерфейс между GAP и Mathematica?

2 ответа

Решение

Один из вариантов - использовать Sage в качестве промежуточного звена. Sage может взаимодействовать как с Mathematica, так и с GAP.
Я считаю, что Sage взаимодействует с обеими программами:
а) запуск их консольных интерфейсов в фоновом режиме с использованием pexpect
б) умение переводить большую часть синтаксиса GAP и Mathematica в его собственный синтаксис.

Обратите внимание, что я делал это пару раз раньше, и все работает нормально, но это означает, что вы не можете использовать интерфейс ноутбука Mathematica....

Действительно полезным инструментом было бы подключить Mathematica к ожиданиям (или pexpect), чтобы можно было написать интерфейсы, аналогичные консольным программам для Mathematica. Это в основном то, что предлагает вторая цитата в ответе Шёрда.

Часто задаваемые вопросы GAP кажутся довольно пессимистичными по этому поводу:

8.1: Могу ли я вызывать функции GAP из другой программы?

Краткий ответ - нет. Чтобы объяснить немного более полно, по существу, все алгебраические функции системы GAP написаны на языке GAP, поэтому для их работы требуется интерпретатор GAP. Интерпретатор написан на C, но по ряду причин не сосуществует с другим кодом в том же процессе, поэтому нет разумного способа связать GAP с C, Java или другой программой как библиотекой подпрограмм.

Хотя есть надежда:

Что вы можете сделать, это запустить GAP в дочернем процессе и обмениваться данными с ним, используя каналы, псевдо-ttys, UNIX FIFO или другое подобное устройство. Мы успешно сделали это в ряде проектов, и вы можете обратиться в список поддержки для получения более подробной информации, если хотите пойти по этому пути.

Обновить

FAQ теперь также гласит:

Относительно недавно некоторые разработчики SAGE создали libGAP, которая позволяет встраивать всю систему GAP в виде библиотеки C. Однако по-прежнему нельзя встраивать отдельные функции самостоятельно, и первый вызов libGAP по-прежнему должен вызывать полную последовательность запуска GAP.

Кроме того, существует несколько способов запуска GAP в качестве серверного процесса и вызова его из C программ C++. Посмотрите пакет SCSCP для стороны GAP. Существует несколько библиотек C и C++, которые реализуют клиентскую часть.

Другие вопросы по тегам