{"categories":[{"label":"Scientific/Engineering","url":"https://skillfed.io/packages/category/scientific-engineering/6"},{"label":"Mathematics","url":"https://skillfed.io/packages/category/scientific-engineering-mathematics/3"}],"enrichment":{"capability":"A wrapper around scipy's optimize.minimize and optimize.root that adds progress bars, early stopping, flattened keyword arguments, and a unified callback API across different optimization methods.","skillfed_tags":["optimization-wrapper","scipy-convenience","parallel-search"],"use_cases":["Minimize a function with a live progress bar to monitor convergence without blocking output.","Run the same callback logic across minimize, root, and basinhopping without rewriting for each method's signature.","Optimize a triple-fused objective that computes value, gradient, and Hessian together, avoiding redundant computation.","Search for the global minimum by launching many local optimizations in parallel from random starting points.","Stop an optimization early when a target loss is reached, returning the best result so far."],"what_it_does":"better_optimize is a convenience layer over scipy's optimization routines that reduces boilerplate and adds visibility into long-running solves. It replaces scipy's nested `options` dictionaries with flat keyword arguments, normalizes callback signatures across different optimizers (minimize, root, basinhopping, differential_evolution), and provides optional rich progress bars showing iteration counts, elapsed time, objective values, and gradient/Hessian norms. It also handles fused objective functions that return multiple values (loss, gradient, Hessian) together, caching intermediate results to avoid redundant computation.\n\nThe package includes multi_optimize for parallel optimization from multiple starting points using different initialization strategies (uniform, normal, Sobol, Latin hypercube) and backends (sequential, loky, threading). It depends on numpy, scipy, rich, joblib, pandas, and threadpoolctl. Early stopping is supported by raising StopOptimization from a callback, and all results are standard scipy OptimizeResult objects, so downstream code needs no changes.","worth_installing":"Yes, if you regularly use scipy's optimize functions and want cleaner syntax, progress visibility, and unified callbacks. The low install friction, active maintenance, permissive license, and zero known vulnerabilities make it a safe addition. Best suited for interactive work and research; production code that calls scipy directly may not need the wrapper overhead."},"id":"better-optimize","links":{"html":"https://skillfed.io/packages/better-optimize","md":"https://skillfed.io/packages/better-optimize.md","pypi":"https://pypi.org/project/better-optimize/"},"maintenance":{"status":"active"},"meta":{"latest_release":"2026-05-23","license_spdx":null,"license_treatment":"permissive","name":"better-optimize","python_support":"supports_current","summary":"A drop-in replacement for scipy optimize functions with quality of life improvements"},"popularity":{"monthly_downloads":206389,"position":9574,"tier":"top_15000"},"security":{"n_vulnerabilities":0},"version":"0.4.2"}
