Hinzufügen vektorisierter ufuncs in scipy.special#
Viele der Funktionen in special sind vektorisierte Versionen von skalaren Funktionen. Die skalaren Funktionen werden von Hand geschrieben und die notwendigen Schleifen für die Vektorisierung werden automatisch generiert. Dieser Abschnitt beschreibt die Schritte, die zur Hinzufügung einer neuen vektorisierten Spezialfunktion erforderlich sind.
Der erste Schritt beim Hinzufügen einer neuen vektorisierten Funktion ist das Schreiben der entsprechenden skalaren Funktion. Dies kann in Cython, C, C++ oder Fortran erfolgen. Wenn Sie bei Null anfangen, ist Cython zu bevorzugen, da der Code für Entwickler, die nur mit Python vertraut sind, leichter zu warten ist. Wenn der primäre Code in Fortran vorliegt, ist es notwendig, einen C-Wrapper um den Code zu schreiben. Beispiele für solche Wrapper finden Sie in specfun_wrappers.c.
Nach der Implementierung der skalaren Funktion registrieren Sie die neue Funktion, indem Sie einen Eintrag zu functions.json hinzufügen. Die Docstring in generate_ufuncs.py erklärt das Format. Fügen Sie auch Dokumentation für die neue Funktion hinzu, indem Sie einen Eintrag zu add_newdocs.py hinzufügen. Suchen Sie im Dateie nach Beispielen.
Beim Schreiben des Parameterabschnitts der Dokumentation für ufuncs sollte der Typ eines Arguments array_like sein. Die Diskussion darüber, ob ein Argument z. B. reell oder komplexwertig sein kann, sollte für die Beschreibung aufbewahrt werden. Wenn wir also beispielsweise die Parameter für die Gamma-Funktion dokumentieren würden, würde das so aussehen
Parameters
----------
z : array_like
Real or complex valued argument
Bei der Dokumentation des Rückgabeabschnitts sollte der Typ des zurückgegebenen Werts scalar oder ndarray sein, da ufuncs Skalare zurückgeben, wenn sie Skalare als Argumente erhalten. Beachten Sie auch, dass die Angabe eines namens für den Rückgabewert optional ist und für Spezialfunktionen oft nicht hilfreich ist. Für die Gamma-Funktion könnten wir also etwas Ähnliches wie dieses haben
Returns
-------
scalar or ndarray
Values of the Gamma function