py/matplotlib, py/matplotlib/pyplot

This commit is contained in:
xushiwei
2024-05-19 00:50:09 +08:00
parent 63e678928b
commit ac71a45b3b
4 changed files with 12995 additions and 3 deletions

View File

@@ -81,7 +81,7 @@ func main() {
log.Printf("import module %s failed\n", pyLib) log.Printf("import module %s failed\n", pyLib)
os.Exit(1) os.Exit(1)
} }
pkg := gogen.NewPackage("", pyLib, nil) pkg := gogen.NewPackage("", pkgName(pyLib), nil)
pkg.Import("unsafe").MarkForceUsed(pkg) // import _ "unsafe" pkg.Import("unsafe").MarkForceUsed(pkg) // import _ "unsafe"
py := pkg.Import("github.com/goplus/llgo/py") // import "github.com/goplus/llgo/py" py := pkg.Import("github.com/goplus/llgo/py") // import "github.com/goplus/llgo/py"
@@ -115,6 +115,13 @@ func main() {
pkg.WriteTo(os.Stdout) pkg.WriteTo(os.Stdout)
} }
func pkgName(pyLib string) string {
if pos := strings.LastIndexByte(pyLib, '.'); pos >= 0 {
return pyLib[pos+1:]
}
return pyLib
}
type context struct { type context struct {
pkg *gogen.Package pkg *gogen.Package
obj *types.Named obj *types.Named
@@ -127,7 +134,7 @@ type context struct {
func (ctx *context) genMod(pkg *gogen.Package, mod *module) { func (ctx *context) genMod(pkg *gogen.Package, mod *module) {
for _, sym := range mod.Items { for _, sym := range mod.Items {
switch sym.Type { switch sym.Type {
case "builtin_function_or_method", "function", "ufunc", "method-wrapper": case "builtin_function_or_method", "function", "method", "ufunc", "method-wrapper":
ctx.genFunc(pkg, sym) ctx.genFunc(pkg, sym)
case "str", "float", "bool", "type", "dict", "tuple", "list", "object", "module", case "str", "float", "bool", "type", "dict", "tuple", "list", "object", "module",
"int", "set", "frozenset", "flags", "bool_", "pybind11_type", "layout", "int", "set", "frozenset", "flags", "bool_", "pybind11_type", "layout",
@@ -211,7 +218,7 @@ func genName(name string, idxDontTitle int) string {
} }
name = strings.Join(parts, "") name = strings.Join(parts, "")
switch name { switch name {
case "default", "func", "var", "": case "default", "func", "var", "range", "":
name += "_" name += "_"
} }
return name return name

372
py/matplotlib/gen.go Normal file
View File

@@ -0,0 +1,372 @@
package matplotlib
import (
_ "unsafe"
"github.com/goplus/llgo/py"
)
const LLGoPackage = "py.matplotlib"
// Returns a new subclass of tuple with named fields.
//
// >>> Point = namedtuple('Point', ['x', 'y'])
// >>> Point.__doc__ # docstring for the new class
// 'Point(x, y)'
// >>> p = Point(11, y=22) # instantiate with positional args or keywords
// >>> p[0] + p[1] # indexable like a plain tuple
// 33
// >>> x, y = p # unpack like a regular tuple
// >>> x, y
// (11, 22)
// >>> p.x + p.y # fields also accessible by name
// 33
// >>> d = p._asdict() # convert to a dictionary
// >>> d['x']
// 11
// >>> Point(**d) # convert from a dictionary
// Point(x=11, y=22)
// >>> p._replace(x=100) # _replace() is like str.replace() but targets named fields
// Point(x=100, y=22)
//
//go:linkname Namedtuple py.namedtuple
func Namedtuple(typename *py.Object, fieldNames *py.Object) *py.Object
// Parse the given version string.
//
// >>> parse('1.0.dev1')
// <Version('1.0.dev1')>
//
// :param version: The version string to parse.
// :raises InvalidVersion: When the version string is not a valid version.
//
//go:linkname ParseVersion py.parse_version
func ParseVersion(version *py.Object) *py.Object
// Convert dictview objects to list. Other inputs are returned unchanged.
//
//go:linkname SanitizeSequence py.sanitize_sequence
func SanitizeSequence(data *py.Object) *py.Object
// Configure Matplotlib's logging levels.
//
// Matplotlib uses the standard library `logging` framework under the root
// logger 'matplotlib'. This is a helper function to:
//
// - set Matplotlib's root logger level
// - set the root logger handler's level, creating the handler
// if it does not exist yet
//
// Typically, one should call “set_loglevel("info")“ or
// “set_loglevel("debug")“ to get additional debugging information.
//
// Users or applications that are installing their own logging handlers
// may want to directly manipulate “logging.getLogger('matplotlib')“ rather
// than use this function.
//
// Parameters
// ----------
// level : {"notset", "debug", "info", "warning", "error", "critical"}
//
// The log level of the handler.
//
// Notes
// -----
// The first time this function is called, an additional handler is attached
// to Matplotlib's root handler; this handler is reused every time and this
// function simply manipulates the logger and handler's level.
//
//go:linkname SetLoglevel py.set_loglevel
func SetLoglevel(level *py.Object) *py.Object
// Return the string path of the configuration directory.
//
// The directory is chosen as follows:
//
// 1. If the MPLCONFIGDIR environment variable is supplied, choose that.
// 2. On Linux, follow the XDG specification and look first in
// “$XDG_CONFIG_HOME“, if defined, or “$HOME/.config“. On other
// platforms, choose “$HOME/.matplotlib“.
// 3. If the chosen directory exists and is writable, use that as the
// configuration directory.
// 4. Else, create a temporary directory, and use it as the configuration
// directory.
//
//go:linkname GetConfigdir py.get_configdir
func GetConfigdir() *py.Object
// Return the string path of the cache directory.
//
// The procedure used to find the directory is the same as for
// `get_configdir`, except using “$XDG_CACHE_HOME“/“$HOME/.cache“ instead.
//
//go:linkname GetCachedir py.get_cachedir
func GetCachedir() *py.Object
// Return the path to Matplotlib data.
//
//go:linkname GetDataPath py.get_data_path
func GetDataPath() *py.Object
// Get the location of the config file.
//
// # The file location is determined in the following order
//
// - “$PWD/matplotlibrc“
// - “$MATPLOTLIBRC“ if it is not a directory
// - “$MATPLOTLIBRC/matplotlibrc“
// - “$MPLCONFIGDIR/matplotlibrc“
// - On Linux,
// - “$XDG_CONFIG_HOME/matplotlib/matplotlibrc“ (if “$XDG_CONFIG_HOME“
// is defined)
// - or “$HOME/.config/matplotlib/matplotlibrc“ (if “$XDG_CONFIG_HOME“
// is not defined)
//
// - On other platforms,
// - “$HOME/.matplotlib/matplotlibrc“ if “$HOME“ is defined
// - Lastly, it looks in “$MATPLOTLIBDATA/matplotlibrc“, which should always
// exist.
//
//go:linkname MatplotlibFname py.matplotlib_fname
func MatplotlibFname() *py.Object
// Construct a `RcParams` instance from the default Matplotlib rc file.
//
//go:linkname RcParams py.rc_params
func RcParams(failOnError *py.Object) *py.Object
// Construct a `RcParams` from file *fname*.
//
// Parameters
// ----------
// fname : str or path-like
//
// A file with Matplotlib rc settings.
//
// fail_on_error : bool
//
// If True, raise an error when the parser fails to convert a parameter.
//
// use_default_template : bool
//
// If True, initialize with default parameters before updating with those
// in the given file. If False, the configuration class only contains the
// parameters specified in the file. (Useful for updating dicts.)
//
//go:linkname RcParamsFromFile py.rc_params_from_file
func RcParamsFromFile(fname *py.Object, failOnError *py.Object, useDefaultTemplate *py.Object) *py.Object
// Set the current `.rcParams`. *group* is the grouping for the rc, e.g.,
// for “lines.linewidth“ the group is “lines“, for
// “axes.facecolor“, the group is “axes“, and so on. Group may
// also be a list or tuple of group names, e.g., (*xtick*, *ytick*).
// *kwargs* is a dictionary attribute name/value pairs, e.g.,::
//
// rc('lines', linewidth=2, color='r')
//
// sets the current `.rcParams` and is equivalent to::
//
// rcParams['lines.linewidth'] = 2
// rcParams['lines.color'] = 'r'
//
// The following aliases are available to save typing for interactive users:
//
// ===== =================
// Alias Property
// ===== =================
// 'lw' 'linewidth'
// 'ls' 'linestyle'
// 'c' 'color'
// 'fc' 'facecolor'
// 'ec' 'edgecolor'
// 'mew' 'markeredgewidth'
// 'aa' 'antialiased'
// ===== =================
//
// Thus you could abbreviate the above call as::
//
// rc('lines', lw=2, c='r')
//
// Note you can use python's kwargs dictionary facility to store
// dictionaries of default parameters. e.g., you can customize the
// font rc as follows::
//
// font = {'family' : 'monospace',
// 'weight' : 'bold',
// 'size' : 'larger'}
// rc('font', **font) # pass in the font dict as kwargs
//
// This enables you to easily switch between several configurations. Use
// “matplotlib.style.use('default')“ or :func:`~matplotlib.rcdefaults` to
// restore the default `.rcParams` after changes.
//
// Notes
// -----
// Similar functionality is available by using the normal dict interface, i.e.
// “rcParams.update({"lines.linewidth": 2, ...})“ (but “rcParams.update“
// does not support abbreviations or grouping).
//
//go:linkname Rc py.rc
func Rc(group *py.Object) *py.Object
// Restore the `.rcParams` from Matplotlib's internal default style.
//
// Style-blacklisted `.rcParams` (defined in
// “matplotlib.style.core.STYLE_BLACKLIST“) are not updated.
//
// See Also
// --------
// matplotlib.rc_file_defaults
//
// Restore the `.rcParams` from the rc file originally loaded by
// Matplotlib.
//
// matplotlib.style.use
//
// Use a specific style file. Call ``style.use('default')`` to restore
// the default style.
//
//go:linkname Rcdefaults py.rcdefaults
func Rcdefaults() *py.Object
// Restore the `.rcParams` from the original rc file loaded by Matplotlib.
//
// Style-blacklisted `.rcParams` (defined in
// “matplotlib.style.core.STYLE_BLACKLIST“) are not updated.
//
//go:linkname RcFileDefaults py.rc_file_defaults
func RcFileDefaults() *py.Object
// Update `.rcParams` from file.
//
// Style-blacklisted `.rcParams` (defined in
// “matplotlib.style.core.STYLE_BLACKLIST“) are not updated.
//
// Parameters
// ----------
// fname : str or path-like
//
// A file with Matplotlib rc settings.
//
// use_default_template : bool
//
// If True, initialize with default parameters before updating with those
// in the given file. If False, the current configuration persists
// and only the parameters specified in the file are updated.
//
//go:linkname RcFile py.rc_file
func RcFile(fname *py.Object) *py.Object
// Return a context manager for temporarily changing rcParams.
//
// The :rc:`backend` will not be reset by the context manager.
//
// rcParams changed both through the context manager invocation and
// in the body of the context will be reset on context exit.
//
// Parameters
// ----------
// rc : dict
//
// The rcParams to temporarily set.
//
// fname : str or path-like
//
// A file with Matplotlib rc settings. If both *fname* and *rc* are given,
// settings from *rc* take precedence.
//
// See Also
// --------
// :ref:`customizing-with-matplotlibrc-files`
//
// Examples
// --------
// Passing explicit values via a dict::
//
// with mpl.rc_context({'interactive': False}):
// fig, ax = plt.subplots()
// ax.plot(range(3), range(3))
// fig.savefig('example.png')
// plt.close(fig)
//
// Loading settings from a file::
//
// with mpl.rc_context(fname='print.rc'):
// plt.plot(x, y) # uses 'print.rc'
//
// Setting in the context body::
//
// with mpl.rc_context():
// # will be reset
// mpl.rcParams['lines.linewidth'] = 5
// plt.plot(x, y)
//
//go:linkname RcContext py.rc_context
func RcContext(rc *py.Object, fname *py.Object) *py.Object
// Select the backend used for rendering and GUI integration.
//
// If pyplot is already imported, `~matplotlib.pyplot.switch_backend` is used
// and if the new backend is different than the current backend, all Figures
// will be closed.
//
// Parameters
// ----------
// backend : str
//
// The backend to switch to. This can either be one of the standard
// backend names, which are case-insensitive:
//
// - interactive backends:
// GTK3Agg, GTK3Cairo, GTK4Agg, GTK4Cairo, MacOSX, nbAgg, QtAgg,
// QtCairo, TkAgg, TkCairo, WebAgg, WX, WXAgg, WXCairo, Qt5Agg, Qt5Cairo
//
// - non-interactive backends:
// agg, cairo, pdf, pgf, ps, svg, template
//
// or a string of the form: ``module://my.module.name``.
//
// Switching to an interactive backend is not possible if an unrelated
// event loop has already been started (e.g., switching to GTK3Agg if a
// TkAgg window has already been opened). Switching to a non-interactive
// backend is always possible.
//
// force : bool, default: True
//
// If True (the default), raise an `ImportError` if the backend cannot be
// set up (either because it fails to import, or because an incompatible
// GUI interactive framework is already running); if False, silently
// ignore the failure.
//
// See Also
// --------
// :ref:`backends`
// matplotlib.get_backend
// matplotlib.pyplot.switch_backend
//
//go:linkname Use py.use
func Use(backend *py.Object) *py.Object
// Return the name of the current backend.
//
// See Also
// --------
// matplotlib.use
//
//go:linkname GetBackend py.get_backend
func GetBackend() *py.Object
// Set whether to redraw after every plotting command (e.g. `.pyplot.xlabel`).
//
//go:linkname Interactive py.interactive
func Interactive(b *py.Object) *py.Object
// Return whether to redraw after every plotting command.
//
// .. note::
//
// This function is only intended for use in backends. End users should
// use `.pyplot.isinteractive` instead.
//
//go:linkname IsInteractive py.is_interactive
func IsInteractive() *py.Object

Binary file not shown.

12613
py/matplotlib/pyplot/gen.go Normal file

File diff suppressed because it is too large Load Diff