Skip to content

Commit e803627

Browse files
authored
Merge branch 'main' into performance-optimization-list-append-15142826470891655336
2 parents eadb65e + a311619 commit e803627

6 files changed

Lines changed: 118 additions & 60 deletions

File tree

.github/workflows/ci.yaml

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -114,31 +114,24 @@ jobs:
114114
# The outputs will be variables named "foo_files" for a filter "foo".
115115
filters: |
116116
ci:
117-
- './.github/workflows/**'
118-
- './check/**'
119-
- './dev_tools/**'
117+
- '.github/workflows/**'
118+
- 'check/**'
119+
- 'dev_tools/**'
120120
python:
121121
- '**/*.py'
122122
- 'dev_tools/conf/**'
123123
- 'dev_tools/requirements/**/*.txt'
124124
- 'docs/**/*-requirements.txt'
125-
- 'docs/**/requirements.txt'
126125
- 'pyproject.toml'
127126
gha:
128-
- added|modified:
129-
- './.github/workflows/*.yaml'
127+
- '.github/workflows/*.yaml'
130128
yaml:
131-
- added|modified:
132-
- '*.cff'
133-
- '.*.yaml'
134-
- '.github/*.yaml'
135-
- 'docs/**/*.yaml'
129+
- '*.cff'
130+
- '**/*.yaml'
136131
json:
137-
- added|modified:
138-
- '**/*.json'
132+
- '**/*.json'
139133
docker:
140-
- '**/dockerfile'
141-
- '**/Dockerfile'
134+
- '**/[Dd]ockerfile'
142135
shell:
143136
- '**/*.sh'
144137
- 'check/*'

dev_tools/prepared_env.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,14 @@ def report_status_to_github(
9797
if target_url is not None:
9898
payload['target_url'] = target_url
9999

100-
url = "https://api.github.com/repos/{}/{}/statuses/{}?access_token={}".format(
101-
self.repository.organization,
102-
self.repository.name,
103-
self.actual_commit_id,
104-
self.repository.access_token,
100+
if self.actual_commit_id is None:
101+
return
102+
url = "https://api.github.com/repos/{}/{}/statuses/{}".format(
103+
self.repository.organization, self.repository.name, self.actual_commit_id
105104
)
105+
headers = {'Authorization': 'Bearer {}'.format(self.repository.access_token)}
106106

107-
response = requests.post(url, json=payload)
107+
response = requests.post(url, json=payload, headers=headers, timeout=30)
108108

109109
if response.status_code != 201:
110110
raise IOError(
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import unittest
2+
from unittest.mock import patch, MagicMock
3+
from dev_tools.prepared_env import PreparedEnv
4+
from dev_tools.github_repository import GithubRepository
5+
6+
7+
class TestPreparedEnvSecurity(unittest.TestCase):
8+
@patch('requests.post')
9+
def test_report_status_to_github_token_in_header(self, mock_post):
10+
# Setup
11+
mock_response = MagicMock()
12+
mock_response.status_code = 201
13+
mock_post.return_value = mock_response
14+
15+
repo = GithubRepository('my-org', 'my-repo', 'my-token')
16+
env = PreparedEnv(repo, 'my-commit', 'compare-commit', None, None)
17+
18+
# Execute
19+
env.report_status_to_github('success', 'desc', 'ctx')
20+
21+
# Verify
22+
args, kwargs = mock_post.call_args
23+
url = args[0]
24+
headers = kwargs.get('headers', {})
25+
26+
# Security check: Token should NOT be in the URL
27+
self.assertNotIn('access_token=my-token', url, "Token should not be passed in the URL")
28+
29+
# Security check: Token should be in the Authorization header
30+
self.assertEqual(
31+
headers.get('Authorization'),
32+
'Bearer my-token',
33+
"Token should be passed in the Authorization header",
34+
)
35+
36+
37+
if __name__ == '__main__':
38+
unittest.main()

src/openfermion/chem/pubchem_test.py

Lines changed: 34 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,9 @@
1212

1313
"""Tests for pubchem.py."""
1414

15-
import time
16-
import unittest
17-
from unittest.mock import patch
18-
1915
import numpy
2016
import pytest
17+
import pubchempy
2118

2219
from openfermion.chem.pubchem import geometry_from_pubchem
2320
from openfermion.testing.testing_utils import module_importable
@@ -79,24 +76,24 @@ def mock_get_compounds(name, searchtype, record_type='2d'):
7976

8077

8178
@using_pubchempy
82-
class OpenFermionPubChemTest(unittest.TestCase):
79+
class TestOpenFermionPubChem:
8380

84-
@patch('pubchempy.get_compounds', mock_get_compounds)
85-
def test_water(self):
81+
def test_water(self, monkeypatch):
82+
monkeypatch.setattr(pubchempy, 'get_compounds', mock_get_compounds)
8683
water_geometry = geometry_from_pubchem('water')
87-
self.water_natoms = len(water_geometry)
88-
self.water_atoms = [water_atom[0] for water_atom in water_geometry]
89-
water_oxygen_index = self.water_atoms.index('O')
84+
water_natoms_actual = len(water_geometry)
85+
water_atoms = [water_atom[0] for water_atom in water_geometry]
86+
water_oxygen_index = water_atoms.index('O')
9087
water_oxygen = water_geometry.pop(water_oxygen_index)
9188
water_oxygen_coordinate = numpy.array(water_oxygen[1])
9289
water_hydrogen1_coordinate = numpy.array(water_geometry[0][1])
9390
water_hydrogen2_coordinate = numpy.array(water_geometry[1][1])
9491
water_oxygen_hydrogen1 = water_hydrogen1_coordinate - water_oxygen_coordinate
9592
water_oxygen_hydrogen2 = water_hydrogen2_coordinate - water_oxygen_coordinate
9693

97-
self.water_bond_length_1 = numpy.linalg.norm(water_oxygen_hydrogen1)
98-
self.water_bond_length_2 = numpy.linalg.norm(water_oxygen_hydrogen2)
99-
self.water_bond_angle = numpy.arccos(
94+
water_bond_length_1 = numpy.linalg.norm(water_oxygen_hydrogen1)
95+
water_bond_length_2 = numpy.linalg.norm(water_oxygen_hydrogen2)
96+
water_bond_angle = numpy.arccos(
10097
numpy.dot(
10198
water_oxygen_hydrogen1,
10299
water_oxygen_hydrogen2
@@ -108,51 +105,51 @@ def test_water(self):
108105
)
109106

110107
water_natoms = 3
111-
self.assertEqual(water_natoms, self.water_natoms)
108+
assert water_natoms == water_natoms_actual
112109

113-
self.assertAlmostEqual(self.water_bond_length_1, self.water_bond_length_2, places=4)
110+
assert water_bond_length_1 == pytest.approx(water_bond_length_2, abs=1e-4)
114111
water_bond_length_low = 0.9
115112
water_bond_length_high = 1.1
116-
self.assertTrue(water_bond_length_low <= self.water_bond_length_1)
117-
self.assertTrue(water_bond_length_high >= self.water_bond_length_1)
113+
assert water_bond_length_low <= water_bond_length_1
114+
assert water_bond_length_high >= water_bond_length_1
118115

119116
water_bond_angle_low = 100.0 / 360 * 2 * numpy.pi
120117
water_bond_angle_high = 110.0 / 360 * 2 * numpy.pi
121-
self.assertTrue(water_bond_angle_low <= self.water_bond_angle)
122-
self.assertTrue(water_bond_angle_high >= self.water_bond_angle)
118+
assert water_bond_angle_low <= water_bond_angle
119+
assert water_bond_angle_high >= water_bond_angle
123120

124-
@patch('pubchempy.get_compounds', mock_get_compounds)
125-
def test_helium(self):
121+
def test_helium(self, monkeypatch):
122+
monkeypatch.setattr(pubchempy, 'get_compounds', mock_get_compounds)
126123
helium_geometry = geometry_from_pubchem('helium')
127-
self.helium_natoms = len(helium_geometry)
124+
helium_natoms_actual = len(helium_geometry)
128125

129126
helium_natoms = 1
130-
self.assertEqual(helium_natoms, self.helium_natoms)
127+
assert helium_natoms == helium_natoms_actual
131128

132-
@patch('pubchempy.get_compounds', mock_get_compounds)
133-
def test_none(self):
129+
def test_none(self, monkeypatch):
130+
monkeypatch.setattr(pubchempy, 'get_compounds', mock_get_compounds)
134131
none_geometry = geometry_from_pubchem('none')
135132

136-
self.assertIsNone(none_geometry)
133+
assert none_geometry is None
137134

138-
@patch('pubchempy.get_compounds', mock_get_compounds)
139-
def test_water_2d(self):
135+
def test_water_2d(self, monkeypatch):
136+
monkeypatch.setattr(pubchempy, 'get_compounds', mock_get_compounds)
140137
water_geometry = geometry_from_pubchem('water', structure='2d')
141-
self.water_natoms = len(water_geometry)
138+
water_natoms_actual = len(water_geometry)
142139

143140
water_natoms = 3
144-
self.assertEqual(water_natoms, self.water_natoms)
141+
assert water_natoms == water_natoms_actual
145142

146-
self.oxygen_z_1 = water_geometry[0][1][2]
147-
self.oxygen_z_2 = water_geometry[1][1][2]
143+
oxygen_z_1 = water_geometry[0][1][2]
144+
oxygen_z_2 = water_geometry[1][1][2]
148145
z = 0
149-
self.assertEqual(z, self.oxygen_z_1)
150-
self.assertEqual(z, self.oxygen_z_2)
146+
assert z == oxygen_z_1
147+
assert z == oxygen_z_2
151148

152149
with pytest.raises(ValueError, match='Incorrect value for the argument structure'):
153150
_ = geometry_from_pubchem('water', structure='foo')
154151

155-
@pytest.mark.flaky(retries=3, delay=2)
152+
@pytest.mark.flaky(retries=3, delay=2, only_on=[pubchempy.ServerBusyError])
156153
def test_geometry_from_pubchem_live_api(self):
157-
water_geometry = geometry_from_pubchem('water') # pragma: no cover
158-
self.assertEqual(len(water_geometry), 3) # pragma: no cover
154+
water_geometry = geometry_from_pubchem('water')
155+
assert len(water_geometry) == 3

src/openfermion/ops/operators/binary_code.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919

2020
from openfermion.ops.operators import BinaryPolynomial
2121

22-
# import openfermion.ops.operators._binary_polynomial as bp
23-
2422

2523
def shift_decoder(decoder, shift_constant):
2624
"""Shifts the indices of a decoder by a constant.

src/openfermion/utils/commutators_test.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,38 @@ def test_double_commtator_more_info_both_hopping(self):
217217
com, (FermionOperator('4^ 3^ 4 2', 2.73) + FermionOperator('4^ 2^ 4 3', 2.73))
218218
)
219219

220+
def test_double_commutator_hopping_no_intersection(self):
221+
# Case where intersection is empty
222+
op1 = FermionOperator('0^ 0')
223+
op2 = FermionOperator('1^ 2') + FermionOperator('2^ 1')
224+
op3 = FermionOperator('3^ 4') + FermionOperator('4^ 3')
225+
res = double_commutator(
226+
op1,
227+
op2,
228+
op3,
229+
indices2={1, 2},
230+
indices3={3, 4},
231+
is_hopping_operator2=True,
232+
is_hopping_operator3=True,
233+
)
234+
self.assertEqual(res, FermionOperator.zero())
235+
236+
def test_double_commutator_hopping_multi_intersection(self):
237+
# Case where intersection has more than one element
238+
op1 = FermionOperator('0^ 0')
239+
op2 = FermionOperator('1^ 2') + FermionOperator('2^ 1')
240+
op3 = FermionOperator('1^ 2') + FermionOperator('2^ 1')
241+
res = double_commutator(
242+
op1,
243+
op2,
244+
op3,
245+
indices2={1, 2},
246+
indices3={1, 2},
247+
is_hopping_operator2=True,
248+
is_hopping_operator3=True,
249+
)
250+
self.assertEqual(res, FermionOperator.zero())
251+
220252

221253
class TriviallyDoubleCommutesDualBasisUsingTermInfoTest(unittest.TestCase):
222254
def test_number_operators_trivially_commute(self):

0 commit comments

Comments
 (0)