From f524387728a665e42e16fd31a3fe40e5f2b5b20c Mon Sep 17 00:00:00 2001 From: Stuart Mitchell Date: Tue, 9 Jun 2015 23:05:47 +1200 Subject: [PATCH 1/5] travis auto deploy to pypi --- .travis.yml | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index 56e36c2..025d31c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,20 +1,22 @@ language: python python: - - "2.6" - - "2.7" - - "3.2" - - "3.3" - - "3.4" - # does not have headers provided, please ask https://launchpad.net/~pypy/+archive/ppa - # maintainers to fix their pypy-dev package. - - "pypy" -before_install: - - sudo apt-get update -qq - - sudo apt-get install -qq glpk - #- pip install glpk - #- sudo apt-get install coinor-cbc -# command to install dependencies +- '2.6' +- '2.7' +- '3.2' +- '3.3' +- '3.4' +- pypy +before_install: +- sudo apt-get update -qq +- sudo apt-get install -qq glpk install: - - pip install . -# command to run tests -script: pulptest \ No newline at end of file +- pip install . +script: pulptest +deploy: + provider: pypi + user: StuartMitchell + password: + secure: SVUU0MC4tLFS0EWqybpjWHKHumZ0qB6quhkvvx0pyfn4h6CIgZqhuWdSD/PJomlZp+dfqdQUVq3Tzl50UwQFG4OcBORJ+fVjxGJPkO5dpFsvtoNfBRNV9ZkYzMUx0djXxFKK2sVNqgI2O2sDvZk4eHDD09+mKtoSZ5XeT68Vqno= + on: + tags: true + repo: coin-or/pulp From ccabe8a2cdb12a33d9c82f5655a46578136cae74 Mon Sep 17 00:00:00 2001 From: Stuart Mitchell Date: Wed, 10 Jun 2015 00:16:00 +1200 Subject: [PATCH 2/5] documentation building hopefully travis will do it now --- .travis.yml | 3 ++ README.md | 2 +- bootstrap.py | 124 --------------------------------------------------- buildout.cfg | 14 ------ setup.cfg | 7 +++ solvers.cfg | 21 --------- 6 files changed, 11 insertions(+), 160 deletions(-) delete mode 100644 bootstrap.py delete mode 100644 buildout.cfg create mode 100644 setup.cfg delete mode 100644 solvers.cfg diff --git a/.travis.yml b/.travis.yml index 025d31c..e0426fa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,9 @@ before_install: install: - pip install . script: pulptest +before_deploy: +- sudo apt-get install texlive-latex-extra +- sudo apt-get install dvipng deploy: provider: pypi user: StuartMitchell diff --git a/README.md b/README.md index 447451b..9d4c529 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ solver executable. See the examples directory for examples. -PuLP requires Python >= 2.5. +PuLP requires Python >= 2.6. The examples use the default solver (cbc), to use other solvers they must be available. diff --git a/bootstrap.py b/bootstrap.py deleted file mode 100644 index 354a661..0000000 --- a/bootstrap.py +++ /dev/null @@ -1,124 +0,0 @@ -############################################################################## -# -# Copyright (c) 2006 Zope Corporation and Contributors. -# All Rights Reserved. -# -# This software is subject to the provisions of the Zope Public License, -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -# FOR A PARTICULAR PURPOSE. -# -############################################################################## -"""Bootstrap a buildout-based project - -Simply run this script in a directory containing a buildout.cfg. -The script accepts buildout command-line options, so you can -use the -c option to specify an alternate configuration file. - -$Id$ -""" - -import os, shutil, sys, tempfile -try: - from urllib.request import urlopen -except ImportError: - from urllib2 import urlopen -from optparse import OptionParser - -tmpeggs = tempfile.mkdtemp() - -is_jython = sys.platform.startswith('java') - -# parsing arguments -parser = OptionParser() -parser.add_option("-v", "--version", dest="version", - help="use a specific zc.buildout version") -parser.add_option("-d", "--distribute", - action="store_true", dest="distribute", default=False, - help="Use Disribute rather than Setuptools.") - -options, args = parser.parse_args() - -if options.version is not None: - VERSION = '==%s' % options.version -else: - VERSION = '' - -USE_DISTRIBUTE = options.distribute -args = args + ['bootstrap'] - -to_reload = False -try: - import pkg_resources - if not hasattr(pkg_resources, '_distribute'): - to_reload = True - raise ImportError -except ImportError: - ez = {} - if USE_DISTRIBUTE: - exec(urlopen('http://python-distribute.org/distribute_setup.py' - ).read(), ez) - ez['use_setuptools'](to_dir=tmpeggs, download_delay=0, no_fake=True) - else: - try: - exec(urlopen('http://peak.telecommunity.com/dist/ez_setup.py') - .read(), ez) - except SyntaxError: - exec(urlopen('http://python-distribute.org/distribute_setup.py') - .read(), ez) - ez['use_setuptools'](to_dir=tmpeggs, download_delay=0) - - if to_reload: - try: - reload(pkg_resources) - except NameError: # distribute is deprecated by now - pass - else: - import pkg_resources - -if sys.platform == 'win32': - def quote(c): - if ' ' in c: - return '"%s"' % c # work around spawn lamosity on windows - else: - return c -else: - def quote (c): - return c - -cmd = 'from setuptools.command.easy_install import main; main()' -ws = pkg_resources.working_set - -if USE_DISTRIBUTE: - requirement = 'distribute' -else: - requirement = 'setuptools' - -if is_jython: - import subprocess - - assert subprocess.Popen([sys.executable] + ['-c', quote(cmd), '-mqNxd', - quote(tmpeggs), 'zc.buildout' + VERSION], - env=dict(os.environ, - PYTHONPATH= - ws.find(pkg_resources.Requirement.parse(requirement)).location - ), - ).wait() == 0 - -else: - assert os.spawnle( - os.P_WAIT, sys.executable, quote (sys.executable), - '-c', quote (cmd), '-mqNxd', quote (tmpeggs), 'zc.buildout' + VERSION, - dict(os.environ, - PYTHONPATH= - ws.find(pkg_resources.Requirement.parse(requirement)).location - ), - ) == 0 - -ws.add_entry(tmpeggs) -ws.require('zc.buildout' + VERSION) -import zc.buildout.buildout -zc.buildout.buildout.main(args) -shutil.rmtree(tmpeggs) diff --git a/buildout.cfg b/buildout.cfg deleted file mode 100644 index b63a354..0000000 --- a/buildout.cfg +++ /dev/null @@ -1,14 +0,0 @@ -[buildout] -develop = . -parts = pythonpulp scripts - -[pythonpulp] -recipe = zc.recipe.egg -interpreter = pythonpulp -eggs = pulp - -[scripts] -recipe = zc.recipe.egg:scripts -eggs = pulp - - diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..61d010b --- /dev/null +++ b/setup.cfg @@ -0,0 +1,7 @@ +[build_sphinx] +source-dir = doc/source +build-dir = build/doc +all_files = 1 + +[upload_sphinx] +upload-dir = doc/build/html \ No newline at end of file diff --git a/solvers.cfg b/solvers.cfg deleted file mode 100644 index d425f3c..0000000 --- a/solvers.cfg +++ /dev/null @@ -1,21 +0,0 @@ -[buildout] -extends = buildout.cfg - -[glpk] -recipe = zc.recipe.cmmi -url = http://ftp.gnu.org/gnu/glpk/glpk-4.42.tar.gz - -[cbc] -recipe = zc.recipe.cmmi -url = http://www.coin-or.org/download/source/Cbc/Cbc-2.4.0.tgz - -[coinMP] -recipe = zc.recipe.cmmi -#url = http://pulp-or.googlecode.com/files/CoinMP-1.4.0patched.tar.gz -url = http://www.coin-or.org/download/source/CoinMP/CoinMP-1.4.0.tgz -#patch = ${buildout:directory}/patches/CoinMP-1.4.0.patch - -[install-coinMP] -recipe = plone.recipe.command -command = cp ${buildout:directory}/parts/coinMP/lib/* ${buildout:directory}/src/pulp/solverdir/ -update-command = cp ${buildout:directory}/parts/coinMP/lib/* ${buildout:directory}/src/pulp/solverdir/ From b62011cd75a0a174649e76d38382b01dc38a78e0 Mon Sep 17 00:00:00 2001 From: Stuart Mitchell Date: Fri, 25 Dec 2015 14:30:53 +0900 Subject: [PATCH 3/5] Fixes #95 --- src/pulp/pulp.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pulp/pulp.py b/src/pulp/pulp.py index 7bc6f12..254e56b 100644 --- a/src/pulp/pulp.py +++ b/src/pulp/pulp.py @@ -1498,7 +1498,7 @@ class LpProblem(object): f.write("Minimize\n") else: f.write("Maximize\n") - wasNone, dummyVar = self.fixObjective() + wasNone, objectiveDummyVar = self.fixObjective() objName = self.objective.name if not objName: objName = "OBJ" f.write(self.objective.asCplexLpAffineExpression(objName, constant = 0)) @@ -1567,7 +1567,7 @@ class LpProblem(object): f.write(" %s: %.12g\n" % (v.name, val)) f.write("End\n") f.close() - self.restoreObjective(wasNone, dummyVar) + self.restoreObjective(wasNone, objectiveDummyVar) def assignVarsVals(self, values): variables = self.variablesDict() From 91ebb280002d2cf09dcda44793f0eb40f3bc8c88 Mon Sep 17 00:00:00 2001 From: Stuart Mitchell Date: Fri, 25 Dec 2015 14:57:04 +0900 Subject: [PATCH 4/5] Documentation fix Fixes #91 --- src/pulp/pulp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pulp/pulp.py b/src/pulp/pulp.py index 254e56b..3f32121 100644 --- a/src/pulp/pulp.py +++ b/src/pulp/pulp.py @@ -243,7 +243,7 @@ class LpVariable(LpElement): This class models an LP Variable with the specified associated parameters :param name: The name of the variable used in the output .lp file - :param lowbound: The lower bound on this variable's range. + :param lowBound: The lower bound on this variable's range. Default is negative infinity :param upBound: The upper bound on this variable's range. Default is positive infinity From 1cf6544afd24e3a8247ba987a87bfa29ffdc34b6 Mon Sep 17 00:00:00 2001 From: Stuart Mitchell Date: Fri, 25 Dec 2015 15:12:31 +0900 Subject: [PATCH 5/5] version bump --- HISTORY | 2 ++ README.md | 14 +++++++------- src/pulp/constants.py | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/HISTORY b/HISTORY index 1403cec..75f4724 100644 --- a/HISTORY +++ b/HISTORY @@ -1,6 +1,8 @@ # PuLP, Copyright J.S. Roy (js@jeannot.org), 2002-2005 # Copyright S.A.Mitchell (s.mitchell@auckland.ac.nz), 2007- # See the LICENSE file for copyright information. +1.6.1, 2015-12-25 + Fix for dummy variables 1.5.4, 2013-03-18 Added cbc support for osx (hopefully) 1.4.9, 2011-03-30 diff --git a/README.md b/README.md index 9d4c529..41d636e 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ The easiest way to install pulp is via [PyPi](https://pypi.python.org/pypi/PuLP) If pip is available on your system $pip install pulp - + Otherwise follow the download instructions on the PyPi page On Linux and OSX systems the tests must be run to make the default solver executable. @@ -43,7 +43,7 @@ Use LpProblem() to create new problems. Create "myProblem" >>> prob = LpProblem("myProblem", LpMinimize) Combine variables to create expressions and constraints and add them to the -problem. +problem. >>> prob += x + y <= 2 @@ -55,7 +55,7 @@ become the objective. To solve with the default included solver >>> status = prob.solve() - + To use another sovler to solve the problem. >>> status = prob.solve(GLPK(msg = 0)) @@ -74,18 +74,18 @@ Exported Classes: * LpProblem -- Container class for a Linear programming problem * LpVariable -- Variables that are added to constraints in the LP -* LpConstraint -- A constraint of the general form +* LpConstraint -- A constraint of the general form - a1x1+a2x2 ...anxn (<=, =, >=) b + a1x1+a2x2 ...anxn (<=, =, >=) b * LpConstraintVar -- Used to construct a column of the model in column-wise modelling Exported Functions: * value() -- Finds the value of a variable or expression -* lpSum() -- given a list of the form [a1*x1, a2x2, ..., anxn] will construct +* lpSum() -- given a list of the form [a1*x1, a2x2, ..., anxn] will construct a linear expression to be used as a constraint or variable -* lpDot() --given two lists of the form [a1, a2, ..., an] and +* lpDot() --given two lists of the form [a1, a2, ..., an] and [ x1, x2, ..., xn] will construct a linear epression to be used as a constraint or variable diff --git a/src/pulp/constants.py b/src/pulp/constants.py index 18bb1ef..20c56d3 100644 --- a/src/pulp/constants.py +++ b/src/pulp/constants.py @@ -27,7 +27,7 @@ This file contains the constant definitions for PuLP Note that hopefully these will be changed into something more pythonic """ -VERSION = '1.6.0' +VERSION = '1.6.1' EPS = 1e-7 # variable categories