Merge branch 'release/1.6.1'

This commit is contained in:
Stuart Mitchell 2015-12-25 15:12:52 +09:00
commit 2e75bf0e50
9 changed files with 43 additions and 188 deletions

View File

@ -1,20 +1,25 @@
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
- pip install .
script: pulptest
before_deploy:
- sudo apt-get install texlive-latex-extra
- sudo apt-get install dvipng
deploy:
provider: pypi
user: StuartMitchell
password:
secure: SVUU0MC4tLFS0EWqybpjWHKHumZ0qB6quhkvvx0pyfn4h6CIgZqhuWdSD/PJomlZp+dfqdQUVq3Tzl50UwQFG4OcBORJ+fVjxGJPkO5dpFsvtoNfBRNV9ZkYzMUx0djXxFKK2sVNqgI2O2sDvZk4eHDD09+mKtoSZ5XeT68Vqno=
on:
tags: true
repo: coin-or/pulp

View File

@ -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

View File

@ -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.
@ -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.
@ -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

View File

@ -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)

View File

@ -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

7
setup.cfg Normal file
View File

@ -0,0 +1,7 @@
[build_sphinx]
source-dir = doc/source
build-dir = build/doc
all_files = 1
[upload_sphinx]
upload-dir = doc/build/html

View File

@ -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/

View File

@ -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

View File

@ -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
@ -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()