しばらく python から離れていたのが、 久しぶりにやってみたら意外と面白かった。 typing を付けたり pyi を自動生成するのが好きなのである。

最低ラインが 3.11 に上がった

linux に最初から入っているバージョンと blender-4.1 のバージョンが、 python-3.11 まできた。

:::info genntoo は 2024.6 から python-3.12 になると eselect news が来た。 :::

python-3.11 から match 文が入っているので これより下だと書き方が変わってつらいのだ。

cgypes に typing が効くようになっていた

int_array: ctypes.Array[ctypes.c_int] = (ctypes.c_int * 500)()

generic なコレクションも記述できた

from typing import TypeVar, Type
T = TypeVar('T')


def make_generic_list(t: Type[T])->list[T]:
  return []

str_list = make_generic_list(str)

これはいいとして、

from typing import TypeVar, Type, Generic
T = TypeVar('T')


class GenericCollection(Generic[T]):
  def __init__(self, t: Type[T]):
    pass

str_collection = GenericCollection(str)

というようなのもできた。 pyright がんばっているなー。

Literal Union が enum より使いやすい

TypeScript で LiteralUnion の話があって?だったのだけど、 納得した。

dataclass がよい

field を明示できてよい。 昔は明示するために __slots__ に書いてみたりしてた。

pysdl6 に pyi が付属している

enum 的なところとか一部 # type: ignore が必要だが、 おおむねいける。

vulkan できそう

https://github.com/realitix/vulkan

と pysdl6 を組合せて三角形が出せた。

python + 3dcg は imgui を模索していたのだけど、

毎フレーム描画を python でやるのは、 ちょっと遅すぎで厳しい感じだった。 qt と合体すれば 変更時のみの rendering にはるので ツールならいけそうかなと。

blender bpy の rna から pyi を生成してみた

python の native module から pyi を生成するときに __doc__ からの生成がよく使われる。 ライブラリーによって __doc__ の記述に一貫性が無いので、 そのライブラリー専用でテキストから情報を抽出する。 blender では、mathutilsbmesh で微妙に変える必要がある。 native module 向けの型情報埋め込み仕様ができるのを待っている。 bpy とか usd と language-server の連携が飛躍的に良くなるはずじゃ。