osis-python 0.3.4__py3-none-any.whl → 0.3.8__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: osis-python
3
- Version: 0.3.4
3
+ Version: 0.3.8
4
4
  Summary: A Python client library for Osis APDL
5
5
  Author-email: "CCCC Highway Consultant Co. Ltd." <support@osisbim.com>
6
6
  License-Expression: MIT
@@ -1,8 +1,8 @@
1
- osis_python-0.3.4.dist-info/licenses/LICENSE,sha256=T4mkSYliXdU9mYe-NfHkqg6GPhzoYaIQO_a630UzpS4,1088
2
- pyosis/__init__.py,sha256=tp11iskunesiLirMJL6IFF00KW_iDJ8Cq-Sgbfks1Fo,465
1
+ osis_python-0.3.8.dist-info/licenses/LICENSE,sha256=T4mkSYliXdU9mYe-NfHkqg6GPhzoYaIQO_a630UzpS4,1088
2
+ pyosis/__init__.py,sha256=W2iNNHp0qhc2oZT8Xlln7_q0jPdSbQMzW_rvQrc87ds,501
3
3
  pyosis/boundary/__init__.py,sha256=W5LfF-jugWa-YI8pnfELZaz0pXLa-D8TiGnBn12HGGQ,102
4
4
  pyosis/boundary/interface.py,sha256=jkfyzMY15_Aw8DpVCTXVRXJk0EuTDSeNzzs1mvL7wIU,8882
5
- pyosis/boundary/manager.py,sha256=AFEsnQOV3A7XxsBjn4Z1F_qC34Lwlh6E6s44ggq9DEM,29077
5
+ pyosis/boundary/manager.py,sha256=VKoYCOTGUsZ2OOQLTzMDHEFnQ8LCWLR5TFZ1wtf09YE,29455
6
6
  pyosis/control/__init__.py,sha256=98UAXB9Wkf93pGUKIjoGBBrSCblVeAwc_MXeaAB-UIA,119
7
7
  pyosis/control/control.py,sha256=AUNFhkWhmfvOjNG8_RZuN2Pu80q5ANDpBLeXZTFhsQ0,2279
8
8
  pyosis/control/io.py,sha256=buaut3-W8kwJIe3PgjtgOU0JCSgDfOEd2cS3mxYsfuc,591
@@ -10,35 +10,35 @@ pyosis/control/manager.py,sha256=9lP2Y3Q6dM4tJqLPxS48BhYS0t-CmYgIAm3hJDVgwKs,674
10
10
  pyosis/control/nonlinear.py,sha256=26W_2GhD_0cn3YQxJjgbPR1oEopJWyuFWGlgx0q023I,1604
11
11
  pyosis/core/__init__.py,sha256=ohE6BQddjdaSlM16lvphPmoNmQRaxZyjbhXqwwvN8eU,377
12
12
  pyosis/core/all_func.py,sha256=iJZasXz49i7IlJ-2erNfX1s2iohNYCt0PRKrfQpgvg8,497
13
- pyosis/core/client.py,sha256=koIr-YX9MfAmehPnMLajKk113wrHHTw7D-yUtBsTmIA,2492
14
- pyosis/core/command.py,sha256=TKBBuvWSi7lnoLJq1pamH0EEZlrnxx3FDrfi8t73gvE,9949
15
- pyosis/core/engine.py,sha256=fy2HIqE25gW3ccDVlKwTQOZYj3TNpUqrB_d8Bi3ebYw,12485
16
- pyosis/dynamic/__init__.py,sha256=0OAWw2wnjlqhIqT4bMZB_czG-5BilGM7BW5M7Ve5FiM,344
13
+ pyosis/core/client.py,sha256=AZpBSF8GJVIXHhzT_NVb4njQUJSZogcI6ieoFGbzop8,2307
14
+ pyosis/core/command.py,sha256=pGefHCbM9CRt-GmdLpLoIGQS6sZW0fCoM6nHykKiAf4,8372
15
+ pyosis/core/engine.py,sha256=baPHgZgu5Pqq8WB3h0iUhACwvSqJFJaKaApyhoe9k7A,12485
16
+ pyosis/dynamic/__init__.py,sha256=ThVGZWd8qryNJc99IPKJ7oA10hg1skiHTYvWPBelB2U,314
17
17
  pyosis/dynamic/load_to_mass.py,sha256=zGUDADo4bo3J7KsIcSD5FmcL-I-ly81DUKAxfSZYqNs,2924
18
- pyosis/dynamic/manager.py,sha256=3VC6rf5i3YQe6dDJOrhB6k3xaziTtAkOYDDkv0kkhjU,11765
18
+ pyosis/dynamic/manager.py,sha256=6tLZHdzz7SyGHIkxQxOko_C46bSQAtnBW-zp6ir4ARI,18684
19
19
  pyosis/dynamic/modal.py,sha256=__as3Nl7Ks2ntgcZwAA9UhvsvTfBl-1zSUOTsnPVf-Y,640
20
20
  pyosis/dynamic/seismic.py,sha256=_YygF_hkISsbImdNYg-OmsO36Ra_c4z53lbwvw0u340,6215
21
21
  pyosis/element/__init__.py,sha256=fZgmxJiNhCe3Ki8vNEdZOhyinxwvlF6Jcu-DgD-c6YM,92
22
22
  pyosis/element/interface.py,sha256=TEUxsUEAs4s6op1WPHxAQiWkBXSNR4gDZDI9N2QydF0,9902
23
- pyosis/element/manager.py,sha256=VSM0PYKSx7LEQI3U7JjTODTp-fo2mR7X9lsUo0hStkM,20362
23
+ pyosis/element/manager.py,sha256=_G_0Z6GnfiJm6-M7muJeKIuxhhoCXrj0aMLdweIWVGk,23383
24
24
  pyosis/general/__init__.py,sha256=dyvge-GgUpT3BeDwm_Lss1xqNlxAQdt63WJ7QcuZ_O4,24
25
- pyosis/general/interface.py,sha256=mREPpODBOuvKy5pi9r8sv802uc8-MFQCCdPND_dpxb8,5610
25
+ pyosis/general/interface.py,sha256=UBv3ciAowjcjzZR1ydlTCptscVAlpkOzExVgoZV0tVY,5578
26
26
  pyosis/geometry/__init__.py,sha256=mlAXlxaohcEcm8-6anyDo1fevh_IzYz2OXBn0_DIrCY,99
27
- pyosis/geometry/interface.py,sha256=gCLh-BmJlBtJYa0BK9AdIVIRDqEj9DPLbyEKIURxTmo,4441
28
- pyosis/geometry/manager.py,sha256=hYzZLuGUP97VDCpzCFKqrbBOkAoeCJvL3HFma6KW04I,10493
27
+ pyosis/geometry/interface.py,sha256=OHpsFEgjQok8FXpsOXXbCxfe9PPF6ac2rU6fii91jkY,4444
28
+ pyosis/geometry/manager.py,sha256=7Knd4w8WfagTPWAfug8R-5NVPMZXO7EyLp_ehZJcx-Q,10521
29
29
  pyosis/live/__init__.py,sha256=jl0pMkfAGRnukwuCbc6fOJoWo-ufMnFm4lyBV-xQQxc,112
30
30
  pyosis/live/analysis.py,sha256=OUBMUTCWgnnx2BXxUlwrl2mWJj4tNAAZahxtsM_BkTw,5451
31
31
  pyosis/live/grade.py,sha256=hjxUf9RBxVFuSs9J6Y0_A2g5TqJGqozdEg0_QuFZKiA,3223
32
32
  pyosis/live/lane.py,sha256=i1-mnKQuo_XLimtcX2ZV4PBC_A0FBneWxJU198X1MMc,5487
33
- pyosis/live/manager.py,sha256=Vp7Yg1MQkDrHGDOrkNTM-ByYqICDpI4ab9vc1Xpekpg,36650
34
- pyosis/load/__init__.py,sha256=RSbFhC-ybPjR5W0UKrmfHwSMgFw0BvdwAoGCb9Zizfg,120
33
+ pyosis/live/manager.py,sha256=Fd-RpRJRJ9h0AH87pcHhydjRgOavULnMZq3ljLnWf-s,36845
34
+ pyosis/load/__init__.py,sha256=AdCBsdf4QPVzbKwbj2C24Fnl9sPmlB9h542LjLFcqHM,135
35
35
  pyosis/load/loadcase.py,sha256=sCh21loarLG8b91k-pH4kaRqS8hHRiUfACFQz79jS4o,1605
36
- pyosis/load/manager.py,sha256=Fqx1bt82bGTfItCIjHgwKkzgm0vC2zXrZ_l80SpijS0,51269
36
+ pyosis/load/manager.py,sha256=LPJPf5XL9Yv1ns02UIihhdO7WplKWG0j0-mC1R_sUYc,52481
37
37
  pyosis/load/static.py,sha256=CkabR2EFM3IQMLFp_0JHqWGy3lfR-LSk4WJ6ZADjEy0,16267
38
38
  pyosis/load/tendon.py,sha256=g6xlZfb43Zz-KaA0SyfmzTQK-svpxAKF9tc6XMiiA-4,10987
39
39
  pyosis/material/__init__.py,sha256=W0oDx9SY_zngAcrMCO_0sF773-OxCfL1B-w2IeWlZ_g,79
40
40
  pyosis/material/interface.py,sha256=83yFn-RoqLBEiYCYmbnXoMO0Gwd0u6MkWvicgFDmWh4,5699
41
- pyosis/material/manager.py,sha256=S51w1KRyoqNaMiIcHM4SSA5q4ntW6-jHjcNN6PDv7UA,13246
41
+ pyosis/material/manager.py,sha256=fU9b3AwhzGm7C7YRGRLq9I-XCZHBjkD_su7-Fx5xO0Y,13403
42
42
  pyosis/node/__init__.py,sha256=6BKMR_HhFuvf-wr_U1H4njEj95pqgiHh6ApFl2JWMQ0,71
43
43
  pyosis/node/interface.py,sha256=bl4B0VlFRzx3KZibOW4OXJj2FEG3SeqIFpSR_SyLzyM,1216
44
44
  pyosis/node/manager.py,sha256=oFzId04rC6J9sQOfvigdF1_3wIOsRgaNcHmtsoOjDU4,8003
@@ -55,7 +55,7 @@ pyosis/property/component_thickness.py,sha256=V8ufM5eFyoC7Sn3_UbY4IICVZ21i0URYsg
55
55
  pyosis/property/coordinate.py,sha256=zSnT7G6WDZthSt081TvmoB7jhf7TTsRfOz2GvspIBs8,2325
56
56
  pyosis/property/creep_shrink.py,sha256=5RHSZoO7dLw-D5jYvKzBiDL9NfetEaDETtDBpnA0VpA,1475
57
57
  pyosis/property/damping.py,sha256=tUWZ8wbNBstK3kKrqeh9MmLnfQORTOwZDXV_p6qYZhw,3196
58
- pyosis/property/manager.py,sha256=RjOi-HHWcoh5vU-trhKB12VPOJhMdLg4hD_VGTTfWLI,9177
58
+ pyosis/property/manager.py,sha256=a08ZkK_83TMjtblUKEa3oUTFZVfVFQTU4_KXcXWr5a8,12825
59
59
  pyosis/property/pu_curve.py,sha256=qjw-84H3QAAnSuOuF9KxSVysPW1M56zSj_vZhf7DePU,1528
60
60
  pyosis/quick_building/__init__.py,sha256=QiWapgiZk6pkAdiznKI0bVIc16UcFOIALQuLhupLkqw,48
61
61
  pyosis/quick_building/interface.py,sha256=xdQrORabxmnlhi537pspFokQBaXSmnZMIxA_kxSo_cE,13951
@@ -67,7 +67,7 @@ pyosis/result/manager.py,sha256=Q4aoRX0LB8y3q5TdqV_JPYFRWTWuygzyNnhCcJpUveY,9808
67
67
  pyosis/result/result.py,sha256=wUyRaHSwyijLpodWIHPFQVEOn6LP8MfYp7xLhC-RiIo,1194
68
68
  pyosis/section/__init__.py,sha256=VjNbQWgWHtLO6la39oXgbQMnQPR0-b1DPIM52Cj--jg,179
69
69
  pyosis/section/common.py,sha256=9cnI5JdHfC6W-OvxAr4nJ2kAZaF3aDDl1luMFHQP8Bg,26572
70
- pyosis/section/manager.py,sha256=6pw0tqGxI0iJBYzQmBLs7xLhRmbXONZAuuu7hld6mG8,58837
70
+ pyosis/section/manager.py,sha256=kQVLfLs705S3VjnPj2XxFnK560VXfDabsK2rooFL5ac,60453
71
71
  pyosis/section/numeric.py,sha256=SuemnORk3Ji-mLE5w0I4C2peD4i2ITTlaUCrMpq6W_E,1489
72
72
  pyosis/section/param.py,sha256=cSjeZn8D_T7qe8u5m0tx1cwROb65k8L4DFEC6lWxJM4,4509
73
73
  pyosis/section/rebar.py,sha256=Or27mN62HgZNfpwPEYM1te-uLThB1hj_IFbU6aY4uCI,7294
@@ -75,10 +75,10 @@ pyosis/section/rib.py,sha256=JeeCOI_ejDmwzBPq2EizILf1MDS4v_oQ6SbsEoAIX_g,8355
75
75
  pyosis/section/steel.py,sha256=Kd0SNEsSZuG65jb7ZDTD3TMa466aT9Pd2EVIn4Ia_RQ,14939
76
76
  pyosis/settlement/__init__.py,sha256=ymo2j5VPhWP9ydyXBp8yl72E0BgJwzftSUzkXeMYXR4,162
77
77
  pyosis/settlement/interface.py,sha256=gZTEBJnQl5I1DTXau0ne0ejYxvp-vNBYlPb5b6Gn7j8,3818
78
- pyosis/settlement/manager.py,sha256=CrVTVHrDkYXuS3PiwkHqAmLwI0BZUcK3XPvYvcP-tME,12836
78
+ pyosis/settlement/manager.py,sha256=XUatiwkxv7c0TbNlgBO9gjEu40zGdOboFOfCB-d9Jjw,12965
79
79
  pyosis/stability/__init__.py,sha256=CyHVHaFyAyhEQZSRjZgcTk0E7KsW_dn6SGB4BVCn01w,96
80
80
  pyosis/stability/buckling.py,sha256=G7grtwyr4SYM3i0IhCks0wZ_Ar5fHAPcr9ftNtyfXEA,3345
81
- pyosis/stability/manager.py,sha256=naB4guhkzgiIm7UdIUjeg261de1FaoTyhhsxMoCuFE0,6089
81
+ pyosis/stability/manager.py,sha256=tKQ0iCGGbYDp8Qe2Z2UTC4CXsaXTxfBONzD9Up0Qm7M,8040
82
82
  pyosis/stage/__init__.py,sha256=TrNcvwQKki2SSwFkVsVcDA6EXATXaXRUorxRocn4HX8,94
83
83
  pyosis/stage/define.py,sha256=kfUbC_52ap3q48EblvH_DiwYFD5CjuT6AkC1a_Z5QEc,4023
84
84
  pyosis/stage/manager.py,sha256=SFL7xrNlUHCZdcg5AkBcWcL5sxhcdrbvSdetEmZJWBo,11545
@@ -90,7 +90,7 @@ pyosis/transfer/__init__.py,sha256=FEVJCH6gqkG8ynZ3hg8SWeAqwhFg09KQ9gPmavlqJs4,1
90
90
  pyosis/transfer/command_map.py,sha256=wagWC3W7gZYS6NIY_TRxzyBmKZBMXhBvVZzwAEa7aoU,25089
91
91
  pyosis/transfer/generator.py,sha256=r5A6iEZqYkL5JcVQTdegpqig-k3YIF6XxNqGBjwStsQ,14698
92
92
  pyosis/transfer/parser.py,sha256=mRD4icsM-REf74VRGB88g_jrSyOD8Q40fAjWnZ-E6zw,4541
93
- osis_python-0.3.4.dist-info/METADATA,sha256=mPf-f096EleQnzmfWn8Qm9fxnyKstNnzxP-Dl9Uf9-U,12160
94
- osis_python-0.3.4.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
95
- osis_python-0.3.4.dist-info/top_level.txt,sha256=6VDNySkQKwipRXcN8ayKVci4vAXi4oPyWLqFhNVcIfM,7
96
- osis_python-0.3.4.dist-info/RECORD,,
93
+ osis_python-0.3.8.dist-info/METADATA,sha256=Zqc3cEnT-l6VHdQX0o_toNIdCl3eByNLWFBxzrnSuqs,12160
94
+ osis_python-0.3.8.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
95
+ osis_python-0.3.8.dist-info/top_level.txt,sha256=6VDNySkQKwipRXcN8ayKVci4vAXi4oPyWLqFhNVcIfM,7
96
+ osis_python-0.3.8.dist-info/RECORD,,
pyosis/__init__.py CHANGED
@@ -7,9 +7,10 @@ A library for extending OSIS functionality.
7
7
  A library that allows users to use CAE with great flexibility.
8
8
  """
9
9
 
10
- __version__ = "0.3.4"
10
+ __version__ = "0.3.8"
11
11
  __author__ = "CCCC Highway Consultant Co. Ltd." # 中交公路规划设计院 - 工程技术研究中心 - lzh - wjh - myf
12
12
 
13
+ from .core.engine import OSISEngine
13
14
  # from .core import engine
14
15
  # from .ai.agents import BaseAgent
15
16
  # from .core import osis_run
@@ -529,6 +529,13 @@ class BoundaryGroupManager:
529
529
  ok, err = osis_boundary_group(name, "d")
530
530
  if not ok:
531
531
  raise RuntimeError(f"删除边界组 {name} 失败: {err}")
532
+
533
+ def rename(self, old_name, new_name) -> None:
534
+ """修改边界组名"""
535
+ ok, err = osis_boundary_group(old_name, "m", [new_name])
536
+ if not ok:
537
+ raise RuntimeError(f"修改边界组名 {old_name} -> {new_name} 失败: 失败: {err}")
538
+ return self.get(new_name)
532
539
 
533
540
  # ── 查询 ──────────────────────────────────
534
541
 
@@ -542,12 +549,15 @@ class BoundaryGroupManager:
542
549
  单个 BoundaryGroup 对象;如果传入列表则返回对象列表;
543
550
  不存在返回 None
544
551
  """
545
- if isinstance(name, str):
546
- name = [name]
547
- elif not isinstance(name, list):
552
+
553
+ if isinstance(name, list):
554
+ names = [str(x) for x in name]
555
+ else:
556
+ names = [str(name)]
557
+ if not isinstance(names, list):
548
558
  raise TypeError(f"不支持的名称类型: {type(name)}")
549
559
 
550
- resp = osis_client("GetBoundaryGroupInfoByNames", {"name": name})
560
+ resp = osis_client("GetBoundaryGroupInfoByNames", {"name": names})
551
561
  if not resp['success']:
552
562
  raise RuntimeError(f"{resp['error']}")
553
563
 
pyosis/core/client.py CHANGED
@@ -1,3 +1,4 @@
1
+ import os
1
2
  import requests
2
3
  import json
3
4
  from requests.adapters import HTTPAdapter
@@ -24,7 +25,7 @@ session.mount("http://", adapter)
24
25
  session.mount("https://", adapter) # 如果你后续用HTTPS
25
26
 
26
27
  # ========== 通用客户端函数(复用连接池) ==========
27
- def osis_client(func_name: str, payload: dict) -> dict:
28
+ def osis_client(func_name: str, payload: dict, base_url=None) -> dict:
28
29
  """
29
30
  通用 OSIS 接口客户端(复用连接池,高效批量调用)
30
31
  Args:
@@ -33,7 +34,8 @@ def osis_client(func_name: str, payload: dict) -> dict:
33
34
  Returns:
34
35
  异常时返回 (False, 错误信息)
35
36
  """
36
- url = f"http://localhost:8080/{func_name}"
37
+ base_url = base_url or os.environ.get("OSIS_URL", "http://localhost:18080")
38
+ url = f"{base_url}/{func_name}"
37
39
 
38
40
  try:
39
41
  response = session.post(
@@ -53,18 +55,15 @@ def osis_client(func_name: str, payload: dict) -> dict:
53
55
  # 接口不存在
54
56
  if response.status_code == 404:
55
57
  return {"success": False, "error": f"接口不存在: {func_name}"}
56
- # 200
57
- # if response.ok:
58
- return data if data is not None else {"success": False, "error": f"接口不存在: {func_name}" }
59
58
 
60
- # 500
61
- # # 500:[false, "命令流中……"]
62
- # if isinstance(data, list) and len(data) >= 2 and data[0] is False:
63
- # return False, str(data[1])
59
+ if response.ok: # 200-299
60
+ if data is not None:
61
+ return data
62
+ return {"success": False, "error": f"接口返回空数据: {func_name}"}
63
+
64
+ # 其他错误状态码 (500, 502, etc.)
65
+ return {"success": False, "error": f"HTTP {response.status_code}: {response.text[:200]}"}
64
66
 
65
- # 无结构化 body 时退回文本 / 状态码
66
- # detail = response.text.strip() if response.text else ""
67
- # return {"success": False, "error": detail if detail else f"HTTP {response.status_code}"}# False, detail if detail else f"HTTP {response.status_code}"
68
67
 
69
68
  except requests.RequestException as e:
70
69
  return {"success": False, "error": f"调用失败: {str(e)}"}
pyosis/core/command.py CHANGED
@@ -12,27 +12,6 @@ from typing import Dict, Any, Tuple, Literal, Optional
12
12
  # from .engine import OSISEngine
13
13
  from .client import osis_client
14
14
 
15
-
16
- # def osis_run(strCmd: str="", mode: Literal["stash", "exec"]="exec") -> Tuple[bool, str, Any]:
17
- # '''
18
- # 直接以命令流的形式运行OSIS功能
19
-
20
- # Args:
21
- # strCmd: 完整的命令流
22
- # mode: 运行模式,此参数为了同时执行多条命令提高效率
23
- # * 使用 stash 仅会将命令流存到OSIS中,不会执行
24
- # * 收到 exec 信号才会执行暂存包括当前的所有命令流。
25
-
26
- # Returns:
27
- # tuple (bool, str, Any): 是否成功,失败原因,其他结果数据
28
- # '''
29
- # # # 自动判断模式:非空默认暂存,为空默认执行
30
- # # if mode is None:
31
- # # mode = "stash" if strCmd else "exec"
32
-
33
- # e = OSISEngine.GetInstance()
34
- # return e.OSIS_Run(strCmd, mode)
35
-
36
15
  # def _log(text, filename="pyosis.log"):
37
16
  # """简单的日志函数"""
38
17
  # timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
@@ -54,83 +33,58 @@ def osis_run(strCmd: str="", mode: Literal["stash", "exec"]="exec") -> tuple[boo
54
33
  """
55
34
  response = osis_client("OSIS_Run", locals())
56
35
  return response['success'], response['error']
57
- # # 1. 配置 C++ 服务地址
58
- # url = "http://localhost:8080/OSIS_Run"
59
-
60
- # # 2. 构造请求参数(JSON 格式,UTF-8 编码)
61
- # payload = {
62
- # "strCmd": strCmd,
63
- # "mode": mode
64
- # }
65
-
66
- # # 3. 发送 POST 请求(自动处理中文编码)
67
- # try:
68
- # response = requests.post(
69
- # url,
70
- # data=json.dumps(payload, ensure_ascii=False).encode("utf-8"),
71
- # headers={"Content-Type": "application/json; charset=utf-8"},
72
- # timeout=10
73
- # )
74
- # response.raise_for_status() # 抛出 HTTP 错误
75
-
76
- # # 4. 解析返回值,还原为 C++ 原生返回格式
77
- # resp_data = response.json()
78
- # return resp_data["success"], resp_data["message"]
79
36
 
80
- # except Exception as e:
81
- # # 异常时返回和 C++ 一致的格式
82
- # return False, f"调用失败:{str(e)}"
83
-
84
-
85
37
  def _log(text, log_dir="pyosis_logs"):
86
- """
87
- 同一轮执行(<1秒间隔)的代码追加到同一文件,
88
- 超过1秒则创建新文件
89
-
90
- Args:
91
- text: 要记录的代码行
92
- log_dir: 日志文件夹路径
93
- Returns:
94
- 目标文件路径
95
- """
96
- # 创建日志目录
97
- if not os.path.exists(log_dir):
98
- os.makedirs(log_dir)
99
- files = []
100
- else:
101
- # 获取所有文件(排除子目录)
102
- files = [os.path.join(log_dir, f) for f in os.listdir(log_dir)
103
- if os.path.isfile(os.path.join(log_dir, f))]
104
-
105
- current_time = datetime.datetime.now()
106
- target_file = None
107
- is_new_file = True
38
+ ...
39
+ # def _log(text, log_dir="pyosis_logs"):
40
+ # """
41
+ # 同一轮执行(<1秒间隔)的代码追加到同一文件,
42
+ # 超过1秒则创建新文件
108
43
 
109
- # 查找最近修改的文件
110
- if files:
111
- latest_file = max(files, key=os.path.getmtime)
112
- mtime = datetime.datetime.fromtimestamp(os.path.getmtime(latest_file))
44
+ # Args:
45
+ # text: 要记录的代码行
46
+ # log_dir: 日志文件夹路径
47
+ # Returns:
48
+ # 目标文件路径
49
+ # """
50
+ # # 创建日志目录
51
+ # if not os.path.exists(log_dir):
52
+ # os.makedirs(log_dir)
53
+ # files = []
54
+ # else:
55
+ # # 获取所有文件(排除子目录)
56
+ # files = [os.path.join(log_dir, f) for f in os.listdir(log_dir)
57
+ # if os.path.isfile(os.path.join(log_dir, f))]
58
+
59
+ # current_time = datetime.datetime.now()
60
+ # target_file = None
61
+ # is_new_file = True
62
+
63
+ # # 查找最近修改的文件
64
+ # if files:
65
+ # latest_file = max(files, key=os.path.getmtime)
66
+ # mtime = datetime.datetime.fromtimestamp(os.path.getmtime(latest_file))
113
67
 
114
- # 如果小于1秒,追加到该文件
115
- if (current_time - mtime).total_seconds() < 1.0:
116
- target_file = latest_file
117
- is_new_file = False
68
+ # # 如果小于1秒,追加到该文件
69
+ # if (current_time - mtime).total_seconds() < 1.0:
70
+ # target_file = latest_file
71
+ # is_new_file = False
118
72
 
119
- # 需要创建新文件
120
- if is_new_file:
121
- timestamp = current_time.strftime("%Y%m%d_%H%M%S_%f")[:-3] # 毫秒级
122
- target_file = os.path.join(log_dir, f"session_{timestamp}.txt")
73
+ # # 需要创建新文件
74
+ # if is_new_file:
75
+ # timestamp = current_time.strftime("%Y%m%d_%H%M%S_%f")[:-3] # 毫秒级
76
+ # target_file = os.path.join(log_dir, f"session_{timestamp}.txt")
123
77
 
124
- with open(target_file, 'a', encoding='utf-8') as f:
125
- f.write(f"{text}\n")
78
+ # with open(target_file, 'a', encoding='utf-8') as f:
79
+ # f.write(f"{text}\n")
126
80
 
127
- return target_file
81
+ # return target_file
128
82
 
129
- def _tmp(text, tmp_file="tmp.tmp", clear=False): # 运行时临时信息
130
- if clear:
131
- os.remove(tmp_file)
132
- with open(tmp_file, "a+", encoding="utf-8") as f:
133
- f.write(text)
83
+ # def _tmp(text, tmp_file="tmp.tmp", clear=False): # 运行时临时信息
84
+ # if clear:
85
+ # os.remove(tmp_file)
86
+ # with open(tmp_file, "a+", encoding="utf-8") as f:
87
+ # f.write(text)
134
88
 
135
89
  class OSISFunctionRegistry:
136
90
  """
pyosis/core/engine.py CHANGED
@@ -206,7 +206,7 @@ class OSISEngine:
206
206
  # 通用操作(直接暴露 general 和 core 的函数)
207
207
  # ──────────────────────────────────────────
208
208
 
209
- def run(self, cmd: str = "") -> tuple[bool, str]:
209
+ def run(self, cmd: str = "") -> None:
210
210
  """执行 OSIS 命令流
211
211
 
212
212
  Args:
@@ -244,7 +244,7 @@ class OSISEngine:
244
244
  if not ok:
245
245
  raise RuntimeError(f"清屏失败: {err}")
246
246
 
247
- def matrix(self, name: str, data: Any) -> tuple[bool, str]:
247
+ def matrix(self, name: str, data: Any) -> str:
248
248
  """定义矩阵(用于自定义截面等)
249
249
 
250
250
  Args:
@@ -257,6 +257,7 @@ class OSISEngine:
257
257
  ok, err = osis_matrix(name, data)
258
258
  if not ok:
259
259
  raise RuntimeError(f"定义失败: {err}")
260
+ return name
260
261
 
261
262
  def output_result_for_calc_book(self) -> dict:
262
263
  """输出计算书所需结果"""
@@ -290,7 +291,7 @@ class OSISEngine:
290
291
  # ──────────────────────────────────────────
291
292
  # 便捷方法(委托给 control manager)
292
293
  # ──────────────────────────────────────────
293
- def export_apdl(self, path) -> None:
294
+ def export_apdl(self, path: str | None = None) -> None:
294
295
  """导出前处理状态为 .out 文件
295
296
 
296
297
  Args:
@@ -298,7 +299,7 @@ class OSISEngine:
298
299
  """
299
300
  self.control.export_apdl(path)
300
301
 
301
- def import_apdl(self, path: str | None = None) -> None:
302
+ def import_apdl(self, path: str) -> None:
302
303
  """读取 .out / .sml 文件
303
304
 
304
305
  Args:
@@ -9,4 +9,4 @@ from .seismic import (
9
9
  osis_rspec_anal_del,
10
10
  osis_rspec_anal_mod,
11
11
  )
12
- from .manager import DynamicManager, dynamic_manager, LoadToMassItem, SpectrumData
12
+ from .manager import DynamicManager, dynamic_manager