Как создать интерфейс Python для кода C? - PullRequest
1 голос
/ 25 октября 2019

В моей области есть библиотека, написанная на языке C. Производительность и точность этой библиотеки сделали ее незаменимой. Однако из-за использования языка C большинству людей трудно работать с этим пакетом.

Использование этого пакета требует некоторого кодирования на C;Вы должны включить библиотеку, а затем вы можете использовать некоторые конкретные структуры данных и функции, определенные в библиотеке. Например, как показано в приведенном ниже коде, необходимо включить библиотеку, инициализировать ее в главном, добавить эксперимент и определить новые переменные для вычисления хи-квадрат:

    #include <stdio.h>     /* Some regular libraries */
    ....

    #include <opr/opr.h>   /* the mentioned library */



    int main(int argc, char *argv[])
    { 
      /* Initialize That library */
      oprInit(argv[0]);

      /* Initialize the experiment  */
      oprAddExperiment("experiment number 1"); 


      /* Initialize parameter vector(s) */
      opr_params hypothesis_values = oprAllocer();
      opr_params theory_values = oprAllocer();

      oprDefine(hypothesis_values,theta12,theta13,theta23,deltacp,sdm,ldm);

      oprDefine(theory_values,theta12,theta13,theta23,deltacp,sdm,ldm);  

...


  for(y=0.0; y<10.0 ;y=y+0.2)
  {
      /* updating the values in each loop */
      /* calculation Chi squared */

      res=opr_chi2(hypothesis_values, theory_values);  
      ...
   }

Что я намерен сделатьdo создает интерфейс Python, создавая переводчик, который создает файл C и запускает его, т. е. если пользователь набрал import opr, код создает файл C с #include <opr/opr.h>, основной функцией и командой инициализации.

Я знаю, что подобные решения типа «голова за головой» не самые лучшие, поэтому мне было интересно, есть ли другой чистый и оптимальный способ использования этой библиотеки в скрипте Python?

Я слышал, что python - хороший язык склеивания, а также слышал, что числовые пакеты, такие как numpy, используют некоторые библиотеки C или FORTRAN, как я могу использовать эту возможность склеивания или выполнять аналогичную работу, как numy?

Как я уже упоминал ранее, производительность библиотеки уникальна, и мы не намерены изобретать колесо, написав его на языке Python, если только возможное улучшение по сравнению с реальным кодом не может быть сделано.

1 Ответ

0 голосов
/ 29 октября 2019

Загрузите исходный код Python и ознакомьтесь с некоторыми расширениями библиотеки. Вы получите представление о том, как все работает и как это должно быть сделано.

...