Version History

This page outlines changes from each release.

v1.0.0 (April 20, 2020)

New Features


  • Refactored the entire package; sasoptpy now has core, abstract, interface, session, and util directories

  • Experimental RESTful API was dropped

  • get_obj_by_name function was removed

  • lso solver was renamed blackbox

  • Because of the use of literal strings (PEP 498), only Python 3.6 or later versions are supported

Bug Fixes

  • Fixed: Arithmetic operations with powers are generating incorrect results

  • Fixed: Variable groups with space in their index are not getting values

  • Fixed: Constraints without directions do not produce an error

  • Fixed: Documentation does not mention conda-forge library requirement

  • Fixed: Single-dimensional parameters are hard to access

v0.2.1 (February 26, 2019)

New Features

  • Support for evaluating nonlinear expressions is added, see Expression.get_value() and utils._evaluate()

  • Support for multiple objectives is added for LSO solver, see Model.set_objective() and Multiobjective example

  • Support for spaces inside variable indices is added

  • Experimental RESTful API is added


  • Dictionaries inside components are replaced with ordered dictionaries to preserve deterministic behavior

  • Math operators are added into the keys of linear coefficient dictionaries

  • Some iterators are rewritten by using the yield keyword for performance

  • key_name and col_names parameters are added into read_table()

Bug Fixes

  • Fixed: Using a single variable as an objective is producing incorrect input

  • Fixed: Expression.get_value() fails to evaluate expressions with operators

  • Fixed: Expression.add() overrides operators in some instances

  • Fixed: Expressions with same components but different operators get summed incorrectly

  • Fixed: New version of Viya complains about pandas.DataFrame column types

  • Syntax fixes for PEP 8 compliance


  • A Jupyter notebook example of the Diet Problem is added

  • A new example is added to show usage of experimental RESTful API

  • Unit tests are added for development repository

  • CI/CD integration is added for the development repository on Gitlab

  • Generated models can be checked by using the hash values inside tests.responses

v0.2.0 (July 30, 2018)

New Features

  • Support for the new runOptmodel CAS action is added

  • Nonlinear optimization model building support is added for both SAS 9.4 and SAS Viya solvers

  • Abstract model building support is added when using SAS Viya solvers

  • New object types, Set, SetIterator, Parameter, ParameterValue, ImplicitVar, ExpressionDict, and Statement are added for abstract model building

  • Model.to_optmodel() method is added for exporting model objects into PROC OPTMODEL code as a string

  • Wrapper functions read_table() and read_data() are added to read CASTable and DataFrame objects into the models

  • Math function wrappers are added

  • _expr and _defn methods are added to all object types for producing OPTMODEL expression and definitions

  • Multiple solutions are now returned when using solveMilp action and can be retrieved by using Model.get_solution() method

  • Model.get_variable_value() is added to get solution values of abstract variables


  • Variable and constraint naming schemes are replaced with OPTMODEL equivalent versions

  • Variables and constraints now preserve the order in which they are inserted to the problem

  • Model.to_frame() method is updated to reflect changes to VariableGroup and ConstraintGroup orderings

  • Two solve methods, solve_on_cas and solve_on_viya are merged into Model.solve()

  • Model.solve() method checks the available CAS actions and uses the runOptmodel action whenever possible

  • As part of the merging process, lp and milp arguments are replaced with options argument in Model.solve() and Model.to_optmodel()

  • An optional argument frame is added to Model.solve() for forcing use of MPS mode and solveLp-solveMilp actions

  • Minor changes are applied to __str__ and __repr__ methods

  • Creation indices for objects are being kept by using the return of the register_name() function

  • Objective constant values are now being passed by using new CAS action arguments when posssible

  • A linearity check is added for models

  • Test folder is added to the repository

Bug Fixes

  • Nondeterministic behavior when generating MPS files is fixed.


  • Abstract and nonlinear models can be solved on Viya only if the runOptmodel action is available on the CAS server.

  • Three new examples are added which demonstrate abstract model building.

  • Some minor changes are applied to the existing examples.

v0.1.2 (April 24, 2018)

New Features


Bug Fixes

  • Fixed: Variables do not appear in MPS files if they are not used in the model

  • Fixed: Model.solve() primalin argument does not pass into options


  • A .gitignore file is added to the repository.

  • A new example is added: Decentralization. Both CAS and SAS versions of the new example are added.

  • There is a known issue with the nondeterministic behavior when creating MPS tables. This will be fixed with a hotfix after the release.

  • A new option (no-ex) is added to makedocs script for skipping examples when building docs.

v0.1.1 (February 26, 2018)

New Features

  • Initial value argument ‘init’ is added for Variable objects

  • Variable.set_init() method is added for variables

  • Initial value option ‘primalin’ is added to Model.solve() method

  • Table name argument ‘name’, table drop option ‘drop’, and replace option ‘replace’ are added to Model.solve() method

  • Decomposition block implementation is rewritten; block numbers does not need to be consecutive and ordered Model.upload_user_blocks()

  • VariableGroup.get_name() and ConstraintGroup.get_name() methods are added

  • Model.test_session() method is added for checking if session is defined for models

  • expr_sum() function is added for faster summation of Expression objects


  • is renamed to

Bug Fixes

  • Fixed: Crash in VG and CG when a key not in the list is called

  • Fixed: get_value of pandas is depreceated

  • Fixed: Variables can be set as temporary expressions

  • Fixed: Ordering in get_solution_table() is incorrect for multiple entries

v0.1.0 (December 22, 2017)

  • Initial release