ほんとのこと知りたいだけなのに。

夏休みはもうおわり。

burgled-batteries をどのように利用するかを考えてみる。

Pythonのプログラムをどう動かすか。 ちょいと整理してみる。

github.com

概要

ストーリーとしては以下のような感じでしょうか。 このストーリーで実装してみます。

  1. Python でプログラムを書く。 書いたプログラムはファイルに保管しておく。
  2. burgled-batteries でそのファイルを読み込む。
  3. Pythonの関数をCL上で定義する。
  4. CL上から定義した関数を実行する。

実装

Python でプログラムを書く。

# coding: utf-8
# HelloWorld.py
def test_func(name):
    return "Hello world! " + name

burgled-batteries でそのファイルを読み込む。

> (ql:quickload :burgled-batteries)
(:BURGLED-BATTERIES)
> (in-package :burgled-batteries)
#<PACKAGE "BURGLED-BATTERIES">
> (startup-python)
; No value
> (import "sys")
0
> (run "sys.path.append('/home/someml/junk')")
; No value
> (import "HelloWorld")
0
> (run "HelloWorld.test_func('yanqirenshi')")
"Hello world! yanqirenshi"

Pythonの関数をCL上で定義する。

> (defpyfun "HelloWorld.test_func" (name))
HELLOWORLD.TEST_FUNC

CL上から定義した関数を実行する。

> (helloworld.test_func "yanqirenshi") 
"Hello world! yanqirenshi"

おわり

想像以上にすんなり出来ました。 これでPythonでプログラムを書けば寄さそう。

あとは引数の引き渡しと、戻値の受け取りで他のデータタイプで上手に出来れば問題なさそう。

FFIは文字コードまわりで躓くこともよくあるし。

まぁ難しい場合DB経由でデータの受け渡しすれば良いのでなんとかなるかな。

index のことろから作業再開のための整理。

前回 からかなり間が空いてしまい、すっかり何をしていたのかわからなくなりました。

なので思い出しも含めて整理しました。

現在の状況

以下のような状況だった。

今後の進め方

現状のままだとややこいので残りのテストを書くイシューを立て、このイシューはクローズすることにしました。

<立てたイシュー>

slot-index-multiple のテストを書く #111

Github の Project を作成してみました。

今まで マイルストーンで管理していましたが、 Github に Project 機能(カンバン機能?)が追加されたので それを利用してみることにしました。

これ: Upanihsad Ver 1.0

ちがった

managed-pool/pool.lisp のテストを書く #102 で止っていただけの模様。

おわり

なかなか時間が割けないので思い出し作業の方が多いような気がしてきました。

このあたりも含め早く完了したいものです。

clml.lapack にどんな命令があるのかを眺めてみる。

どんな命令があるのかを眺めてみる。

概要

LAPACK - Wikipedia を利用するためのパッケージの模様。

SciPy(Python用)でも利用しているようなので良い感じ。

どんな命令があるのかを眺めてみる。

エクスポートされているシンボルがLAPACKに存在するか。

エクスポートしているシンボルがindexに存在するか確認してみた。

想像以上に無いものが多い。

最後の一桁数値のものとかはほぼ全滅。

うーむ。。。

Symbol index
DBDSDC o
DBDSQR o
DDISNA o
DGEBAK o
DGEBAL o
DGEBD2 -
DGEBRD o
DGEEV o
DGEEVX o
DGEHD2 -
DGEHRD o
DGELQ2 -
DGELQF o
DGEQR2 -
DGEQRF o
DGESDD o
DGESV o
DGESVD o
DGETF2 -
DGETRF o
DGETRI o
DGETRS o
DHSEQR o
DLABAD -
DLABRD -
DLACON -
DLACPY -
DLADIV -
DLAED6 -
DLAEXC -
DLAHQR -
DLAHRD -
DLALN2 -
DLAMC1 -
DLAMC2 -
DLAMC3 -
DLAMC4 -
DLAMC5 -
DLAMCH o
DLAMRG -
DLANGE -
DLANHS -
DLANST -
DLANV2 -
DLAPY2 -
DLAQTR -
DLARF -
DLARFB -
DLARFG -
DLARFT -
DLARFX -
DLARTG -
DLAS2 -
DLASCL -
DLASD0 -
DLASD1 -
DLASD2 -
DLASD3 -
DLASD4 -
DLASD5 -
DLASD6 -
DLASD7 -
DLASD8 -
DLASDA -
DLASDQ -
DLASDT -
DLASET -
DLASQ1 -
DLASQ2 -
DLASQ3 -
DLASQ4 -
DLASQ5 -
DLASQ6 -
DLASR -
DLASRT -
DLASSQ -
DLASV2 o
DLASWP -
DLASY2 -
DORG2R -
DORGBR o
DORGHR o
DORGL2 -
DORGLQ o
DORGQR o
DORM2R o
DORMBR o
DORML2 -
DORMLQ o
DORMQR o
DTREVC o
DTREXC o
DTRSNA o
DTRTI2 -
DTRTRI o
IEEECK -
ILAENV o

二桁目="LA" のものがかなりないね。

LAPACK では命令の桁ごとに意味が割り当てられています。

こんな感じ。

フォーマット: XYYZZZ

カラム
X 数値データの型を表現
YY サブルーチンが採用するアルゴリズムが想定する行列の型を表現
ZZZ サブルーチンの処理内容を表現

YY のところの種類はマニュアルに定義されています。

しかしそこには LA なるものがありません。

うーんなんだろう。

BLASのほうなのかな。。。

おわり

なんか必要なものだけ実装している雰囲気。

にも LAPACK を利用しているライブラリはあります。

そちらの利用に変更していっても良いのかも。

CLML ってデカいしね。