qrotor 4.1.0__py3-none-any.whl → 4.1.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of qrotor might be problematic. Click here for more details.

qrotor/_version.py CHANGED
@@ -8,7 +8,8 @@ Package version is defined here. Follows semantic versioning, as in:
8
8
  More about semantic versioning:
9
9
  https://semver.org/
10
10
 
11
+ ---
11
12
  """
12
13
 
13
- __version__ = 'v4.1.0'
14
+ __version__ = "v4.1.1"
14
15
 
qrotor/constants.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  # Description
3
3
 
4
- Common constants and default inertia values used in the QRotor subpackage.
4
+ Common constants and default inertia values used in QRotor.
5
5
 
6
6
  Bond lengths and angles were obtained from MAPbI3, see
7
7
  [K. Drużbicki *et al*., Crystal Growth & Design 24, 391–404 (2024)](https://doi.org/10.1021/acs.cgd.3c01112).
@@ -75,11 +75,15 @@ In meV units.
75
75
 
76
76
  # Quick conversion factors
77
77
  Ry_to_eV = const.physical_constants['Rydberg constant times hc in eV'][0]
78
- """Quick conversion factor from eV to Rydberg energy."""
78
+ """Quick conversion factor from Rydberg to eV energy."""
79
79
  Ry_to_meV = Ry_to_eV * 1000
80
- """Quick conversion factor from meV to Rydberg energy."""
80
+ """Quick conversion factor from Rydberg to meV energy."""
81
81
  eV_to_Ry = 1 / Ry_to_eV
82
- """Quick conversion factor from Rydberg to eV."""
82
+ """Quick conversion factor from eV to Rydberg."""
83
83
  meV_to_Ry = 1 / Ry_to_meV
84
- """Quick conversion factor from Rydberg to meV."""
84
+ """Quick conversion factor from meV to Rydberg."""
85
+ cm1_to_meV = (const.h * const.c * 100 / const.e) * 1000
86
+ """Quick conversion factor from cm$^{-1}$ to meV."""
87
+ meV_to_cm1 = 1/cm1_to_meV
88
+ """Quick conversion factor from meV to cm$^{-1}$."""
85
89
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qrotor
3
- Version: 4.1.0
3
+ Version: 4.1.1
4
4
  Summary: QRotor
5
5
  Author: Pablo Gila-Herranz
6
6
  Author-email: pgila001@ikasle.ehu.eus
@@ -0,0 +1,14 @@
1
+ qrotor/__init__.py,sha256=rG2dH4QjsVUOMBhFnv5gXs3QnrUg7fywd5pIDmMBXcQ,246
2
+ qrotor/_version.py,sha256=2MgvxBLj7nl20vruBp0VlxrcVaLnJcKclBipVBi68xM,198
3
+ qrotor/constants.py,sha256=XjKlaHnquVtrpt0vtNS1UoXeI9EWf-wzz2QAByJp_Ck,3376
4
+ qrotor/plot.py,sha256=th6eDoTB01KaVjfH2uiKMjU4VJMfdv0yK97PwCJydKI,13479
5
+ qrotor/potential.py,sha256=9NyekNIMbjiRtJ8G6CtCMHX5v-g7kKC8un2x3blq-2w,18320
6
+ qrotor/rotate.py,sha256=Wje9Q9SFhDvizz58MzNGBwsmgV-3wN9z2SnUNTIXzeg,8107
7
+ qrotor/solve.py,sha256=YkOR1SJlpk41PCNEhslv6X3wV1TWMNztT78qX3Pngf0,10722
8
+ qrotor/system.py,sha256=v6BFA9Pm1HbYdfm-XrPP7iWlbcvjxX7ynGBMOxDR7yc,11447
9
+ qrotor/systems.py,sha256=Hcx0QvMWpaPMfC6HWpkZPPWDyHk9rxWKdAxWNnD2NMg,8184
10
+ qrotor-4.1.1.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
11
+ qrotor-4.1.1.dist-info/METADATA,sha256=k0oAqJRLC6Rr8au36Lj_cmJYiFJVYtqfbTkEn94KOXM,8719
12
+ qrotor-4.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
13
+ qrotor-4.1.1.dist-info/top_level.txt,sha256=SFRMgcJiR1GiEtZ4aLo-x5TdfSCo7Igxezp2qyI0u5A,7
14
+ qrotor-4.1.1.dist-info/RECORD,,
@@ -1,20 +0,0 @@
1
- qrotor/__init__.py,sha256=rG2dH4QjsVUOMBhFnv5gXs3QnrUg7fywd5pIDmMBXcQ,246
2
- qrotor/_version.py,sha256=Nua4qsgx0bY8W7io9up8mEgvL_e9nuVunr--jEqP2LQ,194
3
- qrotor/constants.py,sha256=l25-YHxWQPr5RFGl8e0Hpdkc0E4ER03Gj-P9Jmbqelc,3203
4
- qrotor/plot.py,sha256=th6eDoTB01KaVjfH2uiKMjU4VJMfdv0yK97PwCJydKI,13479
5
- qrotor/potential.py,sha256=9NyekNIMbjiRtJ8G6CtCMHX5v-g7kKC8un2x3blq-2w,18320
6
- qrotor/rotate.py,sha256=Wje9Q9SFhDvizz58MzNGBwsmgV-3wN9z2SnUNTIXzeg,8107
7
- qrotor/solve.py,sha256=YkOR1SJlpk41PCNEhslv6X3wV1TWMNztT78qX3Pngf0,10722
8
- qrotor/system.py,sha256=v6BFA9Pm1HbYdfm-XrPP7iWlbcvjxX7ynGBMOxDR7yc,11447
9
- qrotor/systems.py,sha256=Hcx0QvMWpaPMfC6HWpkZPPWDyHk9rxWKdAxWNnD2NMg,8184
10
- qrotor-4.1.0.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
11
- tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- tests/test_constants.py,sha256=YHKkPyZlzjchxxzON_VSNsQdKnpkknsFVoIA6TcUk70,399
13
- tests/test_potential.py,sha256=_Vq9t9Xm59kNbyYwXlRnvKcxwL7vntD2j14W2aUtF6I,1302
14
- tests/test_rotate.py,sha256=2On2d1E82hdisFC5DXpaqqYNnteX7ZP3PAnGa_oGm2M,1896
15
- tests/test_solve.py,sha256=tEjLUZC7oe6LCQD5b2xf2aaK9lu-zI4lzuPXOGR2GAs,861
16
- tests/test_system.py,sha256=36d-8AdoJdzq0O9_O3s8wwBPGa-M7A86YiHqhhAsCZ8,742
17
- qrotor-4.1.0.dist-info/METADATA,sha256=-_zFlV6XwLwo5Oxrrf8lo-srb06KI5sF1SMJCJqAVAk,8719
18
- qrotor-4.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
19
- qrotor-4.1.0.dist-info/top_level.txt,sha256=mLnYs07-amqX4TqbDV2_XvgdpHfgrYmzmYb7dwoh6EQ,13
20
- qrotor-4.1.0.dist-info/RECORD,,
tests/__init__.py DELETED
File without changes
tests/test_constants.py DELETED
@@ -1,13 +0,0 @@
1
- import qrotor as qr
2
-
3
-
4
- def test_constants():
5
- assert round(qr.B_CH3, 5) == 0.64518
6
- assert round(qr.B_CD3, 5) == 0.32289
7
- assert round(qr.B_NH3, 5) == 0.73569
8
- assert round(qr.B_ND3, 5) == 0.36819
9
- assert round(qr.Ry_to_eV, 5) == 13.60569
10
- assert round(qr.Ry_to_meV, 5) == 13605.69312
11
- assert round(qr.eV_to_Ry, 5) == 0.07350
12
- assert round(qr.meV_to_Ry, 10) == .0000734986
13
-
tests/test_potential.py DELETED
@@ -1,37 +0,0 @@
1
- import qrotor as qr
2
- import aton
3
-
4
-
5
- folder = 'tests/samples/'
6
- structure = folder + 'CH3NH3.in'
7
- structure_120 = folder + 'CH3NH3_120.in'
8
- structure_60 = folder + 'CH3NH3_60.in'
9
-
10
-
11
- def test_save_and_load():
12
- system = qr.System()
13
- system.gridsize = 36
14
- system.potential_name = 'sin'
15
- system.B = 1
16
- system.solve_potential()
17
- potential_file = folder + '_temp_potential.csv'
18
- # Remove the file if it exists
19
- try:
20
- aton.file.remove(potential_file)
21
- except:
22
- pass
23
- qr.potential.save(system, comment='hi', filepath=potential_file)
24
- system_new = qr.potential.load(potential_file)
25
- assert system_new.gridsize == system.gridsize
26
- assert round(system_new.potential_values[0], 5) == round(system.potential_values[0], 5)
27
- assert round(system_new.potential_values[5], 5) == round(system.potential_values[5], 5)
28
- assert round(system_new.potential_values[13], 5) == round(system.potential_values[13], 5)
29
- assert system_new.comment == 'hi'
30
- aton.file.remove(potential_file)
31
- # If we don't provide a comment, it should be the name of the folder
32
- system.comment = None
33
- qr.potential.save(system, filepath=potential_file)
34
- system_new = qr.potential.load(potential_file)
35
- assert system_new.comment == 'samples'
36
- aton.file.remove(potential_file)
37
-
tests/test_rotate.py DELETED
@@ -1,53 +0,0 @@
1
- import qrotor as qr
2
- import aton.api as api
3
- import aton.txt.extract as extract
4
- import aton.file as file
5
-
6
-
7
- folder = 'tests/samples/'
8
- structure = folder + 'CH3NH3.in'
9
- structure_120 = folder + 'CH3NH3_120.in'
10
- structure_60 = folder + 'CH3NH3_60.in'
11
-
12
-
13
- def test_rotate():
14
- CH3 = [
15
- '0.100 0.183 0.316',
16
- '0.151 0.532 0.842',
17
- '0.118 0.816 0.277',
18
- ]
19
- # 120 degrees (it should remain the same)
20
- qr.rotate.structure_qe(filepath=structure, positions=CH3, angle=120, precision=2)
21
- for coord in CH3:
22
- rotated_coord = api.qe.get_atom(filepath=structure_120, position=coord, precision=2)
23
- rotated_coord = extract.coords(rotated_coord)
24
- coord = extract.coords(coord)
25
- rotated_coord_rounded = []
26
- coord_rounded = []
27
- for i in rotated_coord:
28
- rotated_coord_rounded.append(round(i, 2))
29
- for i in coord:
30
- coord_rounded.append(round(i, 2))
31
- assert coord_rounded == rotated_coord_rounded
32
- file.remove(structure_120)
33
-
34
- # 60 degrees (it should change quite a lot)
35
- ideal = [
36
- '0.146468644022416 0.837865866372631 0.641449758215011',
37
- '0.095062781582172 0.488975944606740 0.115053787468686',
38
- '0.128156574395412 0.205890189020629 0.680672454316303',
39
- ]
40
- qr.rotate.structure_qe(filepath=structure, positions=CH3, angle=60, precision=2)
41
- for coord in ideal:
42
- rotated_coord = api.qe.get_atom(filepath=structure_60, position=coord, precision=3)
43
- rotated_coord = extract.coords(rotated_coord)
44
- coord = extract.coords(coord)
45
- rotated_coord_rounded = []
46
- coord_rounded = []
47
- for i in rotated_coord:
48
- rotated_coord_rounded.append(round(i, 2))
49
- for i in coord:
50
- coord_rounded.append(round(i, 2))
51
- assert coord_rounded == rotated_coord_rounded
52
- file.remove(structure_60)
53
-
tests/test_solve.py DELETED
@@ -1,28 +0,0 @@
1
- import qrotor as qr
2
-
3
-
4
- def test_solve_zero():
5
- system = qr.System()
6
- system.gridsize = 50000
7
- system.potential_name = 'zero'
8
- system.B = 1
9
- system.solve()
10
- assert round(system.eigenvalues[0], 2) == 0.0
11
- assert round(system.eigenvalues[1], 2) == 1.0
12
- assert round(system.eigenvalues[2], 2) == 1.0
13
- assert round(system.eigenvalues[3], 2) == 4.0
14
- assert round(system.eigenvalues[4], 2) == 4.0
15
- assert round(system.eigenvalues[5], 2) == 9.0
16
- assert round(system.eigenvalues[6], 2) == 9.0
17
- assert round(system.eigenvalues[7], 2) == 16.0
18
- assert round(system.eigenvalues[8], 2) == 16.0
19
-
20
-
21
- def test_solve_potential():
22
- system = qr.System()
23
- system.gridsize = 500
24
- system.potential_name = 'sin'
25
- system.potential_constants = [0, 1, 3, 0]
26
- system.solve_potential()
27
- assert round(system.potential_max, 2) == 1.0
28
-
tests/test_system.py DELETED
@@ -1,24 +0,0 @@
1
- import qrotor as qr
2
- import numpy as np
3
-
4
-
5
- def test_phase():
6
- sys = qr.System()
7
- sys.B = 1.0
8
- sys.potential_name = 'cos'
9
- sys.gridsize = 10000
10
- sys.solve()
11
- # plus pi/2, which will be -3pi/2
12
- sys.change_phase(0.5)
13
- assert round(sys.grid[0], 2) == round(-np.pi * 3/2, 2)
14
- # The first potential value should be 0,
15
- # but remember that the potential offset is corrected
16
- # so it should be half potential_max, so 1.0/2
17
- assert round(sys.potential_values[0], 2) == 0.5
18
- # minus pi, which will become -pi/2
19
- sys.change_phase(-1)
20
- assert round(sys.grid[0], 2) == round(-np.pi/2, 2)
21
- assert round(sys.potential_values[0], 2) == 0.5
22
- # Were eigenvalues calculated?
23
- assert len(sys.eigenvalues) > 0
24
-
File without changes