re-common 10.0.5__py3-none-any.whl → 10.0.6__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.
@@ -299,6 +299,7 @@ def AuthorRatio(
299
299
  if len(sort_l1) == len(sort_l2) and (is_same_or_initials_match(sort_l1, sort_l2) or set(sort_l1) == set(sort_l2)):
300
300
  return 0.99
301
301
 
302
+
302
303
  ##############################################################
303
304
  # 以上为情况穷举情况,以下为其他情况的相似率计算
304
305
  ##############################################################
@@ -157,6 +157,70 @@ def parse_expression(tokens):
157
157
  return tree
158
158
 
159
159
 
160
+ def flatten_tree(node):
161
+ """清理语法树,将嵌套的同级 and/or 节点展平。
162
+
163
+ Args:
164
+ node (Node): 输入的语法树节点
165
+
166
+ Returns:
167
+ Node: 清理后的新语法树节点
168
+ """
169
+ # 如果没有子节点,直接返回原节点(条件节点)
170
+ if not node.children:
171
+ return Node(value=node.value, children=[])
172
+
173
+ # 递归清理所有子节点
174
+ cleaned_children = [flatten_tree(child) for child in node.children]
175
+
176
+ # 如果当前节点是 'and' 或 'or',展平嵌套的同类节点
177
+ if node.value in ('and', 'or'):
178
+ flattened_children = []
179
+ for child in cleaned_children:
180
+ # 如果子节点的值与当前节点相同(例如 'or' 下的 'or'),将其子节点提升
181
+ if child.value == node.value:
182
+ flattened_children.extend(child.children)
183
+ else:
184
+ flattened_children.append(child)
185
+ return Node(value=node.value, children=flattened_children)
186
+
187
+ # 对于其他节点(例如 'not'),保持结构不变,只更新子节点
188
+ return Node(value=node.value, children=cleaned_children)
189
+
190
+
191
+ def pretty_print_tree(node, indent=0, prefix=""):
192
+ """生成语法树的格式化字符串表示,带有层次缩进。
193
+
194
+ Args:
195
+ node (Node): 要格式化的语法树节点
196
+ indent (int): 当前缩进级别(空格数),默认从 0 开始
197
+ prefix (str): 前缀字符串,用于表示当前行的开头
198
+
199
+ Returns:
200
+ str: 格式化后的树形字符串
201
+ """
202
+ # 基本缩进单位
203
+ spaces = " " * indent
204
+
205
+ # 如果没有子节点,返回单行表示
206
+ if not node.children:
207
+ return f"{spaces}{prefix}Node(value='{node.value}', children=[])"
208
+
209
+ # 构建当前节点的字符串
210
+ result = [f"{spaces}{prefix}Node(value='{node.value}', children=["]
211
+
212
+ # 递归处理每个子节点
213
+ for i, child in enumerate(node.children):
214
+ is_last = i == len(node.children) - 1
215
+ child_prefix = " " if is_last else " "
216
+ result.append(pretty_print_tree(child, indent + 4, child_prefix))
217
+
218
+ # 添加结束括号
219
+ result.append(f"{spaces}])")
220
+
221
+ # 将所有行连接成一个字符串
222
+ return "\n".join(result)
223
+
160
224
  # 测试代码
161
225
  expressions = [
162
226
  "not A=1 and B= 2",
@@ -173,6 +237,8 @@ for expr in expressions:
173
237
  tokens = tokenize(expr)
174
238
  print("Tokens:", tokens)
175
239
  tree = parse_expression(tokens)
240
+ tree = flatten_tree(tree)
241
+ tree = pretty_print_tree(tree)
176
242
  print("Tree:", tree)
177
243
  except ValueError as e:
178
244
  print(f"Error: {e}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: re_common
3
- Version: 10.0.5
3
+ Version: 10.0.6
4
4
  Summary: a library about all python projects
5
5
  Home-page: https://gitee.com/xujiangios/re-common
6
6
  Author: vic
@@ -173,11 +173,11 @@ re_common/v2/baselibrary/tools/text_matcher.py,sha256=F4WtLO-b7H6V9TIvOntCD9ZXSQ
173
173
  re_common/v2/baselibrary/tools/unionfind_tools.py,sha256=VYHZZPXwBYljsm7TjV1B6iCgDn3O3btzNf9hMvQySVU,2965
174
174
  re_common/v2/baselibrary/utils/BusinessStringUtil.py,sha256=tzjVr_-6iPAKTt14hR-BhRshdRgeT_MPJpUQkxcTXns,4084
175
175
  re_common/v2/baselibrary/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
176
- re_common/v2/baselibrary/utils/author_smi.py,sha256=zl3VQHgFbPIV9WgyeJNvqr_E39uefYxCGXlAW2s6lzc,13664
176
+ re_common/v2/baselibrary/utils/author_smi.py,sha256=1ebH3AHv19jtJWdlqNdwu6t58HNVLCotuCB6ff1SWiw,13666
177
177
  re_common/v2/baselibrary/utils/basedict.py,sha256=tSV85pARe8ZQDY77_h_heS81EWwcgJW076DcA9WQyjY,1161
178
178
  re_common/v2/baselibrary/utils/basehdfs.py,sha256=NVV5Q0OMPlM_zTrs9ZDoPJv29GQv5wi9-AP1us5dBrQ,4651
179
179
  re_common/v2/baselibrary/utils/json_cls.py,sha256=dHOkWafG9lbQDoub9cbDwT2fDjMKtblQnjFLeA4hECA,286
180
- re_common/v2/baselibrary/utils/n_ary_expression_tree.py,sha256=B_QOkMM-91_a9a1LptKVcgiePP7VgT1nYACqAMxuIz8,6797
180
+ re_common/v2/baselibrary/utils/n_ary_expression_tree.py,sha256=-05kO6G2Rth7CEK-5lfFrthFZ1Q0-0a7cni7mWZ-2gg,9172
181
181
  re_common/v2/baselibrary/utils/string_bool.py,sha256=4VCr1g8pX5YnzZSKctQgQfmhSQ0aw7a8ruhWdiRmBFU,641
182
182
  re_common/v2/baselibrary/utils/string_clear.py,sha256=sKKXEqCtItbJxsjgrBXBeubXaiAYuoc0301EOVFzXbk,3627
183
183
  re_common/v2/baselibrary/utils/stringutils.py,sha256=GLXHAm8IulC_8hWrN2aiFQjsoOpjczvcVozmTJj86-A,3864
@@ -207,8 +207,8 @@ re_common/vip/title/transform/TransformRegulationTitleToZt.py,sha256=LKRdIsWKues
207
207
  re_common/vip/title/transform/TransformStandardTitleToZt.py,sha256=-fCKAbSBzXVyQDCE61CalvR9E_QzQMA08QOO_NePFNI,5563
208
208
  re_common/vip/title/transform/TransformThesisTitleToZt.py,sha256=QS-uV0cQrpUFAcKucuJQ9Ue2VRQH-inmfn_X3IplfRo,5488
209
209
  re_common/vip/title/transform/__init__.py,sha256=m83-CWyRq_VHPYHaALEQlmXrkTdrZ3e4B_kCfBYE-uc,239
210
- re_common-10.0.5.dist-info/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
211
- re_common-10.0.5.dist-info/METADATA,sha256=BkA_XQSbOWWG7HRTWW5d9zgsIGCH8-J2jCsvE56NPZo,581
212
- re_common-10.0.5.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
213
- re_common-10.0.5.dist-info/top_level.txt,sha256=_H9H23zoLIalm1AIY_KYTVh_H0ZnmjxQIxsvXtLv45o,10
214
- re_common-10.0.5.dist-info/RECORD,,
210
+ re_common-10.0.6.dist-info/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
211
+ re_common-10.0.6.dist-info/METADATA,sha256=4gcNYlu46W2s5D1IRTzBtM_Sp3DtETT51Xxv-RkX7Ns,581
212
+ re_common-10.0.6.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
213
+ re_common-10.0.6.dist-info/top_level.txt,sha256=_H9H23zoLIalm1AIY_KYTVh_H0ZnmjxQIxsvXtLv45o,10
214
+ re_common-10.0.6.dist-info/RECORD,,