コード例 #1
0
ファイル: test_coo.py プロジェクト: erikbrinkman/sparse
def test_tensordot(a_shape, b_shape, axes):
    sa = sparse.random(a_shape, density=0.5)
    sb = sparse.random(b_shape, density=0.5)

    a = sa.todense()
    b = sb.todense()

    assert_eq(np.tensordot(a, b, axes), sparse.tensordot(sa, sb, axes))

    assert_eq(np.tensordot(a, b, axes), sparse.tensordot(sa, b, axes))

    # assert isinstance(sparse.tensordot(sa, b, axes), COO)

    assert_eq(np.tensordot(a, b, axes), sparse.tensordot(a, sb, axes))
コード例 #2
0
    def get_boundary_matrices(self, global_index):

        if not os.path.exists(self.cache + '/Am_' + str(global_index) + '.p'):
            kdir = self.kappa_directional[global_index]
            k_angle = sparse.COO([0, 1, 2],
                                 self.kappa_directional[global_index],
                                 shape=(3))

            tmp = sparse.tensordot(self.mesh.CP, k_angle, axes=1)
            AP = tmp.clip(min=0)  #.to_scipy_sparse().todok()
            AM = (tmp - AP)  #.tocsc().todok() #preserve the sign of AM
            #if self.argv.setdefault('antialiasing',False):
            # self.get_antialiasing(self.mesh.CP,self.kappa_directional_not_int[global_index],AM,AP)

            AP = AP.todense()
            AM = -AM.todense()

            if self.save_data:
                AM.dump(
                    open(self.cache + '/Am_' + str(global_index) + '.p', 'wb'))
                AP.dump(
                    open(self.cache + '/Ap_' + str(global_index) + '.p', 'wb'))
        else:
            AM = np.load(open(self.cache + '/Am_' + str(global_index) + '.p',
                              'rb'),
                         allow_pickle=True)
            AP = np.load(open(self.cache + '/Ap_' + str(global_index) + '.p',
                              'rb'),
                         allow_pickle=True)

        return AM, AP
コード例 #3
0
ファイル: test_dot.py プロジェクト: H4R5H1T-007/sparse
def test_tensordot_empty():
    x1 = np.empty((0, 0, 0))
    x2 = np.empty((0, 0, 0))
    s1 = sparse.COO.from_numpy(x1)
    s2 = sparse.COO.from_numpy(x2)

    assert_eq(np.tensordot(x1, x2), sparse.tensordot(s1, s2))
コード例 #4
0
ファイル: test_core.py プロジェクト: zhanglae/sparse
def test_tensordot(a_shape, b_shape, axes):
    a = random_x(a_shape)
    b = random_x(b_shape)

    sa = COO.from_numpy(a)
    sb = COO.from_numpy(b)

    assert_eq(np.tensordot(a, b, axes), sparse.tensordot(sa, sb, axes))

    assert_eq(np.tensordot(a, b, axes), sparse.tensordot(sa, b, axes))

    assert isinstance(sparse.tensordot(sa, b, axes), COO)

    assert_eq(np.tensordot(a, b, axes), sparse.tensordot(a, sb, axes))

    assert isinstance(sparse.tensordot(a, sb, axes), COO)
コード例 #5
0
  def get_bulk_data(self,global_index,TB,TL):

     index_irr = self.mat['temp_vec'][global_index]
     aa = sparse.COO([0,1,2],self.control_angle[global_index],shape=(3))
     mfp   = self.mat['mfp'][global_index]
     irr_angle = self.mat['angle_map'][global_index]

     if not irr_angle == self.old_index:
       self.old_index = irr_angle

       if not os.path.exists(self.cache + '/A_' + str(irr_angle) + '.npz'):

        test2  = sparse.tensordot(self.mesh.N,aa,axes=1)
        AP = test2.clip(min=0)
        AM = (test2 - AP)
        AP = spdiags(np.sum(AP,axis=1).todense(),0,self.n_elems,self.n_elems,format='csc')
        self.mesh.B = self.mesh.B.tocsc()
        self.P = np.sum(np.multiply(AM,self.mesh.B),axis=1).todense()
        tmp = sparse.tensordot(self.mesh.CM,aa,axes=1)
        HW_PLUS = tmp.clip(min=0)
        self.HW_MINUS = (HW_PLUS-tmp)
        BP = spdiags(np.sum(HW_PLUS,axis=1).todense(),0,self.n_elems,self.n_elems,format='csc')
        self.A =  AP + AM + BP
     
        self.P.dump(self.cache + '/P_' + str(irr_angle) + '.p')
        sparse.io.save_npz(self.cache + '/A_' + str(irr_angle) + '.npz',self.A)
        sparse.io.save_npz(self.cache + '/HW_MINUS_' + str(irr_angle) + '.npz',self.HW_MINUS)

       else:  
        self.P = np.load(open(self.cache +'/P_' + str(irr_angle) +'.p','rb'),allow_pickle=True)
        self.A = sparse.load_npz(self.cache + '/A_' + str(irr_angle) + '.npz')
        self.HW_MINUS = sparse.load_npz(self.cache + '/HW_MINUS_' + str(irr_angle) + '.npz')

     boundary = np.sum(np.multiply(TB,self.HW_MINUS),axis=1).todense()
     RHS = mfp * (self.P + boundary) + TL[index_irr]  


     #Add connection-----
     #RHS += self.TL_old[global_index] - self.temp_old[global_index] - self.delta_old[global_index]
     #-------------------
 
     #else:
     #  RHS = mfp * (boundary) + TL[index_irr]   

     F = scipy.sparse.eye(self.n_elems,format='csc') + self.A * mfp
     lu = splu(F.tocsc())
     return lu.solve(RHS)
コード例 #6
0
  def get_multiscale_diffusive(self,index,n,SDIFF,TDIFF,TDIFFGrad):

          angle = self.control_angle[index]
          aa = sparse.COO([0,1,2],angle,shape=(3))
          HW_PLUS = sparse.tensordot(self.mesh.CP,aa,axes=1).clip(min=0)
          s = SDIFF[n] * self.mat['mfp'][n]
          temp = TDIFF[n] - self.mat['mfp'][n]*np.dot(self.control_angle[index],TDIFFGrad[n].T)      
          t = temp*self.mat['domega'][index]
          j = np.multiply(temp,HW_PLUS)*self.mat['domega'][index]

          return t,s,j
コード例 #7
0
ファイル: test_dot.py プロジェクト: H4R5H1T-007/sparse
def test_tensordot(a_shape, b_shape, axes, a_format, b_format):
    sa = sparse.random(a_shape, density=0.5, format=a_format)
    sb = sparse.random(b_shape, density=0.5, format=b_format)

    a = sa.todense()
    b = sb.todense()

    a_b = np.tensordot(a, b, axes)

    # tests for return_type=None
    sa_sb = sparse.tensordot(sa, sb, axes)
    sa_b = sparse.tensordot(sa, b, axes)
    a_sb = sparse.tensordot(a, sb, axes)

    assert_eq(a_b, sa_sb)
    assert_eq(a_b, sa_b)
    assert_eq(a_b, a_sb)
    if all(isinstance(arr, COO) for arr in [sa, sb]):
        assert isinstance(sa_sb, COO)
    else:
        assert isinstance(sa_sb, GCXS)
    assert isinstance(sa_b, np.ndarray)
    assert isinstance(a_sb, np.ndarray)

    # tests for return_type=COO
    sa_b = sparse.tensordot(sa, b, axes, return_type=COO)
    a_sb = sparse.tensordot(a, sb, axes, return_type=COO)

    assert_eq(a_b, sa_b)
    assert_eq(a_b, a_sb)
    assert isinstance(sa_b, COO)
    assert isinstance(a_sb, COO)

    # tests form return_type=GCXS
    sa_b = sparse.tensordot(sa, b, axes, return_type=GCXS)
    a_sb = sparse.tensordot(a, sb, axes, return_type=GCXS)

    assert_eq(a_b, sa_b)
    assert_eq(a_b, a_sb)
    assert isinstance(sa_b, GCXS)
    assert isinstance(a_sb, GCXS)

    # tests for return_type=np.ndarray
    sa_sb = sparse.tensordot(sa, sb, axes, return_type=np.ndarray)

    assert_eq(a_b, sa_sb)
    assert isinstance(sa_sb, np.ndarray)
コード例 #8
0
    def get_bulk_data(self, global_index, TB, TL, Tnew):

        index_irr = self.mat['temp_vec'][global_index]
        aa = sparse.COO([0, 1, 2], self.control_angle[global_index], shape=(3))
        mfp = self.mat['mfp'][global_index]
        irr_angle = self.mat['angle_map'][global_index]

        if (self.keep_lu) and (global_index in self.lu.keys()):
            lu = self.lu[irr_angle]
        else:

            if not irr_angle == self.old_index:
                self.old_index = irr_angle

                if not os.path.exists(self.cache + '/A_' + str(irr_angle) +
                                      '.npz'):

                    test2 = sparse.tensordot(self.mesh.N, aa, axes=1)
                    AP = test2.clip(min=0)
                    AM = (test2 - AP)
                    AP = spdiags(np.sum(AP, axis=1).todense(),
                                 0,
                                 self.mesh.nle,
                                 self.mesh.nle,
                                 format='csc')
                    self.mesh.B = self.mesh.B.tocsc()
                    self.P = np.sum(np.multiply(AM, self.mesh.B),
                                    axis=1).todense()
                    tmp = sparse.tensordot(self.mesh.CM, aa, axes=1).todense()
                    HW_PLUS = tmp.clip(min=0)
                    self.HW_MINUS = (HW_PLUS - tmp)

                    BP = spdiags(np.sum(HW_PLUS, axis=1),
                                 0,
                                 self.mesh.nle,
                                 self.mesh.nle,
                                 format='csc')
                    self.A = AP + AM + BP
                    if self.save_data:
                        self.P.dump(self.cache + '/P_' + str(irr_angle) + '.p')
                        sio.save_npz(
                            self.cache + '/A_' + str(irr_angle) + '.npz',
                            self.A)
                        self.HW_MINUS.dump(
                            open(
                                self.cache + '/HW_MINUS_' + str(irr_angle) +
                                '.npz', 'wb'))

                else:
                    self.P = np.load(open(
                        self.cache + '/P_' + str(irr_angle) + '.p', 'rb'),
                                     allow_pickle=True)
                    self.A = sparse.load_npz(self.cache + '/A_' +
                                             str(irr_angle) + '.npz')
                    self.HW_MINUS = np.load(open(
                        self.cache + '/HW_MINUS_' + str(irr_angle) + '.npz',
                        'rb'),
                                            allow_pickle=True)

            F = scipy.sparse.eye(self.mesh.nle, format='csc') + self.A * mfp

            lu = splu(F.tocsc())
            if (self.keep_lu): self.lu[irr_angle] = lu

        boundary = np.sum(np.multiply(TB, self.HW_MINUS), axis=1)
        #RHS = mfp * (self.P + boundary) + Tnew + TL[index_irr]
        #RHS = mfp * boundary + np.ones(self.mesh.nle)
        RHS = mfp * np.ones(self.mesh.nle) + np.ones(self.mesh.nle)

        temp = lu.solve(RHS)

        return temp