NCVX (NonConVeX) is a user-friendly and scalable python package for solving general nonconvex, especially nonsmooth and constrained problems. The initial release of NCVX contains the solver PyGRANSO, a PyTorch-enabled port of GRANSO incorporating auto-differentiation, GPU acceleration, tensor input, and support for new QP solvers. As a highlight, PyGRANSO can solve general constrained deep learning problems, the first of its kind.

NCVX Home Page: https://ncvx.org

Our paper is available at https://arxiv.org/abs/2111.13984.

Get the Code

The source code is available in the PyGRANSO Repository.

Update Logs

Version: 1.0.0 — 2021-12-27

  • Description: initial public release of PyGRANSO.

  • Main features: auto-differentiation, GPU acceleration, tensor input, scalable QP solver, and zero dependency on proprietary packages. Multiple new examples added.


We would like to thank Frank E. Curtis and Michael L. Overton for their involvement in creating the BFGS-SQP algorithm that is implemented in the software package GRANSO. This work was supported by UMII Seed Grant Program and NSF CMMI 2038403.


For questions or bug reports, please either:
  • raise issues in the PyGRANSO Repository or

  • send an email to:

    • Buyun Liang (liang664 an_at_symbol umn a_dot_symbol edu)

    • Tim Mitchell (tim an_at_symbol timmitchell a_dot_symbol com)

    • Ju Sun (jusun an_at_symbol umn a_dot_symbol edu)

Also, we are always looking for contributors and collaborators.