Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 113 additions & 0 deletions 0mq/funbody_zmq.dir/concore2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
import time
import os
from ast import literal_eval
import sys
import re

#if windows, create script to kill this process
# because batch files don't provide easy way to know pid of last command
# ignored for posix!=windows, because "concorepid" is handled by script
# ignored for docker (linux!=windows), because handled by docker stop
if hasattr(sys, 'getwindowsversion'):
with open("concorekill.bat","w") as fpid:
fpid.write("taskkill /F /PID "+str(os.getpid())+"\n")

try:
iport = literal_eval(open("concore.iport").read())
except:
iport = dict()
try:
oport = literal_eval(open("concore.oport").read())
except:
oport = dict()


s = ''
olds = ''
delay = 1
retrycount = 0
inpath = "./in" #must be rel path for local
outpath = "./out"

#9/21/22
try:
sparams = open(inpath+"1/concore.params").read()
if sparams[0] == '"': #windows keeps "" need to remove
sparams = sparams[1:]
sparams = sparams[0:sparams.find('"')]
if sparams != '{':
print("converting sparams: "+sparams)
sparams = "{'"+re.sub(';',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}"
print("converted sparams: " + sparams)
try:
params = literal_eval(sparams)
except:
print("bad params: "+sparams)
except:
params = dict()
#9/30/22
def tryparam(n,i):
try:
return params[n]
except:
return i


#9/12/21
def default_maxtime(default):
global maxtime
try:
maxtime = literal_eval(open(inpath+"1/concore.maxtime").read())
except:
maxtime = default
default_maxtime(100)

def unchanged():
global olds,s
if olds==s:
s = ''
return True
else:
olds = s
return False

def read(port, name, initstr):
global s,simtime,retrycount
time.sleep(delay)
try:
infile = open(inpath+str(port)+"/"+name);
ins = infile.read()
except:
ins = initstr
while len(ins)==0:
time.sleep(delay)
ins = infile.read()
retrycount += 1
s += ins
inval = literal_eval(ins)
simtime = max(simtime,inval[0])
return inval[1:]

def write(port, name, val, delta=0):
global outpath,simtime
if isinstance(val,str):
time.sleep(2*delay)
elif isinstance(val,list)==False:
print("mywrite must have list or str")
quit()
try:
with open(outpath+str(port)+"/"+name,"w") as outfile:
if isinstance(val,list):
outfile.write(str([simtime+delta]+val))
simtime += delta
else:
outfile.write(val)
except:
print("skipping"+outpath+str(port)+"/"+name);

def initval(simtime_val):
global simtime
val = literal_eval(simtime_val)
simtime = val[0]
return val[1:]

45 changes: 45 additions & 0 deletions 0mq/funbody_zmq.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# funbody2_zmq.py
import zmq
import time
import concore
import concore2

print("funbody using 0mq")

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:2346")

concore.delay = 0.07
concore2.delay = 0.07
concore2.inpath = concore.inpath
concore2.outpath = concore.outpath
concore2.simtime = 0
concore.default_maxtime(100)
init_simtime_u = "[0.0, 0.0, 0.0]"
init_simtime_ym = "[0.0, 0.0, 0.0]"

u = concore.initval(init_simtime_u)
ym = concore2.initval(init_simtime_ym)

while concore2.simtime < concore.maxtime:
msg = socket.recv_json()
if msg["action"] == "fun":
u = msg["params"]["u"]
concore.simtime = u[0]
u = u[1:]
concore.write(concore.oport['U2'], "u", u)
print(u)
old2 = concore2.simtime
while concore2.unchanged() or concore2.simtime <= old2:
ym = concore2.read(concore.iport['Y2'], "ym", init_simtime_ym)
ym_full = [concore2.simtime] + ym
print(f"Replying with {ym_full}")
socket.send_json({"ym": ym_full})
print(f"funbody u={u} ym={ym} time={concore2.simtime}")
else:
print("undefined action: " + str(msg.get("action", "None")))
socket.send_json({"error": "undefined action"})
break

print("retry=" + str(concore.retrycount))
113 changes: 113 additions & 0 deletions 0mq/funcall_zmq.dir/concore2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
import time
import os
from ast import literal_eval
import sys
import re

#if windows, create script to kill this process
# because batch files don't provide easy way to know pid of last command
# ignored for posix!=windows, because "concorepid" is handled by script
# ignored for docker (linux!=windows), because handled by docker stop
if hasattr(sys, 'getwindowsversion'):
with open("concorekill.bat","w") as fpid:
fpid.write("taskkill /F /PID "+str(os.getpid())+"\n")

try:
iport = literal_eval(open("concore.iport").read())
except:
iport = dict()
try:
oport = literal_eval(open("concore.oport").read())
except:
oport = dict()


s = ''
olds = ''
delay = 1
retrycount = 0
inpath = "./in" #must be rel path for local
outpath = "./out"

#9/21/22
try:
sparams = open(inpath+"1/concore.params").read()
if sparams[0] == '"': #windows keeps "" need to remove
sparams = sparams[1:]
sparams = sparams[0:sparams.find('"')]
if sparams != '{':
print("converting sparams: "+sparams)
sparams = "{'"+re.sub(';',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}"
print("converted sparams: " + sparams)
try:
params = literal_eval(sparams)
except:
print("bad params: "+sparams)
except:
params = dict()
#9/30/22
def tryparam(n,i):
try:
return params[n]
except:
return i


#9/12/21
def default_maxtime(default):
global maxtime
try:
maxtime = literal_eval(open(inpath+"1/concore.maxtime").read())
except:
maxtime = default
default_maxtime(100)

def unchanged():
global olds,s
if olds==s:
s = ''
return True
else:
olds = s
return False

def read(port, name, initstr):
global s,simtime,retrycount
time.sleep(delay)
try:
infile = open(inpath+str(port)+"/"+name);
ins = infile.read()
except:
ins = initstr
while len(ins)==0:
time.sleep(delay)
ins = infile.read()
retrycount += 1
s += ins
inval = literal_eval(ins)
simtime = max(simtime,inval[0])
return inval[1:]

def write(port, name, val, delta=0):
global outpath,simtime
if isinstance(val,str):
time.sleep(2*delay)
elif isinstance(val,list)==False:
print("mywrite must have list or str")
quit()
try:
with open(outpath+str(port)+"/"+name,"w") as outfile:
if isinstance(val,list):
outfile.write(str([simtime+delta]+val))
simtime += delta
else:
outfile.write(val)
except:
print("skipping"+outpath+str(port)+"/"+name);

def initval(simtime_val):
global simtime
val = literal_eval(simtime_val)
simtime = val[0]
return val[1:]

39 changes: 39 additions & 0 deletions 0mq/funcall_zmq.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# funcall2_zmq.py
import zmq
import time
import concore
import concore2

print("funcall using 0mq")

context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:2346")

concore.delay = 0.07
concore2.delay = 0.07
concore2.inpath = concore.inpath
concore2.outpath = concore.outpath
concore2.simtime = 0
concore.default_maxtime(100)
init_simtime_u = "[0.0, 0.0, 0.0]"
init_simtime_ym = "[0.0, 0.0, 0.0]"

u = concore.initval(init_simtime_u)
ym = concore2.initval(init_simtime_ym)

while concore2.simtime < concore.maxtime:
while concore.unchanged():
u = concore.read(concore.iport['U'], "u", init_simtime_u)
message = {
"action": "fun",
"params": {"u": [concore.simtime] + u}
}
socket.send_json(message)
response = socket.recv_json()
ym = response["ym"]
concore2.simtime = ym[0]
ym = ym[1:]
concore2.write(concore.oport['Y'], "ym", ym)
print(f"funcall 0mq u={u} ym={ym} time={concore2.simtime}")
print("retry=" + str(concore.retrycount))
Loading