MoleditPy 1.16.2__py3-none-any.whl → 1.16.4__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.
moleditpy/__main__.py CHANGED
@@ -5,7 +5,7 @@
5
5
  MoleditPy — A Python-based molecular editing software
6
6
 
7
7
  Author: Hiromichi Yokoyama
8
- License: Apache-2.0 license
8
+ License: GPL-3.0 license
9
9
  Repo: https://github.com/HiroYokoyama/python_molecular_editor
10
10
  DOI 10.5281/zenodo.17268532
11
11
  """
moleditpy/main.py CHANGED
@@ -5,7 +5,7 @@
5
5
  MoleditPy — A Python-based molecular editing software
6
6
 
7
7
  Author: Hiromichi Yokoyama
8
- License: Apache-2.0 license
8
+ License: GPL-3.0 license
9
9
  Repo: https://github.com/HiroYokoyama/python_molecular_editor
10
10
  DOI 10.5281/zenodo.17268532
11
11
  """
@@ -50,7 +50,7 @@ class AboutDialog(QDialog):
50
50
  layout.addWidget(self.image_label)
51
51
 
52
52
  # Add text information
53
- info_text = f"MoleditPy Ver. {VERSION}\nAuthor: Hiromichi Yokoyama\nLicense: Apache-2.0"
53
+ info_text = f"MoleditPy Ver. {VERSION}\nAuthor: Hiromichi Yokoyama\nLicense: GPL-3.0 license"
54
54
  info_label = QLabel(info_text)
55
55
  info_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
56
56
  layout.addWidget(info_label)
@@ -4,7 +4,7 @@ from PyQt6.QtGui import QFont, QColor
4
4
  from rdkit import Chem
5
5
 
6
6
  #Version
7
- VERSION = '1.16.2'
7
+ VERSION = '1.16.4'
8
8
 
9
9
  ATOM_RADIUS = 18
10
10
  BOND_OFFSET = 3.5
@@ -5,7 +5,7 @@
5
5
  MoleditPy — A Python-based molecular editing software
6
6
 
7
7
  Author: Hiromichi Yokoyama
8
- License: Apache-2.0 license
8
+ License: GPL-3.0 license
9
9
  Repo: https://github.com/HiroYokoyama/python_molecular_editor
10
10
  DOI 10.5281/zenodo.17268532
11
11
  """
@@ -727,61 +727,130 @@ class MoleculeScene(QGraphicsScene):
727
727
 
728
728
  # --- フューズされた辺の数による条件分岐 ---
729
729
  if len(existing_orders) >= 2:
730
- # 2辺以上フューズ: 単純に既存の辺の次数とテンプレートの辺の次数が一致するものを最優先する
731
- # (この場合、新しい環を交互配置にするのは難しく、単に既存の構造を壊さないことを優先)
730
+
732
731
  for rot in range(num_points):
733
- current_score = sum(100 for k, exist_order in existing_orders.items()
734
- if orig_orders[(k + rot) % num_points] == exist_order)
732
+ match_double_count = 0
733
+ match_bonus = 0
734
+ mismatch_penalty = 0
735
+
736
+ # 【新規追加】接続部(Legs)の安全性チェック
737
+ # フューズ領域の両隣(テンプレート側)が「単結合(1)」であることを強く推奨する
738
+ # これにより、既存構造との接続点での原子価オーバー(手が5本になる)を防ぐ
739
+ safe_connection_score = 0
740
+
741
+ # フューズ領域の開始と終了を探す(インデックス集合から判定)
742
+ fused_indices = sorted(list(existing_orders.keys()))
743
+ # 連続領域と仮定して、端のインデックスを取得
744
+ # (0と5がつながっている環状のケースも考慮すべきだが、簡易的に最小/最大で判定し、
745
+ # もし飛び地なら不整合ペナルティで自然と落ちる)
746
+
747
+ # 簡易的な隣接チェック:
748
+ # フューズに使われる辺集合に含まれない「その隣」の辺を見る
749
+ for k in existing_orders:
750
+ # 左隣を見る
751
+ prev_idx = (k - 1 + rot) % num_points
752
+ # 右隣を見る
753
+ next_idx = (k + 1 + rot) % num_points
754
+
755
+ # もし隣がフューズ領域外(=接続部)なら、その次数をチェック
756
+ # 注意: existing_ordersのキーは「配置位置(k)」
757
+ # rotはテンプレートのズレ。
758
+ # テンプレート上の該当エッジの次数は orig_orders[(neighbor_k + rot)] ではなく
759
+ # orig_orders[neighbor_template_index]
760
+
761
+ # 正確なロジック:
762
+ # 今、配置位置 k にテンプレートの bond (k+rot) が来ている。
763
+ # 配置位置 k の「隣のボンド」ではなく、
764
+ # 「テンプレート上で」そのボンドの両隣にあるボンドが、今回のフューズに使われていないか確認する。
765
+ pass
766
+
767
+ # --- シンプルな実装: 全ての非フューズ辺(外周になる辺)をチェック ---
768
+ # 「フューズに使われていない辺」が単結合か二重結合かで加点
769
+ # ピレンの場合(3辺フューズ)、残り3辺が外周。
770
+ # ベンゼン(D-S-D-S-D-S)において、D-S-Dでフューズすると、残りはS-D-S。
771
+ # 接合部(Legs)にあたるのは、残りのS-D-Sの両端のS。これが重要。
772
+
773
+ # テンプレートの結合次数配列
774
+ current_template_orders = [orig_orders[(i + rot) % num_points] for i in range(num_points)]
775
+
776
+ # フューズ領域の両端を特定するために、
777
+ # 「フューズしているk」に対応するテンプレート側のインデックスを集める
778
+ used_template_indices = set((k + rot) % num_points for k in existing_orders)
779
+
780
+ # テンプレート上で「使われている領域」の両隣(接続部)が「1(単結合)」なら超高得点
781
+ for t_idx in used_template_indices:
782
+ # そのボンドのテンプレート上の左隣
783
+ adj_l = (t_idx - 1) % num_points
784
+ # そのボンドのテンプレート上の右隣
785
+ adj_r = (t_idx + 1) % num_points
786
+
787
+ # もし隣が「使われていない」なら、それは接続部である
788
+ if adj_l not in used_template_indices:
789
+ if orig_orders[adj_l] == 1: safe_connection_score += 5000
790
+
791
+ if adj_r not in used_template_indices:
792
+ if orig_orders[adj_r] == 1: safe_connection_score += 5000
793
+
794
+ # 既存のスコア計算
795
+ for k, exist_order in existing_orders.items():
796
+ template_ord = orig_orders[(k + rot) % num_points]
797
+ if template_ord == exist_order:
798
+ match_bonus += 100
799
+ if exist_order == 2: match_double_count += 1
800
+ else:
801
+ # 不一致でも、Legsが安全なら許容したいのでペナルティは控えめに、
802
+ # または safe_connection_score が圧倒的に勝つようにする
803
+ mismatch_penalty += 50
804
+
805
+ # 最終スコア: 接続部の安全性を最優先
806
+ current_score = safe_connection_score + (match_double_count * 1000) + match_bonus - mismatch_penalty
807
+
735
808
  if current_score > max_score:
736
809
  max_score = current_score
737
810
  best_rot = rot
738
811
 
739
812
  elif len(existing_orders) == 1:
740
- # 1辺フューズ: 既存の辺を維持しつつ、その両隣で「反転一致」を達成し、新しい環を交互配置にする
741
-
742
- # フューズされた辺のインデックスと次数を取得
813
+ # 1辺フューズ
743
814
  k_fuse = next(iter(existing_orders.keys()))
744
815
  exist_order = existing_orders[k_fuse]
745
816
 
746
- # 目標: フューズされた辺の両隣(k-1とk+1)に来るテンプレートの次数が、既存の辺の次数と逆であること
747
- # k_adj_1 -> (k_fuse - 1) % 6
748
- # k_adj_2 -> (k_fuse + 1) % 6
749
-
750
817
  for rot in range(num_points):
751
818
  current_score = 0
752
819
  rotated_template_order = orig_orders[(k_fuse + rot) % num_points]
753
820
 
754
- # 1. まず、フューズされた辺自体が次数を反転させられる位置にあるかチェック(必須ではないが、回転を絞る)
821
+ # 1. 接合部の次数マッチング
822
+
823
+ # パターンA: 交互配置(既存と逆)
755
824
  if (exist_order == 1 and rotated_template_order == 2) or \
756
825
  (exist_order == 2 and rotated_template_order == 1):
757
- current_score += 100 # 大幅ボーナス: 理想的な回転
826
+ current_score += 100
758
827
 
759
- # 2. 次に、両隣の辺の次数をチェック(交互配置維持の主目的)
760
- # 既存辺の両隣は、新規に作成されるため、テンプレートの次数でボンドが作成されます。
761
- # ここで、テンプレートの次数が既存辺の次数と逆になる回転を選ぶ必要があります。
762
-
763
- # テンプレートの辺は、回転後のk_fuseの両隣(m_adj1, m_adj2)
828
+ # 【追加変更点2】二重結合の重ね合わせ(共役維持)
829
+ # 既存が二重結合で、テンプレートも二重結合なら、ここで1つ消費される
830
+ elif (exist_order == 2 and rotated_template_order == 2):
831
+ current_score += 100
832
+
833
+ # 2. 両隣の辺の次数チェック(交互配置の維持を確認)
764
834
  m_adj1 = (k_fuse - 1 + rot) % num_points
765
835
  m_adj2 = (k_fuse + 1 + rot) % num_points
766
-
767
836
  neighbor_order_1 = orig_orders[m_adj1]
768
837
  neighbor_order_2 = orig_orders[m_adj2]
769
838
 
770
- # 既存が単結合(1)の場合、両隣は二重結合(2)であってほしい
771
839
  if exist_order == 1:
840
+ # 接合部が単なら、隣は二重であってほしい
772
841
  if neighbor_order_1 == 2: current_score += 50
773
842
  if neighbor_order_2 == 2: current_score += 50
774
843
 
775
- # 既存が二重結合(2)の場合、両隣は単結合(1)であってほしい
776
844
  elif exist_order == 2:
845
+ # 接合部が二重なら、隣は単であってほしい
777
846
  if neighbor_order_1 == 1: current_score += 50
778
847
  if neighbor_order_2 == 1: current_score += 50
779
848
 
780
- # 3. タイブレーク: その他の既存結合(フューズ辺ではない)との次数一致度も加味
849
+ # 3. タイブレーク(他の接触しない辺との整合性など)
781
850
  for k, e_order in existing_orders.items():
782
851
  if k != k_fuse:
783
852
  r_t_order = orig_orders[(k + rot) % num_points]
784
- if r_t_order == e_order: current_score += 10 # 既存構造維持のボーナス
853
+ if r_t_order == e_order: current_score += 10
785
854
 
786
855
  if current_score > max_score:
787
856
  max_score = current_score
@@ -204,7 +204,7 @@ class SettingsDialog(QDialog):
204
204
 
205
205
  # 化学チェックスキップオプション(otherタブに移動)
206
206
  self.skip_chem_checks_checkbox = QCheckBox()
207
- self.skip_chem_checks_checkbox.setToolTip("When enabled, file import will try to ignore chemical/sanitization errors and allow viewing malformed files.")
207
+ self.skip_chem_checks_checkbox.setToolTip("When enabled, XYZ file import will try to ignore chemical/sanitization errors and allow viewing malformed files.")
208
208
  # Immediately persist change to settings when user toggles the checkbox
209
209
  try:
210
210
  self.skip_chem_checks_checkbox.stateChanged.connect(lambda s: self._on_skip_chem_checks_changed(s))
@@ -213,7 +213,7 @@ class SettingsDialog(QDialog):
213
213
 
214
214
  # Add the checkbox to the other tab's form
215
215
  try:
216
- self.other_form_layout.addRow("Skip chemistry checks on import xyz file:", self.skip_chem_checks_checkbox)
216
+ self.other_form_layout.addRow("Skip chemistry checks on import XYZ file:", self.skip_chem_checks_checkbox)
217
217
  except Exception:
218
218
  pass
219
219
 
@@ -227,7 +227,7 @@ class SettingsDialog(QDialog):
227
227
  self.always_ask_charge_checkbox = QCheckBox()
228
228
  self.always_ask_charge_checkbox.setToolTip("Prompt for overall molecular charge when importing XYZ files instead of silently trying charge=0 first.")
229
229
  try:
230
- self.other_form_layout.addRow("Always ask molecular charge on import:", self.always_ask_charge_checkbox)
230
+ self.other_form_layout.addRow("Always ask molecular charge on import XYZ file:", self.always_ask_charge_checkbox)
231
231
  except Exception:
232
232
  pass
233
233
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MoleditPy
3
- Version: 1.16.2
3
+ Version: 1.16.4
4
4
  Summary: A cross-platform, simple, and intuitive molecular structure editor built in Python. It allows 2D molecular drawing and 3D structure visualization. It supports exporting structure files for input to DFT calculation software.
5
5
  Author-email: HiroYokoyama <titech.yoko.hiro@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/HiroYokoyama/python_molecular_editor
@@ -18,11 +18,11 @@ Classifier: Programming Language :: Python :: 3.13
18
18
  Requires-Python: <3.14,>=3.9
19
19
  Description-Content-Type: text/markdown
20
20
  Requires-Dist: numpy
21
- Requires-Dist: openbabel-wheel<3.2
22
21
  Requires-Dist: pyqt6<6.10
23
22
  Requires-Dist: pyvista<0.47
24
23
  Requires-Dist: pyvistaqt<0.12
25
24
  Requires-Dist: rdkit<2025.10
25
+ Requires-Dist: openbabel-wheel<3.2
26
26
 
27
27
  # MoleditPy — A Python Molecular Editor
28
28
 
@@ -32,7 +32,7 @@ Requires-Dist: rdkit<2025.10
32
32
  **MoleditPy** is a cross-platform, intuitive molecular editor built in Python. It provides a seamless workflow for drawing 2D molecular structures, visualizing them in 3D, and performing interactive geometric manipulations. Its powerful editing and export capabilities make it an ideal tool for preparing input files for DFT calculation software.
33
33
 
34
34
  **Author**: HiroYokoyama
35
- **License**: Apache-2.0
35
+ **License**: GPL-v3
36
36
  **Repository**: [https://github.com/HiroYokoyama/python\_molecular\_editor](https://github.com/HiroYokoyama/python_molecular_editor)
37
37
 
38
38
  -----
@@ -108,8 +108,6 @@ For detailed instructions, please refer to the project [Wiki](https://github.com
108
108
  moleditpy-installer
109
109
  ```
110
110
 
111
- -----
112
-
113
111
  #### Running the Application
114
112
 
115
113
  ```bash
@@ -142,7 +140,7 @@ moleditpy
142
140
 
143
141
  ## License
144
142
 
145
- This project is licensed under the **Apache-2.0 License**. See the `LICENSE` file for details.
143
+ This project is licensed under the **GNU General Public License v3.0 (GPL-v3)**. See the `LICENSE` file for details.
146
144
 
147
145
  -----
148
146
 
@@ -151,7 +149,7 @@ This project is licensed under the **Apache-2.0 License**. See the `LICENSE` fil
151
149
  **MoleditPy**は、Pythonで構築されたクロスプラットフォームかつ直感的な分子エディターです。2Dでの分子描画から3D構造の可視化・編集、さらにはインタラクティブな幾何学的操作まで、シームレスなワークフローを提供します。その強力な編集機能とエクスポート機能により、**DFT計算ソフトウェアのインプット作成に最適なツール**です。
152
150
 
153
151
  **作者**: HiroYokoyama
154
- **ライセンス**: Apache-2.0
152
+ **ライセンス**: GPL-v3
155
153
  **リポジトリ**: [https://github.com/HiroYokoyama/python\_molecular\_editor](https://github.com/HiroYokoyama/python_molecular_editor)
156
154
 
157
155
  -----
@@ -256,4 +254,4 @@ moleditpy
256
254
 
257
255
  ## ライセンス
258
256
 
259
- このプロジェクトは **Apache-2.0 License** のもとで公開されています。詳細は `LICENSE` ファイルを参照してください。
257
+ このプロジェクトは **GNU General Public License v3.0 (GPL-v3)** のもとで公開されています。詳細は `LICENSE` ファイルを参照してください。
@@ -1,8 +1,8 @@
1
1
  moleditpy/__init__.py,sha256=QCzpw3P5V_CwDtN4itK4hT9J99JgsH4gmpTfvuus6p8,46
2
- moleditpy/__main__.py,sha256=az0UrbFsuprbQYycF_bSUXxb0F20DuLvYxrZl1-X5EU,831
3
- moleditpy/main.py,sha256=cEZJuCL0HrLPUYvuwPSxgUkaDykVb573A-3qVvjF9RM,1180
2
+ moleditpy/__main__.py,sha256=P4BoaqZ-SgKGoErMZIWRKhzH6CbR8q34ipQ6RtQUEko,828
3
+ moleditpy/main.py,sha256=fI7A2zxlhrtXsyDCLJ3iiGeAc28FSaAj4MPnqBoA8GU,1177
4
4
  moleditpy/modules/__init__.py,sha256=X2Z0R5XpAoOehXdOv_6VlRm4rjt4zb1KPNSoLYIZsqg,1456
5
- moleditpy/modules/about_dialog.py,sha256=ZztVzLIQgH5mfMMOD-eAhYUbecUn8JaBtbCUg8O12t4,3409
5
+ moleditpy/modules/about_dialog.py,sha256=wIcfJe51TgyXQtR9TBUdT6f7xWd3JQOvRpU3pWiOr00,3414
6
6
  moleditpy/modules/align_plane_dialog.py,sha256=D6E0_rM75rKirDkvkJ-diRqNkf8IguqBBLQqDvZJHME,11665
7
7
  moleditpy/modules/alignment_dialog.py,sha256=tS2_5-wnJRDhLcWtPm9-HUm4_v4bAr53EjV82vydA-k,11140
8
8
  moleditpy/modules/analysis_window.py,sha256=asSCm7bgDW00tGaXSwEN17j-de_BN7ql6iwmxb3f54E,9134
@@ -12,13 +12,13 @@ moleditpy/modules/bond_item.py,sha256=zjQHa4vb8xhS9B7cYPRM0nak-f7lr5NQ1uAj_J78ah
12
12
  moleditpy/modules/bond_length_dialog.py,sha256=xlx-bU3tVeLfShdVRw6_Geo5Gl9mztlIfTdT9tJ6WMA,14579
13
13
  moleditpy/modules/calculation_worker.py,sha256=detE48BW08a2tvmKjMgz8zCShgARzsRH-ABmWrPcqZA,42055
14
14
  moleditpy/modules/color_settings_dialog.py,sha256=h4AOKU8dCTenecI8zOM9GfnmKDm7jfe5C4Fa23Budvs,15205
15
- moleditpy/modules/constants.py,sha256=VhLR-kW7vk-FVBIofus1gkhbr3rmoHe4ycjPIqC4org,4434
15
+ moleditpy/modules/constants.py,sha256=A_fwyC7OzUuRVbVF5LQ7EQiJ75Wop2fdnwcdKxmXzW0,4434
16
16
  moleditpy/modules/constrained_optimization_dialog.py,sha256=MlWnPze0JJvnqmHx9n3qZWG_h-2kZymT0PQ6lALbCro,29861
17
17
  moleditpy/modules/custom_interactor_style.py,sha256=K_uGM6FezY0kZ3zPqoR6f0nowG40ytt-L4UCAbPlwGM,38184
18
18
  moleditpy/modules/custom_qt_interactor.py,sha256=6mzaVb3Mhp-4nryG5AraEvPPgBJpotrzVYwrpCAKmVo,2186
19
19
  moleditpy/modules/dialog3_d_picking_mixin.py,sha256=gaF1ATevvvF72aBfAjubRcagT2jnVG5RMpEKos_XdKg,4768
20
20
  moleditpy/modules/dihedral_dialog.py,sha256=H6WFvc7NvPHSd5QCMk0NUPhudOzpModXv-42dYL20KM,17809
21
- moleditpy/modules/main_window.py,sha256=Ii36JTPSkZNaqqEc8CXZ1bq9accIMg5yUs1U7_pHgYM,35791
21
+ moleditpy/modules/main_window.py,sha256=mYxSk_KbiRNP0snhiJNN7plzzXNg3B7i-UJSW2q_Kk4,35788
22
22
  moleditpy/modules/main_window_app_state.py,sha256=f9f3JVuC46ijlea2DR8ADa0Jn5r2dgedPPdg8OkmNAU,33374
23
23
  moleditpy/modules/main_window_compute.py,sha256=fiIokVvjzXIwwR3FV3Ltet_K4oL_rT0Z27rPMbvlyyc,51346
24
24
  moleditpy/modules/main_window_dialog_manager.py,sha256=5WU6mFABB0aI4XCywP-cLFPkNQSb3bC0OK0I28SQG_w,19845
@@ -34,11 +34,11 @@ moleditpy/modules/main_window_view_3d.py,sha256=DgEnR4IlOVjMn45JdILEU7krUU6d5AcW
34
34
  moleditpy/modules/main_window_view_loaders.py,sha256=WuzLCYC22eaDFIvUvRtXgULZb-n4B04gcdgSKqTgWGA,14234
35
35
  moleditpy/modules/mirror_dialog.py,sha256=wYlnqrxAZfsADB5Gvabe-MoX3j0_NjfmWPyf3GCYj9U,4427
36
36
  moleditpy/modules/molecular_data.py,sha256=OCdiRIDXgnqYCKmf56x6XfbOJYTEQjY-MtBfnYZtTWY,12981
37
- moleditpy/modules/molecule_scene.py,sha256=F7W7HLctfqbtM0gI76fcyEar6Q5t_rWoy1cAPUTYrMg,90222
37
+ moleditpy/modules/molecule_scene.py,sha256=ULUYAq4Hmz1e1V8E4xxplw00L_NTq5XmAxJn9NUoCoU,94612
38
38
  moleditpy/modules/move_group_dialog.py,sha256=MVVdy0R-HIHcsCWD2yBVDWoDN4NFXPkOc72dq9laBP4,26905
39
39
  moleditpy/modules/periodic_table_dialog.py,sha256=slh1X-6YidaQGzQamrKJ6aetIMKTQLRlBfaAH6B6qfw,3737
40
40
  moleditpy/modules/planarize_dialog.py,sha256=u8IZGUEIXnVrBOXBqJefQpFqz3wiU6oLXp4gBNcC7Iw,8402
41
- moleditpy/modules/settings_dialog.py,sha256=t2UbSsQSdcoZ5nKrayvSNoAoU1oR8lW1PGyvvIrBij0,60645
41
+ moleditpy/modules/settings_dialog.py,sha256=7pVPc4zg6l4FXb1b_2gr0aYXufomFDJqa0yUtS54dgA,60658
42
42
  moleditpy/modules/template_preview_item.py,sha256=KDuLEZpPSMm9ZB0z5ms8LZyHbFKvszemG0XnR5vi0qg,6404
43
43
  moleditpy/modules/template_preview_view.py,sha256=AXUaFJR0E1yX9dBY9IDbxYNsBTcRFZWnDwpS_pRZXhs,3081
44
44
  moleditpy/modules/translation_dialog.py,sha256=gIG_mz4wc4y4ZNq02Ql33ek6B-DrOf1pdWF3FsViCT4,14394
@@ -47,8 +47,8 @@ moleditpy/modules/zoomable_view.py,sha256=ZgAmmWXIKtx7AhMjs6H6PCyvb_kpYuankf8Uxs
47
47
  moleditpy/modules/assets/icon.icns,sha256=wD5R6-Vw7K662tVKhu2E1ImN0oUuyAP4youesEQsn9c,139863
48
48
  moleditpy/modules/assets/icon.ico,sha256=RfgFcx7-dHY_2STdsOQCQziY5SNhDr3gPnjO6jzEDPI,147975
49
49
  moleditpy/modules/assets/icon.png,sha256=kCFN1WacYIdy0GN6SFEbNA00ef39pCczBnFdkkBI8Bs,147110
50
- moleditpy-1.16.2.dist-info/METADATA,sha256=xd9XxsFgYuJ5QljjIVMkGTOX4QlwXdmrqJKIib9RzOw,17356
51
- moleditpy-1.16.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
52
- moleditpy-1.16.2.dist-info/entry_points.txt,sha256=yH1h9JjALhok1foXT3-hYrC4ufoZt8b7oiBcsdnGNNM,54
53
- moleditpy-1.16.2.dist-info/top_level.txt,sha256=ARICrS4ihlPXqywlKl6o-oJa3Qz3gZRWu_VZsQ3_c44,10
54
- moleditpy-1.16.2.dist-info/RECORD,,
50
+ moleditpy-1.16.4.dist-info/METADATA,sha256=D5Sit5Ban30beY8nsVHg9rBiImPsY5LmvXTK9dPH6Uw,17383
51
+ moleditpy-1.16.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
52
+ moleditpy-1.16.4.dist-info/entry_points.txt,sha256=yH1h9JjALhok1foXT3-hYrC4ufoZt8b7oiBcsdnGNNM,54
53
+ moleditpy-1.16.4.dist-info/top_level.txt,sha256=ARICrS4ihlPXqywlKl6o-oJa3Qz3gZRWu_VZsQ3_c44,10
54
+ moleditpy-1.16.4.dist-info/RECORD,,