■■ python sf マニュアル ■■

■■ 目次

■■ 初めに
■■ python sf のインストール
■■ Python sf の概観・実行
■■ Python sf による少し高度な計算
■ ワンライナーでの行列計算
■ 階層構造を持った名前空間
■ sfFnctns.py, basicFnctns, kNumeric.py, vsGrapy.py, raional.py
■ 単位付きの計算
■ octn:oc
■ tlRcGn:tn
■ Python sf 基本数値関数
■ 行列操作 II
■ ClFldTns 一般体を要素とする行列
■ 微分
■ 積分
■ Python sfファイル実行

■■ 初めに

Python sf は計算に特化したソフトです。普段メモ書きしている数式を、そのまま実行できることを理想としています。Python sf は 計算ソフトの L.L.(Light weight Language) です。大部分のエンジニア・研究者が行っている日常計算の九割以上を Python sf のワンライナー数式で扱える・扱えるようにカスタマイズできるでしょう。

Python sf では、多くの場合デバッグなしでエンジニア・研究者が知りたい計算結果の値を得られます。知りたいグラフ表示結果を得られます。エンジニアや研究者がコンピュータに計算させるために、プログラム・コードを書き、そのコードのデバッグをしていたのでは回り道すぎます。そうです。常日頃メモ書きしている数式のまま、コンピュータに計算させるのならばデバッグを省けます。ワン・ライナーの Python sf 式を書くだけで、コンピュータに計算させられます。Python sf ワンライナーには if then else 文を入れません。逐次処理を並べるだけです。ですからデバッグするようなミスは殆ど入りこみません。

例えば、原点にある電荷が作る、(1,2,3) 位置の電場ベクトル値を次の Python sf 式で計算できます。

( (~[`X,`Y,`Z])/norm(~[`X,`Y,`Z]) )(1,2,3)
===============================
[ 0.26726124  0.53452248  0.80178373]
---- ClTensor ----

下は r=[1,0,0] にある電荷が作る、(1,2,3) 位置の電場ベクトル値です。

r=[1,0,0];( (~[`X,`Y,`Z]-r)/norm(~[`X,`Y,`Z]-r) )(1,2,3)
===============================
[ 0.          0.5547002   0.83205029]
---- ClTensor ----
さらに発展させ、[-1,0,0],[1,0,0]の位置に電荷を持つ双極子が作る電場ベクトルの div 値,rot 値 および 3D 分布を下の Python sf 式でコンピュータで計算し、また描かせられます。
# divergence value at (0,0,0)
f=λ r:(~[`X,`Y,`Z] - r)/norm(~[`X,`Y,`Z] - r)^3; `div(f([1,0,0])-f([-1,0,0]) )(0,0,0)
===============================
0.0

# rotation value at (0,0,0)
f=λ r:(~[`X,`Y,`Z] - r)/norm(~[`X,`Y,`Z] - r)^3; `rot(f([1,0,0])-f([-1,0,0]) )(0,0,0)
===============================
[[ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]]
---- ClTensor ----
#  rot はベクトルではなく反対称行列で表します
#  一般の N 次元ベクトル関数でも rot を計算させるためです

# dipole 電場分布の 3D 表示
v=klsp(-2,2,8);f=λ r:(~[`X,`Y,`Z] - r)/norm(~[`X,`Y,`Z] - r)^3;kqvr3d( list(mitr(v,v,v)),f([1,0,0])-f([-1,0,0]) );kmshw()


ここで行っていることは、「行列けベクトル生成:~[...]」、「引数タプルから 0 番目の値を取り出す関数:`X」... などの Python sf 要素を並べ組み合わせて逐次処理させているだけです。線形代数などの数学理論体系が if then else 無しでの記述を可能にします。「x > 0」といった場合分け無しでの記述を可能にしてくれます。これらの逐次処理を並べるだけのコードにはバグが入り込む可能性は殆どありません。常日頃慣れ親しんでいる数式:コードを逐次並べるだけで、デバッグなしでエンジニア・研究者が知りたい値を計算し、見たい 3D グラフを表示させています。

ここで行っているベクトル処理が Python sf の基本要素で行えている点に注目してください。ベクトル解析パッケージのような専用のものを導入するのではなく、シンボル処理をしているのでもなく、Python の数値関数と行列演算と数値微分を組み合わせて行っていることに注目ください。Python, Python sf の記述性の高さに注目ください。

Python sf は既にある Python ライブラリ・パッケージの蓄積を活用することで、Matlab, Mathematica と同等以上の機能を持ちます。scipy, sympy, vpython の三つのパッケージは、Python sf を動かすために必須です。scipy の行列を中心とする数値計パッケージトは Matlab に近い機能を持ちます。sympy パッケージは、シンボリックな数式処理を可能にします。vpython は、高速な 3D グラフ表示のために使っています。

この三つのライブラリ・パッケージを使い、Python 計算プログラム・コードを書きデバッグしているだけでは数値計算ソフトの L.L とは言えません。Python sf では 10000 行を超えるラッパを被せています。これにより Python のアッパー・コンパチでありながら、計算式を短く記述できる、計算ソフトの L.L. に仕上げられました。

┌────────────────┐                                              
│  Python sf                     │                                              
│    sfPPrcssr  一万行以上の     │  ┌────────────────────┐
│               Pre - processor  │  │scipy:  Matlab 相当の数値計算パッケージ │
│                                │  │sympy:  シンボリック数式処理パッケージ  │
│    sfFnctns:.行列の拡張        │  │vpython:3D 表示                         │
│        basicFnctns             │  │mlb:mayavi 2d/3d 表示パッケージ         │
│        kNumeric 微分・積分拡張 │  └────────────────────┘
│        vsGraph 簡便なグラフ表示│  ┌────────────────────┐
│        rational  有理式        │  │既存のーザー側で用意する pythonライブラ │
│    customize.py                │  │リ・パッケージ                          │
│    sfCrrntIni.py               │  └────────────────────┘
│        ユーザー・カスタマイズ  │  ┌────────────────────┐
│    octn.py                     │  │ユーザー側で開発する python             │
│        八元数                  │  │モジュール・パッケージ                  │
│        Bool 体                 │  └────────────────────┘
│        GF(2^8) Galois 体       │                                              
│        Zp, Sn                  │                                              
│                                │                                              
│    tlRcGn                      │                                              
│        無限数列                │                                              
│        末尾再帰                │                                              
│                                │                                              
│    kre 正規表現                │                                              
│                                │                                              
│    kv  kVerifier test library  │                                              
│                                │                                              
└────────────────┘                                              

~[...] で行列やベクトルを生成したり、漢字 :λ を使って Python lamba 構文を表現できるのは pre-processor のおかげです。これにより、Python の名前空間とは独立したユーザー・カスタマイズ可能な変数・関数・演算子を使えるようにしました。数学で多用するギリシャ文字や特殊記号を使えるようにしました。ユーザーの扱う分野にカスタマイズした変数・関数・演算子記号を扱えるようにしました。行列やベクトルを記述する記号を導入できました。数式記述での積演算子 * の省略を可能にしました。

scipy は素晴らしい数値演算パッケージですが、実際に使う上では多くの不満が出てきます。ベクトル・行列計算を普段メモ書きする数式までには簡略化できません。Bool 体などの一般体を要素とする行列も扱えません。微分や多項式などの扱いにも不満が出てきます。計算結果のグラフ表示も、できるだけ簡便に行わせたくなります。これらの不満をプリプロセッサと sfFnctns.py などの追加モジュールを設けて解消しました。

数学ソフトはユーザーごとにカスタマイズして使うソフトです。ユーザーによって必要とされる関数、変数・定数や その意味・記述方法は大きく異なります。理論物理学者と電気回路技術者では、同じ加減乗除算記号を使いますが、その計算内容は全くの別物です。必要される計算機能も共通部分より異なる部分のほうが多いでしょう。この違いの問題は、プリプロセッサを前提とするカスタマイズ専用ファイル:customize.py を設けることで解決しています。

また行列を拡張して、整数・実数・複素数以外の一般の体・環の要素からなる行列も扱えるようにしました。有理式からなるインピーダンス行列・Bool 体多項式なども扱えるようにしました。関数を要素とするベクトルや行列さえも扱えるようにしました。

Python sf は開かれたソフトです。Python で扱える機能の全てを Python sf でも扱えます。Pytho sf の配布ソフトだけでは不足している数学機能があるときは、Python sf とは無関係に全世界で開発されている様々の Python ライブラリ・パッケージをユーザー側でインストールして使ってください。Python sf はアッパー・コンパチであり、それらと矛盾することなく使えます。

また python 自体がユーザー側で容易に機能を追加できる言語でもあります。例えば Python sf が公開している octn.py ソース・ファイルにある Bool 体クラス BF、有限整数体 Zp クラスは 100 行、150 行で書かれています。別の体が必要なときは、ユーザー側で作ってください。octn.py にある BF クラスでの様に、__add__, __mul__ などの四則演算関数を定義してやるだけで、Python sf 側で用意している多項式や行列を勝手、ユーザー作った体クラスのインスタンスを操作できます。

高機能でありながらユーザー・カスタマイズ可能な開かれた L.L. 計算ソフト Python sf を是非とも試してみてください。

python で行列・数値計算なんて遅いんでしょ? <== 十二分に早いよ!

インタプリタである python による数値計算なんて遅くて使い物にならないと思われる方がいるかも知れません。でも それは誤りです。素人の C 実装による計算プログラムでは python nympy の計算スピードに勝てないことのほうが多いでしょう。

Python numpy の行列計算では linpack ライブラリが使われます。カリカリにチューニングされた C の行列計算ライブラリーです。その行列計算速度は、殆ど C で書いた linpack の速度に匹敵します。Python numpy の行列計算で動いているのは、インターフェース部分だけを Python に合わせた C で書かれたコードだからです。

論より証拠! 計算時間を実測してみましょう。

//@@
import numpy as sc
import numpy.linalg as sl
randn = sc.random.randn

#N=1000
N=300
import time
startTimeAt = time.time()
mt=randn(N,N)    # make NxN matrix which element has normal randam value
print "time to make %d x %d random value matrx :"%(N,N),time.time() - startTimeAt

startTimeAt = time.time()
mtInv= sl.inv(mt)
print "time to calculate %d x %d matrx invers:"%(N,N),time.time() - startTimeAt

startTimeAt = time.time()
mt2=   sc.dot(mt, mtInv)
print "time to multiply %d x %d with the inversed matrx:"%(N,N),time.time() - startTimeAt
print mt2
//@@@

実測値: using MSI net book U115
python temp.py
time to make 300 x 300 random value matrx : 0.0160000324249
time to calculate 300 x 300 matrx invers: 0.266000032425
time to multiply 300 x 300 with the inversed matrx: 0.140000104904
[[  1.00000000e+00  -1.99840144e-15   2.10942375e-14 ...,  -1.66533454e-15
   -1.42108547e-14  -8.88178420e-16]
 [  9.99200722e-16   1.00000000e+00  -1.17683641e-14 ...,  -2.13717932e-15
   -6.66133815e-15  -4.99600361e-16]
 [ -1.38777878e-15   2.22044605e-15   1.00000000e+00 ...,  -2.27595720e-15
    4.44089210e-15   6.43929354e-15]
 ..., 
 [ -2.77555756e-16   1.33226763e-15  -1.50990331e-14 ...,   1.00000000e+00
   -1.15463195e-14   3.55271368e-15]
 [  3.10862447e-15  -1.33226763e-14   2.48689958e-14 ...,  -6.21724894e-15
    1.00000000e+00  -3.77475828e-15]
 [ -1.22124533e-15  -1.33226763e-15   5.77315973e-15 ...,   2.55351296e-15
   -4.44089210e-15   1.00000000e+00]]

デスクトップ・パソコン CPU:E7500 だと次のような計算時間です。「一回目」はパソコン立ち上げ直後での実行時間です。二回目は CPU キャッシュに Python sf で使うコードが書き込まれた後の実行時間です。

# E7500 一回目

python temp.py
time to make 300 x 300 random value matrx : 0.0160000324249
time to calculate 300 x 300 matrx invers: 0.31299996376
time to multiply 300 x 300 with the inversed matrx: 0.0150001049042
[[  1.00000000e+00   1.59872116e-14  -2.77555756e-16 ...,   5.68434189e-14
    3.37507799e-14  -1.24344979e-14]
 [  8.88178420e-16   1.00000000e+00  -6.66133815e-16 ...,   7.10542736e-15
   -5.32907052e-15   6.66133815e-16]
 [  2.39808173e-14   2.30926389e-14   1.00000000e+00 ...,   4.61852778e-14
   -2.66453526e-14  -2.26485497e-14]
 ..., 
 [ -5.28466160e-14  -1.15463195e-14  -6.66133815e-16 ...,   1.00000000e+00
    1.46549439e-14  -1.36557432e-14]
 [  1.97619698e-14   5.17363929e-14   1.83186799e-15 ...,   4.26325641e-14
    1.00000000e+00   9.65894031e-15]
 [ -5.01820807e-14  -3.77475828e-14   6.66133815e-15 ...,   1.55431223e-13
    1.82076576e-14   1.00000000e+00]]

copy c:\#####.### temp.py /y
        1 個のファイルをコピーしました。

# E7500 二回目
python temp.py
time to make 300 x 300 random value matrx : 0.0
time to calculate 300 x 300 matrx invers: 0.0309998989105
time to multiply 300 x 300 with the inversed matrx: 0.0
[[  1.00000000e+00   3.77475828e-15   9.54791801e-15 ...,  -3.99680289e-15
    2.22044605e-15   5.99520433e-15]
 [ -2.64233080e-14   1.00000000e+00   1.15463195e-14 ...,  -3.86357613e-14
   -2.17603713e-14  -2.28705943e-14]
 [ -1.59872116e-14  -1.68753900e-14   1.00000000e+00 ...,   1.77635684e-14
    2.13162821e-14   2.57571742e-14]
 ..., 
 [  3.99680289e-15   2.66453526e-15  -8.88178420e-16 ...,   1.00000000e+00
   -3.10862447e-14   1.15463195e-14]
 [ -7.32747196e-15  -1.06581410e-14   9.88098492e-15 ...,   5.55111512e-15
    1.00000000e+00   1.55431223e-15]
 [ -5.21804822e-14  -2.86437540e-14   6.21724894e-15 ...,   4.44089210e-16
   -2.84217094e-14   1.00000000e+00]]

■■ python sf のインストール:python(x,y) Distribution

w

Python sf のインストールは、既に scipy, sympy, vpython, mayavi package がインストールされている環境にあるのならば非常に簡単です。

だけです。レジストリや環境変数を書き換える必要もありません。

Python sf 評価版では、その他に Vc7VrfyMDdRt10D.zip キー・ファイルをカレント・ディレクトリに置く必要があります。

scipy, sympy, vpython, mayavi package がインストールされている環境にある方むけに、Python sf ポータブルの配布をここ:psff_095c.zip:5.5MBに置いてあります。この zip ファイルの中の sf_v095c 以下のファイル全部をユーザーの任意のディレクトリに置けば、それだけで Python sf は動きます。sf_v095c ディレクトリ名は自由に変更可能であり、また USB メモリ上に置くことも可能です。

Python 自体をインストールしていない方、または scipy, sympy, vpython, mayavi package をインストールしたくない方向けに、これらを全て含んだ Python sf のポータブル版もここ:pysf_095cAll.zip:131MBに置いてあります。

この機会に scipy, sympy, vpython, mayavi package も含めて Python をインストールしてみようとされる方には、python(x,y) Distribution を薦めます。先のの四の package が含まれているからです。

なお、mayavi package を使うのは ベクトル分布表示など限られています。グラフ表示などの pylab や vpython などで表示できる大部分の場合は mayavi なしで済みます。

■■ python sf のインストール:Enthought Distribution

Windows Python 2.6/2.5 を前提に、テストしています。Python 2.4 では、一部問題がでます。残念ですが、2010.04.10 現在の評価版では Linux 向けの配布を未だ行っていません。

■ インストール方法

Python sf ではインストーラを設けていません。pythonSf095?.zip を解凍して、できたディレクトリ mtCm をカレント・ディレクトリとすれば動作するからです。mtCm の名前をユーザーの望む名前に変更しても問題ありません。

レジストリや環境変数を操作することもありません。アンインストールは mtCm ディレクトリを消去するだけです。気軽に試してください。

ただし、下の scipy, sympy, vpython の三つ python package がインストールされていることを前提とします。現在の Ehthought の Python distribution には sympy が含まれているので、python をインストールしていない方は、下の二つをインストールすることで Python sf を動かさせるようになります。

  1. EPD for Python2.6;;http://www.enthought.com/products/epd.php
  2. Visual5 ;;http://vpython.org/index.html

別に Enthought の ディストリビューションではなく、別の python2.6(2.5 でも可), scipy, vpython をインストールすれば動きます。

ただし Enthought2.6 packge のインストール後に vpython をインストールするとき numpy をインストールさせないように注意してください。Enthought の方が新しいバージョンの numpy を使っています。vpython の numpy をインストールすると Enthought Python の numpy/scipy 動作の一部がおかしくなります。

■ インストール後のテスト

pythonSf095?.zip を解凍し、また scipy, sympy, vpython が動作する状態になったら、解凍先のディレクトリに移り vfPP.bat を実行すると、現在までに蓄積されたテストが実行されます。

解凍先の kv ディレクトリに kVerifeir テスト・ライブラリの Python sf 専用にしたものが入っています。

■ Python sf 評価版の制限

Python sf の評価版であっても機能の制限は一切ありません。

ただし評価版では動作開始時に無条件に 5秒遅らされ、コピーライト表示されます。

またカレント・ディレクトリにVc7VrfyMDdRt10D.zip ファイルをキーファイルとして置いておく必要があります。このファイルがないと Python sf が動きません。

■ Enthought ライセンスと python sf

Python sf は、ビジネス・ユースを許容している scipy, sympy, vpython のモジュールの存在を前提しているだけであり、膨大な Enthought 配布ソフトを必要としません。たんに Ehthought 配布を利用するとインストールが一番簡単になるために、 Enthought 配布を前提とした説明を書いているだけです。

Python sf をビジネス用途で安価に配布したいときは、無償の Python(x,y) ディストリビューションを使うことを勧めます。

なお、Enthought のディストリビューションはアカデミック・ユース以外は有償のように見えてしまうかもしれませんが、ここに次のように書かれています。「The real intent of the license is to provide a service for those firms who plan on using our bundle of software (EPD) in their commercial operation. Academic and hobbyist use is, and will remain, free.」商売にしないのならばアカデミック・バージョンを使っていいと解釈できると思います。

むしろ、Enthought distribution を多くの人たちに評価してもらい、Enthought.chaco/traits など Engthought が開発したソフトを積極的に活用したビジネスの機会を作り出し、Enthougt にライセンス料を払ってもらうことを目指しているのだと思います。私も そのような機会が増えること願っています。

■■ Python sf の概観・実行

Python sf はコマンド・ラインで動かすソフトです。ユーザーが日常使っているエディタのコンソール・モードに組み込んで使うと便利です。マウスを使うのは 3D グラフ表示結果を視点を変えてみるときなどに限られます。

マウス操作になれた方には違和感があろうかとも思います。この機会にコマンド・ライン操作に慣れることを勧めます。計算処理のためのコンピュータ操作の過程でマウス操作が有利な個所は少ないからです。キーボード上の指先操作で、コンピュータに Python sf 式を与えるのに IDE は必要ありません。IDE よりも手馴れたエディタを使えることの方が重要です。

■ 評価版での機能制限

pythonSf095?.zip で配布している Python sf 評価版の機能は製品版と全く同じです。機能の制限ではなく、動作を遅くさせています。全ての計算で、四秒のディレーを挿入しています。四秒のディレーさえなければ Python sf を使えるとの評価をいただけましたら、有償版の Python sf に切り替えてください。

■ ワンライナーでの実行

Python sf は、テキスト・エディタでメモ書きしているままで計算させることを理想としています。できるだけワンライナーの計算式で実行できるように作ってあります。線形代数を考えれば分かってもらえると思いますが、整理・完成された数学は計算させるときに場合分けすることが少なくなるように出来上がっています。研究・設計で出てくる多くの数学計算は、if then else を必要としません。多くの方にとって、大多数の計算がワンライナーで済んでしまうと思います。というより、ワン・ライナーでできる程度の複雑さの計算を積み重ねで思考を組み立てていくことしかできないのであり、そのように公式や関数を作っていくはずです。

ワンライナーで計算させられることに拘る理由は、計算のためにプログラムやデバッグをしないためです。研究や設計のために、計算ソフトを実行させるのであり、そのために必要な数式を書くだけで計算をさせたいからです。設計・研究のために計算している最中にプログラムやデバッグをさせることは、設計・研究の対象への集中を削ぐことになるからです。ワンライナー式はエディタでのコピー・修正・比較が楽だからです。

もちろん無理やりにワンライナーで記述することは避けるべきです。ワンライナーで計算させるメリットがないだけの複雑さの計算を行うときは、躊躇することなく後に述べるファイル実行に切り替えてください。

ワンライナー実行の具体例

次のように計算させたい Python sf 式を引用符で囲んで、その前に 「python -u sfPP.py」を挿入した文字列をコマンドラインで実行させます。

以下の Python sf 式では、決まりきった「python sfPP "....."」 や 「sfPP.py "...."」を省略して、引用符の内側 .... の部分だけを書いていきます。下のように左上に「sf expression」と書いてあるワンライナーの Python sf 式は、この意味に解釈ください。

3+4
===============================
Z7
コマンド実行

本稿では、Python sf ワンライナーを「微細構造定数;;`eQ^2/(h`` c` 4 `π ε0`)」のように書いていきます。これは「;;」以降の文字列を取り出して引用符で囲み、「python sfPP.py " Q^2/(h`` c` 4 `π ε0`)"」とコマンド・ラインで実行させることを意味しています。コメント部分「微細構造定数;;」なしの Python sf 式だけでも使います。私自身は、そのような WZ エディタのマクロを組んで、ctrl + O + C 操作で、引用符の追加など、何時も行う文字列処理をエディタ・マクロで実行させています。できましたら、お使いのエディタのコンソール・モードにそのようなマクロを組み込んで Python sf を使ってください。

エディタのコンソール・モードを使わずに、取り急ぎコードをテスト実行させたいときにはPython sf 式、すなわち「;;」以降の文字列を " ... " と引用符で囲み、その前に「python sfPP.py 」文字列を追加した文字列をエディタで作り、dos のコマンド・ラインに copy and paste し直して実行させてください。クリップ・ボードにあるコピーされた文字列は、dos 画面で「alt + space → e → p 」操作だけで dos 画面に貼り付けられます。

vim script

上で述べた python sf 式の文字列からをワンライナー実行させる vim scriptを作ってこちらに公開してあります。Vimmer の方はこちらを御試しください。

kidlelib

上で述べた python sf 式の文字列からをワンライナー実行させる python プログラムを作ってあります。Python の作者 Guido が作った idle library を修正を加えて、コンソール画面を追加したものを作りました。pythonSf095?.zip の中に kidlelib ディレクトリ以下に python source があります。これを実行させる kidle.py は mtCm カレント・ディレクトリにあります。mtCm カレント・ディレクトリの DOS 窓から下の様に立ち上げます。

start python kidle.py


ここで「Untitled エディタ画面」画面上にメモを書いていきます。Python sf 式を書いた行にカーソルを置いておき、「alt + p -->C」操作をすると、そのカーソル行にある文字列を python sf 式とみなして「python -u sfPP.py "..."」で囲み「コンソール・ウィンドウ」側に貼り付けて実行させます。


その実行結果は次のようになります。


■ Python sf による簡潔な計算

Python sf プリプロセッサを介すことで、計算式を簡便に・日常使っててるメモ書きの数式と殆ど同じ形式で書けます。

  1. 数学での積:*演算子の省力を可能にします
  2. 数学で多用されるギリシャ文字を使えるようにします。
  3. 記号∇□∂△を使えるようにします。
  4. 「`」文字を変数名の前後に追加できるようにして、名前文字列に使える範囲を拡張します。
  5. Python の lambda 構文で λ 文字を使えるようにします
  6. 「~」を演算子記号の前に追加できるようにして、演算子を拡張します
  7. =:, := によりファイル変数の読み書きを行います

Python はプログラム一般を記述するための言語です。そのため Python で記述した計算式は冗長になってしまいます。

例えば 12Hz 複素振動の時刻 0.1sec における複素振幅は、下の Python code を使って計算できます。

//@@
import numpy as sc
t = 0.1 # second
f= 12   # Hz
print sc.exp(1j* 2 * sc.pi * f * t)
//@@@
(0.309016994375+0.951056516295j)

この python コードは次の点で冗長です。

  1. exp(..) 関数のように基本的な関数は「import numpy as sc」のようなモジュール取り込み文無しで使えることが望ましい。基本数値関数は初めから組み込まれているべき。
  2. pi のような計算で頻繁に出てくる定数も、「import numpy as sc」のようなモジュール取り込み文無しで使えることが望ましい。組み込み定数とすべき。
  3. 「# second, # Hz」のコメント文を一々書くのも面倒だが、これを省くと、コードのドキュメント性が悪くなってしまう。コメントの無いコードだけからでは、何を計算させているのかが極端に読み取りにくくなる。単位系も計算ソフトに組み込まれていれば、コード自体でコメントを付けたときと同程度のドキュメント製を持たせられる。
  4. 日常での数式の書き方のように、積の * 演算子は省略可能にしたい。
  5. 虚数記号 1j は、できることなら数学で使う i を使いたい。
  6. 人間に計算結果を知らせるには print 文は必須だ。でも逆に省けないのならば、必ず print 文が存在する。ならばデフォルトで print 文が存在するように計算機側が振舞うべき。

Python code には、上のような冗長性があるとしても、Python で記述する限りは、上の改善すべき問題に対処する方法はありません。

Python sf ならば、これらの冗長さを回避した次のような簡潔なワンライナーの計算式で同じことを行わせられます。

t,f=0.1,12; exp(`i 2 pi f t)
===============================
(0.309016994375+0.951056516295j)