src/HOL/Library/Sum_Of_Squares/neos_csdp_client
changeset 32332 bc5cec7b2be6
parent 32265 d50f0cb67578
child 32362 c0c640d86b4e
     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 +