メモ
最後へジャンプして、完全なサンプルコードをダウンロードするか、JupyterLite や Binder を介してブラウザでこのサンプルを実行できます
スクリプト内の関数名の特定#
これは、Sphinx-Gallery でいつ次を特定するかを示すデモです。
コードブロックで関数/メソッド/属性/オブジェクトが使用されるか、クラスがインスタンス化された場合
テキストブロックでスフィンクスのマークアップを使用して関数/メソッド/属性/オブジェクト/クラスが参照される場合。
Sphinx-Gallery は、実行されるコード自体と、これらの参照についてテキストブロック(このようなテキストブロックや、その下にあるテキストブロック)を調べ、それらが属するモジュールを特定します。つまり、 numpy.sin
と numpy.exp
をここで書くことで、コードでは使用されていなくても特定されます。これは、関数がクラスを返した場合(明示的にインスタンス化されないという意味です)、特に役立ちます。それらを使用するサンプルの文書化されたブロックに追加すると、それらはバックレファレンスに追加されます。
この機能は、コードにドキュメントのハイパーリンクを追加するため(サンプルにインタースフィンクスのリンクを追加する)、ミニギャラリーを作成するため(API ドキュメント用のミニギャラリーを追加する)に使用されます。
# Code source: Óscar Nájera
# License: BSD 3 clause
import os.path as op # noqa, analysis:ignore
import matplotlib.pyplot as plt
import sphinx_gallery
from sphinx_gallery.backreferences import _make_ref_regex, identify_names
from sphinx_gallery.py_source_parser import split_code_and_text_blocks
filename = "plot_6_function_identifier.py"
if not op.exists(filename):
filename = (
__file__
if "__file__" in locals()
else op.join(op.dirname(sphinx_gallery.__path__[0]), "examples", filename)
)
_, script_blocks = split_code_and_text_blocks(filename)
names = identify_names(script_blocks, _make_ref_regex())
上記のコードブロックでは、内部関数 identify_names
を使用して、このファイルから特定されたすべての名前とその完全な解決されたインポートパスを取得しています。次にこれを以下にプロットします。特定された名前の関数は左側に、完全な解決されたインポートパスは右側に示されます。
fontsize = 12.5
figheight = 3 * len(names) * fontsize / 72
fig, ax = plt.subplots(figsize=(7.5, figheight))
ax.set_visible(False)
for i, (name, obj) in enumerate(names.items(), 1):
fig.text(
0.48,
1 - i / (len(names) + 1),
name,
ha="right",
va="center",
size=fontsize,
transform=fig.transFigure,
bbox=dict(boxstyle="square", fc="w", ec="k"),
)
fig.text(
0.52,
1 - i / (len(names) + 1),
obj[0]["module"],
ha="left",
va="center",
size=fontsize,
transform=fig.transFigure,
bbox=dict(boxstyle="larrow,pad=0.1", fc="w", ec="k"),
)
plt.show()

スクリプトの合計実行時間: (0 分 0.732 秒)
想定メモリ使用量: 176 MB