처음 보는 용어
처음에는 Report와 Flow, Flow 안의 Component와 Node만 구분하세요. 기능을 설치할 때 Component package, Extension과 Integration을 이어서 확인합니다. 페이지 뒷부분은 Python SDK로 같은 작업을 작성할 때 쓰는 이름이므로 화면만 사용할 때는 건너뜁니다.
Report와 Flow
Report는 본문, 작성값, 표와 계산 결과를 표시할 위치를 저장합니다. Flow는 Report나 다른 화면에서 값을 받을 input, Node, 연결과 밖으로 보낼 result를 저장합니다. 두 문서는 같은 Project에 나란히 있고, Report Workbench 또는 Python의 px.Report에서 필요할 때 연결합니다.
| 이름 | 쉬운 뜻 | 화면 |
|---|---|---|
| Project | Report, Flow, Component dependency와 Result를 함께 관리하는 작업 공간 | Project Home |
| Report | 본문·작성값·표와 Flow 연결을 저장하는 문서 | Report Workbench |
| Flow | Node와 연결로 만든 실행 가능한 계산 흐름 | PXFLOW Studio |
| Node | 현재 Flow에 실제로 놓인 계산·입력·표시 단계 | Studio Canvas의 상자 |
| 연결 | result 값을 다음 input으로 보내는 선 | Node port 사이의 선 |
| Run | 저장된 Flow를 input으로 한 번 실행한 기록 | Run·Result |
| Result | Run이 만든 값과 근거 | Result 영역 |
Function, Component와 Node
Function과 Component는 배치할 기능, Node는 현재 Flow에 배치한 사용처입니다.
| 기능 | 언제 고르나요? | 배치한 Node |
|---|---|---|
| Function | Canvas에서 실행할 계산을 작성하고 필요하면 여러 Flow에서 공유 | Function Reference Node |
| Component | 설치 가능한 기능 identity를 사용 | 현재 read-only unsupported; 전용 UI·settings는 계획 |
Studio에서는 Function을 Definitions → Functions에서 고릅니다. package-backed Components → Installed 동선은 계획입니다. 둘 다 Canvas에 배치한 뒤 Node가 되고, input과 result를 연결합니다.
SDK에서도 같은 배치를 한 문법으로 작성합니다.
check = flow.node("utilization_check", calculate_utilization)
view = flow.node("model_view", model_viewer)첫 번째 값은 Flow 안에서 이 Node를 계속 식별하는 고유한 이름이고, 두 번째 값은 이 Node가 실행할 @px.function 또는 @px.component target입니다. 일반 Python def는 이 target의 구현을 나누는 helper이며 Canvas에 직접 배치하지 않습니다.
Built-in과 third-party Component
| 종류 | 제공자 | 사용 흐름 |
|---|---|---|
| Built-in Component | PipelineXLab | Components에서 바로 배치 |
| Installed Component · 계획 | 향후 Project dependency | Components → Installed에서 배치 |
| Third-party Component · 계획 | 외부 publisher | Available에서 Project에 추가한 뒤 배치 |
향후 출처가 달라도 같은 host Node grammar와 port 연결을 사용합니다. 현재 installed Component는 exact target/raw settings와 usage-derived 일부 port를 보존한 unsupported Node로 표시됩니다.
Component package, Extension과 Integration
| 이름 | 역할 | 예시 상황 |
|---|---|---|
| Component package | 필요한 Component를 Project에 한 번에 설치하는 묶음. Component symbol을 하나 이상 export하는 Python package/distribution이고, 버전 갱신도 이 단위로 합니다. Project-scoped install UI는 계획 | package 하나가 viewer와 result table 제공 |
| Extension | Component 외에 editor·viewer·adapter·app surface까지 제공할 목표 기능 | host bridge 구현 뒤 Component Node에서 넓은 editor 열기 |
| Integration | 외부 제품·서비스·데이터를 연결하는 Extension | 외부 해석 model·case·result 연결 |
사용자는 Component를 먼저 찾고, 상세에서 제공 package와 version을 확인합니다. 개발자는 public module에서 Component를 export하고 package release로 배포합니다.
- 설치 이름은 Project dependency와 version을 관리합니다.
- import 이름은 Python source가 Component를 찾는 module입니다.
- Component symbol은
flow.node(...)에 배치할 target입니다. - Node key는 현재 Flow가 각 배치를 구분하는 이름입니다.
여기부터는 코드로 작성할 때 쓰는 이름입니다
화면에서 Report와 Flow를 만들 때는 여기까지만 알면 됩니다. 아래 내용은 Python SDK로 같은 작업을 작성할 때 필요한 이름입니다.
Python SDK 이름 읽기
Python SDK는 from pipelinexlab import px로 시작합니다. px.는 Flow·Report·Client 같은 SDK 객체와 input·result 계약을 만들 때 사용합니다. 만든 객체의 내용은 그 객체를 담은 변수에서 작성합니다.
| 먼저 쓰는 코드 | 다음 호출 | 화면과의 관계 |
|---|---|---|
flow = px.Flow(...) | flow.node(...), flow.connect(...) | PXFLOW Studio의 Flow, Node와 연결선 |
report = px.Report(...) | report.section(...), report.save() | Report Workbench의 Report와 section |
basis = report.section(...) | basis.value(...), basis.table(...) | Report 본문의 값과 표 |
connection = report.connect_flow(...) | connection.bind(...), connection.show(...) | Use report input, Show result 연결 |
client = px.Client(...) | client.run(...) | Run·Result 영역 |
px. 뒤에는 SDK가 제공하는 타입과 선언 도구가 옵니다. flow, report, basis, connection, client는 앞 열에서 만든 객체를 담은 변수이며, 점 뒤에는 그 객체가 소유하는 동작이 옵니다. Flow를 작성하는 .py module은 public flow = px.Flow(...) 객체를 하나만 export합니다. Flow가 여러 개면 Flow마다 module을 나눕니다.
@px.function과 @px.component
@px.function은 Canvas에서 실행할 계산을 등록하고 여러 Flow에서 같은 정의를 공유하게 합니다.
class UtilizationResults(px.Results):
value: float
@px.function(
key="calculate_utilization",
version="1.0.0",
description="Calculates demand-to-resistance utilization.",
)
def calculate_utilization(demand: float, resistance: float) -> UtilizationResults:
return UtilizationResults(value=demand / resistance)현재 @px.component는 설치 기능의 companion metadata와 annotation-derived input/result만 등록합니다. settings schema, renderer/modal/editor와 decorator-to-package build bridge는 계획 범위입니다. portable V1 container는 content/component.json 선언 하나만 받으며, 다중 선언과 host presentation은 Node presentation과 third-party UI의 contract_only V2입니다.
아래 settings-bearing Component 예제는 두 P0 closure와 별도 versioned settings 계약 뒤의 목표 형태입니다. 이 예제는 contract_only 목표 문법이며, 현재 설치본에서는 실행 상태로 표시된 current 예제를 사용하세요.
class CheckResults(px.Results):
passed: bool = px.result(description="Whether the value passed the check.")
@px.component(
key="threshold_check",
label="Threshold check",
description="Checks a value against a node-specific limit.",
category="review",
subcategory="checks",
)
def threshold_check(
value: float = px.input(unit="kN", description="Value to check."),
*,
limit: float = px.setting(
label="Limit",
default=100.0,
description="Maximum allowed value.",
),
) -> CheckResults:
return CheckResults(passed=value <= limit)두 decorator는 재사용 정의를 등록합니다. 실제 Canvas Node는 flow.node(...)에서 배치합니다. Function·Component의 명시적 key와 Component의 subcategory는 stable lower_snake_case를 사용합니다. Component의 category는 닫힌 primary task registry로 input, transform, calculate, review, deliver, control 여섯 개 중 하나를 쓰고, subcategory는 그 아래에서 publisher가 직접 정하는 별개의 열린 key입니다. Python 함수 이름은 구현 symbol이며 등록 identity를 대신하지 않습니다. production third-party Component 신규 install·placement·activation은 authenticated-principal authorization과 execution-trust closure가 모두 닫힐 때까지 차단합니다. 아래 placement도 같은 post-closure 목표입니다.
연결을 SDK로 작성하기
이 예제는 contract_only 목표 문법이며, 현재 설치본에서는 실행 상태로 표시된 current 예제를 사용하세요.
flow = px.Flow(
"load_review",
label="Load review",
description="Checks one service load against a limit.",
)
load = flow.input("load", float, unit="kN", description="Service load.")
check = flow.node("service_check", threshold_check)
flow.connect(load, check.inputs.value)
flow.result("passed", check.results.passed)| SDK | Studio |
|---|---|
flow.input(...) | Flow public input |
flow.node(...) | Canvas Node |
flow.connect(...) | port 연결선 |
flow.result(...) | Flow public result |