1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/src/HOL/Library/Sum_Of_Squares/neos_csdp_client Thu Aug 06 19:51:59 2009 +0200
1.3 @@ -0,0 +1,65 @@
1.4 +#!/usr/bin/env python
1.5 +import sys
1.6 +import xmlrpclib
1.7 +import time
1.8 +import re
1.9 +
1.10 +# Neos server config
1.11 +NEOS_HOST="neos.mcs.anl.gov"
1.12 +NEOS_PORT=3332
1.13 +
1.14 +if len(sys.argv) < 3 or len(sys.argv) > 3:
1.15 + sys.stderr.write("Usage: NeosCSDPClient <input_filename> <output_filename>\n")
1.16 + sys.exit(1)
1.17 +
1.18 +neos=xmlrpclib.Server("http://%s:%d" % (NEOS_HOST, NEOS_PORT))
1.19 +
1.20 +inputfile = open(sys.argv[1],"r")
1.21 +xml_pre = "<document>\n<category>sdp</category>\n<solver>csdp</solver>\n<inputMethod>SPARSE_SDPA</inputMethod>\n<dat><![CDATA["
1.22 +xml_post = "]]></dat>\n</document>\n"
1.23 +xml = xml_pre
1.24 +buffer = 1
1.25 +while buffer:
1.26 + buffer = inputfile.read()
1.27 + xml += buffer
1.28 +inputfile.close()
1.29 +xml += xml_post
1.30 +
1.31 +(jobNumber,password) = neos.submitJob(xml)
1.32 +
1.33 +if jobNumber == 0:
1.34 + sys.stdout.write("error submitting job: %s" % password)
1.35 + sys.exit(20)
1.36 +else:
1.37 + sys.stdout.write("jobNumber = %d\tpassword = %s\n" % (jobNumber,password))
1.38 +
1.39 +offset=0
1.40 +messages = ""
1.41 +status="Waiting"
1.42 +while status == "Running" or status=="Waiting":
1.43 + time.sleep(1)
1.44 + (msg,offset) = neos.getIntermediateResults(jobNumber,password,offset)
1.45 + messages += msg.data
1.46 + sys.stdout.write(msg.data)
1.47 + status = neos.getJobStatus(jobNumber, password)
1.48 +
1.49 +msg = neos.getFinalResults(jobNumber, password).data
1.50 +sys.stdout.write("---------- Begin CSDP Output -------------\n");
1.51 +sys.stdout.write(msg)
1.52 +
1.53 +# extract solution
1.54 +result = msg.split("Solution:")
1.55 +if len(result) > 1:
1.56 + output = open(sys.argv[2],"w")
1.57 + output.write(result[1].strip())
1.58 + output.close()
1.59 +
1.60 +# extract return code
1.61 +p = re.compile(r"^Error: Command exited with non-zero status (\d+)$", re.MULTILINE)
1.62 +m = p.search(messages)
1.63 +if m:
1.64 + sys.exit(int(m.group(1)))
1.65 +else:
1.66 + sys.exit(0)
1.67 +
1.68 +