Example #1
0
    def createTree3(self, reinitialize=1, add_lin=True, v_eq=-75.):
        """
        Create simple NET structure

                         6
                4     5  |
                |     |  |
                |     |  |
             2  ---3---  |
             |     |     |
             ---1---     |
                   |     |
                   0------
                   |
        """
        self.v_eq = v_eq

        # kernel constants
        alphas = 1. / np.array([1.])
        gammas = np.array([1.])
        # nodes
        node_0 = NETNode(0, [0, 1, 2, 3], [], z_kernel=(alphas, gammas))
        node_1 = NETNode(1, [0, 1, 2], [], z_kernel=(alphas, gammas))
        node_2 = NETNode(2, [0], [0], z_kernel=(alphas, gammas))
        node_3 = NETNode(3, [1, 2], [], z_kernel=(alphas, gammas))
        node_4 = NETNode(4, [1], [1], z_kernel=(alphas, gammas))
        node_5 = NETNode(5, [2], [2], z_kernel=(alphas, gammas))
        node_6 = NETNode(6, [3], [3], z_kernel=(alphas, gammas))
        # add nodes to tree
        net_py = NET()
        net_py.setRoot(node_0)
        net_py.addNodeWithParent(node_1, node_0)
        net_py.addNodeWithParent(node_2, node_1)
        net_py.addNodeWithParent(node_3, node_1)
        net_py.addNodeWithParent(node_4, node_3)
        net_py.addNodeWithParent(node_5, node_3)
        net_py.addNodeWithParent(node_6, node_0)
        # linear terms
        alphas = 1. / np.array([1.])
        gammas = np.array([1.])
        self.lin_terms = {
            1: Kernel((alphas, gammas)),
            2: Kernel((alphas, gammas)),
            3: Kernel((alphas, gammas))
        } if add_lin else {}
        # store
        self.net_py = net_py
        self.cnet = netsim.NETSim(net_py, lin_terms=self.lin_terms)
Example #2
0
 def testKernels(self):
     # kernel 1
     a1 = np.array([1., 10.])
     c1 = np.array([2., 20.])
     k1 = Kernel((a1, c1))
     # kernel 2
     a2 = np.array([1., 10.])
     c2 = np.array([4., 40.])
     k2 = Kernel({'a': a2, 'c': c2})
     # kernel 3
     k3 = Kernel(1.)
     # kbar
     assert np.abs(k1.k_bar - 4.) < 1e-12
     assert np.abs(k2.k_bar - 8.) < 1e-12
     assert np.abs(k3.k_bar - 1.) < 1e-12
     # temporal kernel
     t_arr = np.array([0., np.infty])
     assert np.allclose(k1(t_arr), np.array([22., 0.]))
     assert np.allclose(k2(t_arr), np.array([44., 0.]))
     assert np.allclose(k3(t_arr), np.array([1., 0.]))
     # frequency kernel
     s_arr = np.array([0. * 1j, np.infty * 1j])
     assert np.allclose(k1.ft(s_arr),
                        np.array([4. + 0j, np.nan * 1j]),
                        equal_nan=True)
     assert np.allclose(k2.ft(s_arr),
                        np.array([8. + 0j, np.nan * 1j]),
                        equal_nan=True)
     assert np.allclose(k3.ft(s_arr),
                        np.array([1. + 0j, np.nan * 1j]),
                        equal_nan=True)
     # test addition
     k4 = k1 + k2
     assert np.abs(k4.k_bar - 12.) < 1e-12
     assert len(k4.a) == 2
     k5 = k1 + k3
     assert np.abs(k5.k_bar - 5.) < 1e-12
     assert len(k5.a) == 3
     # test subtraction
     k6 = k2 - k1
     assert len(k6.a) == 2
     assert np.allclose(k6.c, np.array([2., 20]))
     assert np.abs(k6.k_bar - 4.) < 1e-12
     k7 = k1 - k3
     assert len(k7.a) == 3
     assert np.allclose(k7.c, np.array([2., 20., -1.]))
     assert np.abs(k7.k_bar - 3.) < 1e-12
Example #3
0
 def testNETDerivation(self):
     # initialize
     self.loadValidationTree()
     self.tree.calcSOVEquations()
     # construct the NET
     net = self.tree.constructNET()
     # initialize
     self.loadTTree()
     self.tree.calcSOVEquations()
     # construct the NET
     net = self.tree.constructNET(dz=20.)
     # contruct the NET with linear terms
     net, lin_terms = self.tree.constructNET(dz=20., add_lin_terms=True)
     # check if correct
     alphas, gammas = self.tree.getImportantModes(locarg='net eval',
                                             eps=1e-4, sort_type='timescale')
     for ii, lin_term in lin_terms.items():
         z_k_trans = net.getReducedTree([0,ii]).getRoot().z_kernel + lin_term
         assert np.abs(z_k_trans.k_bar - Kernel((alphas, gammas[:,0]*gammas[:,ii])).k_bar) < 1e-8
Example #4
0
    def createTree2(self, reinitialize=1, add_lin=True, v_eq=-75.):
        '''
        Create simple NET structure

                3     4
                |     |
                |     |
                ---2---
             1     |
             |     |
             ---0---
                |
        '''
        self.v_eq = v_eq
        loc_ind = np.array([0, 1, 2])

        # import btstructs
        # import morphologyReader as morphR
        # net_py = btstructs.STree()
        # # node 0
        # alphas = -1. / np.array([1.])
        # gammas = np.array([1.])
        # self.z_0 = - np.sum(gammas / alphas)
        # node_0 = btstructs.SNode(0)
        # node_0.set_content({'layerdata': morphR.layerData(loc_ind, alphas, gammas)})
        # dat = node_0.get_content()['layerdata']
        # dat.set_ninds(np.array([]))
        # net_py.set_root(node_0)
        # # node 1
        # alphas = -1. / np.array([1.])
        # gammas = np.array([1.])
        # self.z_1 = - np.sum(gammas / alphas)
        # node_1 = btstructs.SNode(1)
        # node_1.set_content({'layerdata': morphR.layerData(loc_ind[0:1], alphas, gammas)})
        # dat = node_1.get_content()['layerdata']
        # dat.set_ninds(np.array([0]))
        # net_py.add_node_with_parent(node_1, node_0)
        # # node 2
        # alphas = -1. / np.array([1.])
        # gammas = np.array([1.])
        # self.z_2 = - np.sum(gammas / alphas)
        # node_2 = btstructs.SNode(2)
        # node_2.set_content({'layerdata': morphR.layerData(loc_ind[1:], alphas, gammas)})
        # dat = node_2.get_content()['layerdata']
        # dat.set_ninds(np.array([]))
        # net_py.add_node_with_parent(node_2, node_0)
        # # node 3
        # alphas = -1. / np.array([1.])
        # gammas = np.array([1.])
        # self.z_3 = - np.sum(gammas / alphas)
        # node_3 = btstructs.SNode(3)
        # node_3.set_content({'layerdata': morphR.layerData(loc_ind[1:2], alphas, gammas)})
        # dat = node_3.get_content()['layerdata']
        # dat.set_ninds(np.array([loc_ind[1]]))
        # net_py.add_node_with_parent(node_3, node_2)
        # # node 4
        # alphas = -1. / np.array([1.])
        # gammas = np.array([1.])
        # node_4 = btstructs.SNode(4)
        # self.z_4 = - np.sum(gammas / alphas)
        # node_4.set_content({'layerdata': morphR.layerData(loc_ind[2:], alphas, gammas)})
        # dat = node_4.get_content()['layerdata']
        # dat.set_ninds(np.array([loc_ind[2]]))
        # net_py.add_node_with_parent(node_4, node_2)
        # # linear terms
        # alphas = -1. / np.array([1.])
        # gammas = np.array([1.])
        # lin3 = morphR.linearLayerData([1], alphas, gammas)
        # alphas = -1. / np.array([1.])
        # gammas = np.array([1.])
        # lin4 = morphR.linearLayerData([2], alphas, gammas)
        # self.lin_terms = [lin3, lin4] if add_lin else []

        # kernel constants
        alphas = 1. / np.array([1.])
        gammas = np.array([1.])
        # nodes
        node_0 = NETNode(0, [0, 1, 2], [], z_kernel=(alphas, gammas))
        node_1 = NETNode(1, [0], [0], z_kernel=(alphas, gammas))
        node_2 = NETNode(2, [1, 2], [], z_kernel=(alphas, gammas))
        node_3 = NETNode(3, [1], [1], z_kernel=(alphas, gammas))
        node_4 = NETNode(4, [2], [2], z_kernel=(alphas, gammas))
        # add nodes to tree
        net_py = NET()
        net_py.setRoot(node_0)
        net_py.addNodeWithParent(node_1, node_0)
        net_py.addNodeWithParent(node_2, node_0)
        net_py.addNodeWithParent(node_3, node_2)
        net_py.addNodeWithParent(node_4, node_2)
        # linear terms
        alphas = 1. / np.array([1.])
        gammas = np.array([1.])
        self.lin_terms = {
            1: Kernel((alphas, gammas)),
            2: Kernel((alphas, gammas))
        } if add_lin else {}
        # store
        self.net_py = net_py
        self.cnet = netsim.NETSim(net_py,
                                  lin_terms=self.lin_terms,
                                  v_eq=self.v_eq)