{"adoption": {"forks": 193, "observed_at": "2026-08-28T04:06:16.913363+00:00", "stars": 2126}, "canonical_url": "https://ross.abutalabs.com/products/cvxpylayers", "card": {"archived": false, "artifact_type": "library", "description": "Differentiable convex optimization layers", "domain": ["machine-learning", "deep-learning", "gpu-computing"], "enriched": true, "function": ["machine-learning", "math", "sdk"], "health_score": 89, "homepage": null, "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["cvxpy/cvxpylayers"], "name": "cvxpy/cvxpylayers", "platform": ["python"], "pushed_at": "2026-05-19T19:53:38+00:00", "repo": "cvxpy/cvxpylayers", "stars": 2126, "tags": ["convex-optimization", "differentiable-optimization", "cvxpy", "pytorch", "jax", "mlx", "optimization-layers", "gpu-acceleration", "algorithms", "gpu"], "topics": [], "urls": [], "use_cases": ["embed a convex optimization problem as a layer in a neural network", "backpropagate through a parametrized convex program in PyTorch or JAX", "solve convex optimization problems on the GPU inside a training loop", "learn parameters of a quadratic program or cone program end-to-end", "build model-predictive control policies that are differentiable", "train models whose forward pass includes a constrained optimization step"], "what_it_is": "CVXPYlayers is a Python library for constructing differentiable convex optimization layers in PyTorch, JAX, and MLX using CVXPY. It solves parametrized convex problems in the forward pass and computes derivatives of the solution with respect to parameters in the backward pass, with GPU acceleration via Moreau and CuClarabel backends.", "when_to_avoid": ["your optimization problem is nonconvex", "you only need to solve convex problems without gradients (plain CVXPY suffices)", "you need discrete or combinatorial optimization layers"], "when_to_choose": ["your model includes a convex optimization step and you need gradients through it", "you want to express problems in CVXPY and use them as differentiable layers", "you need GPU-accelerated convex solving within deep learning frameworks"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/cvxpylayers", "repo": "cvxpy/cvxpylayers", "role": "main", "score": 87}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.913363+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:52:30.626831+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4d55daf30f47e4a00f52e7bb70438e3cca8566b9623e72a63b429766571f1777", "fetched_at": "2026-08-28T04:06:16.913363+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cvxpy/cvxpylayers"}, {"content_hash": "bf71613c0507663a31556bca2eaafa696a7fe9f3053d7949b3ca0795b4e1bd80", "fetched_at": "2026-08-29T10:32:31.966599+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cvxpylayers/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.913363+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:52:30.626831+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4d55daf30f47e4a00f52e7bb70438e3cca8566b9623e72a63b429766571f1777", "fetched_at": "2026-08-28T04:06:16.913363+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cvxpy/cvxpylayers"}, {"content_hash": "bf71613c0507663a31556bca2eaafa696a7fe9f3053d7949b3ca0795b4e1bd80", "fetched_at": "2026-08-29T10:32:31.966599+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cvxpylayers/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:52:30.626831+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4d55daf30f47e4a00f52e7bb70438e3cca8566b9623e72a63b429766571f1777", "fetched_at": "2026-08-28T04:06:16.913363+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cvxpy/cvxpylayers"}, {"content_hash": "bf71613c0507663a31556bca2eaafa696a7fe9f3053d7949b3ca0795b4e1bd80", "fetched_at": "2026-08-29T10:32:31.966599+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cvxpylayers/json"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.913363+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.913363+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.913363+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:52:30.626831+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4d55daf30f47e4a00f52e7bb70438e3cca8566b9623e72a63b429766571f1777", "fetched_at": "2026-08-28T04:06:16.913363+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cvxpy/cvxpylayers"}, {"content_hash": "bf71613c0507663a31556bca2eaafa696a7fe9f3053d7949b3ca0795b4e1bd80", "fetched_at": "2026-08-29T10:32:31.966599+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cvxpylayers/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.913363+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.913363+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:52:30.626831+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4d55daf30f47e4a00f52e7bb70438e3cca8566b9623e72a63b429766571f1777", "fetched_at": "2026-08-28T04:06:16.913363+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cvxpy/cvxpylayers"}, {"content_hash": "bf71613c0507663a31556bca2eaafa696a7fe9f3053d7949b3ca0795b4e1bd80", "fetched_at": "2026-08-29T10:32:31.966599+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cvxpylayers/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.913363+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.913363+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.913363+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:52:30.626831+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4d55daf30f47e4a00f52e7bb70438e3cca8566b9623e72a63b429766571f1777", "fetched_at": "2026-08-28T04:06:16.913363+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cvxpy/cvxpylayers"}, {"content_hash": "bf71613c0507663a31556bca2eaafa696a7fe9f3053d7949b3ca0795b4e1bd80", "fetched_at": "2026-08-29T10:32:31.966599+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cvxpylayers/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.913363+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.913363+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:52:30.626831+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4d55daf30f47e4a00f52e7bb70438e3cca8566b9623e72a63b429766571f1777", "fetched_at": "2026-08-28T04:06:16.913363+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cvxpy/cvxpylayers"}, {"content_hash": "bf71613c0507663a31556bca2eaafa696a7fe9f3053d7949b3ca0795b4e1bd80", "fetched_at": "2026-08-29T10:32:31.966599+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cvxpylayers/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:52:30.626831+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4d55daf30f47e4a00f52e7bb70438e3cca8566b9623e72a63b429766571f1777", "fetched_at": "2026-08-28T04:06:16.913363+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cvxpy/cvxpylayers"}, {"content_hash": "bf71613c0507663a31556bca2eaafa696a7fe9f3053d7949b3ca0795b4e1bd80", "fetched_at": "2026-08-29T10:32:31.966599+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cvxpylayers/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:52:30.626831+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4d55daf30f47e4a00f52e7bb70438e3cca8566b9623e72a63b429766571f1777", "fetched_at": "2026-08-28T04:06:16.913363+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cvxpy/cvxpylayers"}, {"content_hash": "bf71613c0507663a31556bca2eaafa696a7fe9f3053d7949b3ca0795b4e1bd80", "fetched_at": "2026-08-29T10:32:31.966599+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cvxpylayers/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:52:30.626831+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4d55daf30f47e4a00f52e7bb70438e3cca8566b9623e72a63b429766571f1777", "fetched_at": "2026-08-28T04:06:16.913363+00:00", "kind": "readme", "missing": false, "url": "https://github.com/cvxpy/cvxpylayers"}, {"content_hash": "bf71613c0507663a31556bca2eaafa696a7fe9f3053d7949b3ca0795b4e1bd80", "fetched_at": "2026-08-29T10:32:31.966599+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/cvxpylayers/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 83, "longevity": 100, "rhythm": 84}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2502, "days_push": 106, "days_rel": 106, "gap_med": 0, "n_releases_24m": 6}, "score": 87, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}