def c_determinant(ABa2):
  controllability_det = []
  for a,b in ABa2[0]:
    controllability_det.append(det_controllable(a, b[:,1].reshape(4,1)))
  order = np.argsort(ABa2[1])
  xs = np.array(ABa2[1])[order]
  ys = np.array(controllability_det)[order]
  return [xs, ys]
#from utils import controllable

init_vprinting()

inputA = open('double_block_linearized_A_full.pkl', 'rb')
inputB = open('double_block_linearized_B_full.pkl', 'rb')
inputa2 = open('double_block_angle_two.pkl','rb')

linearA = pickle.load(inputA)
linearB = pickle.load(inputB)
angle_2 = pickle.load(inputa2)
inputA.close()
inputB.close()
inputa2.close()

B = []

for b in linearB:
    B.append(b[:,1].reshape(4,1))
    

controllability_det = []

for a,b in zip(linearA,B):
    controllability_det.append(det_controllable(a,b))

fig = plt.figure()
plt.grid(True)
plt.scatter(angle_2, controllability_det)
plt.show()
inputB = open('double_pendulum_linearized_B_murray_params_7v8.pkl', 'rb')
inputa2 = open('equils_a2_plot_murray_params_7v8.pkl', 'rb')

A = pickle.load(inputA)
B = pickle.load(inputB)
a2 = pickle.load(inputa2)

inputA.close()
inputB.close()
inputa2.close()

#state A and input B values for linearized function
controllability_det = []

for a, b in zip(A,B):
  controllability_det.append(det_controllable(a, b[:,1].reshape(4,1)))

outputC = open('double_pendulum_controllability_plot_murray_params_7v8.pkl', 'wb')
pickle.dump(controllability_det, outputC)
outputC.close()

order = np.argsort(a2)
xs = np.array(a2)[order]
ys = np.array(controllability_det)[order]

fig = plt.figure(figsize = (13,13))
plt.grid(b = True, which = 'both')
plt.plot(xs, ys)
plt.xlabel('angle_2')
plt.ylabel('determinant')
inputB = open("triple_pen_linearized_B_useful.pkl", "rb")
inputB2 = open("triple_pen_linearized_B2.pkl", "rb")
inputB3 = open("triple_pen_linearized_B3.pkl", "rb")
A = pickle.load(inputA)
B = pickle.load(inputB)
B2 = pickle.load(inputB2)
B3 = pickle.load(inputB3)

inputA.close()
inputB.close()
inputB2.close()
inputB3.close()

controllability_det = []
controllability_det_two = []
controllability_det_three = []

# calculate determinant of controllability matrix
for a, b in zip(A, B):
    controllability_det_two.append(det_controllable(a, b[:, 1].reshape(6, 1)))
    controllability_det_three.append(det_controllable(a, b[:, 2].reshape(6, 1)))

outputdet2 = open("triple_pen_controllability_angle_two_useful.pkl", "wb")
outputdet3 = open("triple_pen_controllability_angle_three_useful.pkl", "wb")

pickle.dump(controllability_det_two, outputdet2)
pickle.dump(controllability_det_three, outputdet3)

outputdet2.close()
outputdet3.close()