def test_get_source(self):
     source_conf = {
         'index': 0,
         'properties': {
             'IonChargeStates':
             array([0.138655]),
             'IonEk':
             500000.0,
             'IonEs':
             931494000.0,
             'NCharge':
             array([10111.]),
             'P0':
             array([
                 -7.88600000e-04, 1.08371000e-05, 1.33734000e-02,
                 6.67853000e-06, -1.84773000e-04, 3.09995000e-04,
                 1.00000000e+00
             ]),
             'S0':
             array([
                 2.76309000e+00, -4.28247000e-04, 1.58179000e-02,
                 2.15594000e-05, 1.86381000e-04, -2.99394000e-05,
                 0.00000000e+00, -4.28247000e-04, 3.84947000e-06,
                 -1.38385000e-06, -1.85410000e-08, 1.06778000e-07,
                 5.28564000e-09, 0.00000000e+00, 1.58179000e-02,
                 -1.38385000e-06, 2.36251000e+00, -6.69320000e-04,
                 -5.80100000e-04, 6.71652000e-06, 0.00000000e+00,
                 2.15594000e-05, -1.85410000e-08, -6.69320000e-04,
                 4.89711000e-06, -5.01615000e-07, 5.57484000e-08,
                 0.00000000e+00, 1.86381000e-04, 1.06778000e-07,
                 -5.80100000e-04, -5.01615000e-07, 6.71687000e-04,
                 -1.23223000e-05, 0.00000000e+00, -2.99394000e-05,
                 5.28564000e-09, 6.71652000e-06, 5.57484000e-08,
                 -1.23223000e-05, 1.99525000e-06, 0.00000000e+00,
                 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
                 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
                 0.00000000e+00
             ]),
             'matrix_variable':
             'S',
             'name':
             'S',
             'type':
             'source',
             'vector_variable':
             'P'
         }
     }
     sconf = get_element(index=0, latfile=self.latfile)[0]
     #compare_source_element(self, sconf, source_conf)
     for k, v in sconf['properties'].items():
         left_val, right_val = v, source_conf['properties'][k]
         if isinstance(v, np.ndarray):
             self.assertTrue(
                 ((left_val == right_val) |
                  (np.isnan(left_val) & np.isnan(right_val))).all())
         else:
             self.assertAlmostEqual(left_val, right_val)
    def test_multi_names(self):
        enames = [
            'LS1_CA01:SOL1_D1131_1',
            'LS1_CA01:CAV4_D1150',
            'LS1_WB01:BPM_D1286',
            'LS1_CA01:GV_D1124',
            'LS1_CA01:BPM_D1144',
        ]
        e0 = [{
            'index': 8,
            'properties': {
                'aper': 0.02,
                'B': 5.34529,
                'type': 'solenoid',
                'L': 0.1,
                'name': 'LS1_CA01:SOL1_D1131_1'
            }
        }, {
            'index': 1,
            'properties': {
                'aper': 0.02,
                'type': 'drift',
                'L': 0.072,
                'name': 'LS1_CA01:GV_D1124'
            }
        }, {
            'index': 154,
            'properties': {
                'type': 'bpm',
                'name': 'LS1_WB01:BPM_D1286'
            }
        }, {
            'index': 27,
            'properties': {
                'aper': 0.017,
                'name': 'LS1_CA01:CAV4_D1150',
                'f': 80500000.0,
                'cavtype': '0.041QWR',
                'L': 0.24,
                'phi': 325.2,
                'scl_fac': 0.819578,
                'type': 'rfcavity'
            }
        }, {
            'index': 18,
            'properties': {
                'type': 'bpm',
                'name': 'LS1_CA01:BPM_D1144'
            }
        }]

        e1 = get_element(name=enames, latfile=self.latfile)
        self.assertEqual(sorted(e1, key=lambda x: x['index']),
                         sorted(e0, key=lambda x: x['index']))
 def test_one_name(self):
     ename = 'LS1_CA01:CAV4_D1150'
     e0 = [{
         'index': 27,
         'properties': {
             'L': 0.24,
             'aper': 0.017,
             'cavtype': '0.041QWR',
             'f': 80500000.0,
             'name': 'LS1_CA01:CAV4_D1150',
             'phi': 325.2,
             'scl_fac': 0.819578,
             'type': 'rfcavity'
         }
     }]
     e1 = get_element(name=ename, latfile=self.latfile)
     e2 = get_element(name=ename, _machine=self.m)
     e3 = get_element(name='', _machine=self.m)
     self.assertEqual(e1, e2)
     self.assertEqual(e1, e0)
     self.assertEqual(e3, [])
 def test_one_index(self):
     idx = 10
     e0 = [{
         'index': 10,
         'properties': {
             'name': 'LS1_CA01:DCV_D1131',
             'theta_y': 0.0,
             'type': 'orbtrim'
         }
     }]
     e1 = get_element(index=idx, latfile=self.latfile)
     self.assertEqual(e1, e0)
    def test_multi_filters(self):
        eidx, etyp = list(range(20)), 'bpm'
        e0 = [{
            'index': 5,
            'properties': {
                'name': 'LS1_CA01:BPM_D1129',
                'type': 'bpm'
            }
        }, {
            'index': 18,
            'properties': {
                'name': 'LS1_CA01:BPM_D1144',
                'type': 'bpm'
            }
        }]
        e1 = get_element(index=eidx, type=etyp, latfile=self.latfile)
        self.assertEqual(e1, e0)

        e2 = get_element(index=eidx,
                         type=etyp,
                         latfile=self.latfile,
                         name='LS1_CA01:BPM_D1144')
        self.assertEqual(e2, [e0[1]])
 def test_multi_indice(self):
     idx = list(range(1, 3))
     e0 = [{
         'index': 1,
         'properties': {
             'L': 0.072,
             'aper': 0.02,
             'name': 'LS1_CA01:GV_D1124',
             'type': 'drift'
         }
     }, {
         'index': 2,
         'properties': {
             'L': 0.135064,
             'aper': 0.02,
             'name': 'DRIFT_1',
             'type': 'drift'
         }
     }]
     e1 = get_element(index=idx, latfile=self.latfile)
     self.assertEqual(e1, e0)
 def test_name_pattern(self):
     name_pattern = 'FS1_BBS:DH_D2394_.?$'
     e1 = get_element(_pattern=name_pattern, latfile=self.latfile)
     names = ['FS1_BBS:DH_D2394_{}'.format(i) for i in range(1, 10)]
     e2 = get_element(name=names, latfile=self.latfile)
     self.assertEqual(e1, e2)