API Reference¶
pole_placement.observerTool.cli¶
Command-line interface for pole_placement.observerTool.
The CLI preserves the original observer-tool subcommands:
designclosedloopk0selectsimexample
It also adds a sphinx-skel helper for generating a conservative,
GitHub Pages friendly Sphinx documentation skeleton.
pole_placement.observerTool.apis¶
- class pole_placement.observerTool.apis.ClosedLoopRequest(A: 'str | list', B: 'str | list', C: 'str | list', K: 'str | list', L: 'str | list', out: 'Optional[str]' = None, config: 'Optional[str]' = None)[source]¶
Bases:
object- Parameters:
A (str | list)
B (str | list)
C (str | list)
K (str | list)
L (str | list)
out (str | None)
config (str | None)
- A: str | list¶
- B: str | list¶
- C: str | list¶
- K: str | list¶
- L: str | list¶
- config: str | None = None¶
- out: str | None = None¶
- class pole_placement.observerTool.apis.DesignRequest(kind: 'str', A: 'str | list', C: 'str | list', poles: 'Optional[str | list]' = None, B: 'Optional[str | list]' = None, method: 'str' = 'place', G: 'Optional[str | list]' = None, Qn: 'Optional[str | list]' = None, Rn: 'Optional[str | list]' = None, csv: 'Optional[str]' = None, out: 'Optional[str]' = None, config: 'Optional[str]' = None)[source]¶
Bases:
object- Parameters:
kind (str)
A (str | list)
C (str | list)
poles (str | list | None)
B (str | list | None)
method (str)
G (str | list | None)
Qn (str | list | None)
Rn (str | list | None)
csv (str | None)
out (str | None)
config (str | None)
- A: str | list¶
- B: str | list | None = None¶
- C: str | list¶
- G: str | list | None = None¶
- Qn: str | list | None = None¶
- Rn: str | list | None = None¶
- config: str | None = None¶
- csv: str | None = None¶
- kind: str¶
- method: str = 'place'¶
- out: str | None = None¶
- poles: str | list | None = None¶
- class pole_placement.observerTool.apis.ExampleRequest(which: 'str', Ts: 'float' = 0.2)[source]¶
Bases:
object- Parameters:
which (str)
Ts (float)
- Ts: float = 0.2¶
- which: str¶
- class pole_placement.observerTool.apis.K0Request(A: 'str | list', B: 'str | list', C: 'str | list', K: 'str | list', L: 'Optional[str | list]' = None, mode: 'str' = 'state', ogata_extra_gain: 'Optional[float]' = None, out: 'Optional[str]' = None, config: 'Optional[str]' = None)[source]¶
Bases:
object- Parameters:
A (str | list)
B (str | list)
C (str | list)
K (str | list)
L (str | list | None)
mode (str)
ogata_extra_gain (float | None)
out (str | None)
config (str | None)
- A: str | list¶
- B: str | list¶
- C: str | list¶
- K: str | list¶
- L: str | list | None = None¶
- config: str | None = None¶
- mode: str = 'state'¶
- ogata_extra_gain: float | None = None¶
- out: str | None = None¶
- class pole_placement.observerTool.apis.SelectRequest(A: 'str | list', B: 'str | list', C: 'str | list', K: 'str | list', method: 'str' = 'place', rule_of_thumb: 'Optional[str]' = None, speedup: 'float' = 5.0, sweep: 'Optional[str]' = None, steps: 'int' = 200, dlqe: 'bool' = False, G: 'Optional[str | list]' = None, Qn: 'Optional[str | list]' = None, Rn: 'Optional[str | list]' = None, csv: 'Optional[str]' = None, out: 'Optional[str]' = None, config: 'Optional[str]' = None)[source]¶
Bases:
object- Parameters:
A (str | list)
B (str | list)
C (str | list)
K (str | list)
method (str)
rule_of_thumb (str | None)
speedup (float)
sweep (str | None)
steps (int)
dlqe (bool)
G (str | list | None)
Qn (str | list | None)
Rn (str | list | None)
csv (str | None)
out (str | None)
config (str | None)
- A: str | list¶
- B: str | list¶
- C: str | list¶
- G: str | list | None = None¶
- K: str | list¶
- Qn: str | list | None = None¶
- Rn: str | list | None = None¶
- config: str | None = None¶
- csv: str | None = None¶
- dlqe: bool = False¶
- method: str = 'place'¶
- out: str | None = None¶
- rule_of_thumb: str | None = None¶
- speedup: float = 5.0¶
- steps: int = 200¶
- sweep: str | None = None¶
- class pole_placement.observerTool.apis.SimRequest(A: 'str | list', B: 'str | list', C: 'str | list', K: 'str | list', L: 'str | list', N: 'int' = 60, Ts: 'float' = 1.0, ref: 'str' = 'step', K0: 'Optional[str]' = None, k0_mode: 'str' = 'state', ogata_extra_gain: 'Optional[float]' = None, csv: 'Optional[str]' = None, out: 'Optional[str]' = None, plot: 'bool' = False, plot_type: 'str' = 'points', plotly: 'bool' = False, html: 'Optional[str]' = None, config: 'Optional[str]' = None)[source]¶
Bases:
object- Parameters:
A (str | list)
B (str | list)
C (str | list)
K (str | list)
L (str | list)
N (int)
Ts (float)
ref (str)
K0 (str | None)
k0_mode (str)
ogata_extra_gain (float | None)
csv (str | None)
out (str | None)
plot (bool)
plot_type (str)
plotly (bool)
html (str | None)
config (str | None)
- A: str | list¶
- B: str | list¶
- C: str | list¶
- K: str | list¶
- K0: str | None = None¶
- L: str | list¶
- N: int = 60¶
- Ts: float = 1.0¶
- config: str | None = None¶
- csv: str | None = None¶
- html: str | None = None¶
- k0_mode: str = 'state'¶
- ogata_extra_gain: float | None = None¶
- out: str | None = None¶
- plot: bool = False¶
- plot_type: str = 'points'¶
- plotly: bool = False¶
- ref: str = 'step'¶
pole_placement.observerTool.app¶
pole_placement.observerTool.core¶
- class pole_placement.observerTool.core.MinObsDesign(Ke: 'np.ndarray', T: 'np.ndarray', Ti: 'np.ndarray', blocks: 'Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray, np.ndarray, np.ndarray]', err_poles: 'np.ndarray')[source]¶
Bases:
object- Parameters:
Ke (numpy.ndarray)
T (numpy.ndarray)
Ti (numpy.ndarray)
blocks (Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray])
err_poles (numpy.ndarray)
- Ke: numpy.ndarray¶
- T: numpy.ndarray¶
- Ti: numpy.ndarray¶
- blocks: Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray]¶
- err_poles: numpy.ndarray¶
- pole_placement.observerTool.core.design_minimum_order_observer(A, B, C, poles, method='place')[source]¶
- Parameters:
A (numpy.ndarray)
B (numpy.ndarray)
C (numpy.ndarray)
poles (List[complex])
- Return type:
- pole_placement.observerTool.core.k0_ogata(A, B, C, K, L, extra_gain=None)[source]¶
- Parameters:
A (numpy.ndarray)
B (numpy.ndarray)
C (numpy.ndarray)
K (numpy.ndarray)
L (numpy.ndarray)
extra_gain (float | None)
- Return type:
float
- pole_placement.observerTool.core.k0_state(A, B, C, K)[source]¶
- Parameters:
A (numpy.ndarray)
B (numpy.ndarray)
C (numpy.ndarray)
K (numpy.ndarray)
- Return type:
float
- pole_placement.observerTool.core.ke_grid_search(A, C, B, K, pole_grid, steps=200, seed=0)[source]¶
- Parameters:
pole_grid (List[List[complex]])
- pole_placement.observerTool.core.ke_rule_of_thumb(A, C, plant_poles, speedup=5.0, method='place')[source]¶
- Parameters:
plant_poles (Iterable[complex])
speedup (float)
pole_placement.observerTool.io¶
- pole_placement.observerTool.io.load_yaml(path)[source]¶
Load a YAML file and return its top-level mapping.
- Parameters:
path (str | Path) – File path to read.
- Return type:
dict
- pole_placement.observerTool.io.maybe_json(v)[source]¶
Return parsed JSON when
vlooks like JSON text.Non-string values are returned unchanged. Strings that do not start with
[or{are also returned unchanged. If JSON parsing fails, the original value is returned.- Parameters:
v (Any)
- Return type:
Any
- pole_placement.observerTool.io.parse_matrix(s)[source]¶
Parse a matrix-like value from CLI, JSON, YAML, or Python objects.
Supported inputs include strings such as
"1 2; 3 4", Python-style nested lists such as"[[1, 2], [3, 4]]", one-dimensional row or column vector strings, Python lists/tuples, andnumpy.ndarrayvalues.The return value is always at least two-dimensional. Real-valued complex inputs are reduced to real arrays when possible. The final return type is a floating-point
numpy.ndarraybecause the observer workflows expect real state-space matrices.- Parameters:
s (str | list | tuple | np.ndarray)
- Return type:
np.ndarray
- pole_placement.observerTool.io.parse_poles(s)[source]¶
Parse a pole list from a comma-separated string or Python list.
The parser accepts
iorjas the imaginary-unit suffix. For example,"0.5+0.5j,0.5-0.5j"and"0.5+0.5i,0.5-0.5i"are both valid.- Parameters:
s (str | list)
- Return type:
List[complex]
pole_placement.observerTool.utils¶
- pole_placement.observerTool.utils.eigvals_sorted(M)[source]¶
- Parameters:
M (numpy.ndarray)
- Return type:
List[complex]
- pole_placement.observerTool.utils.ensure_dir(p)[source]¶
- Parameters:
p (str | PathLike)
- Return type:
Path
- pole_placement.observerTool.utils.multiset_close(a, b, tol=1e-08)[source]¶
- Parameters:
a (Iterable[complex])
b (Iterable[complex])
tol (float)
- Return type:
bool
- pole_placement.observerTool.utils.out_path(filename)[source]¶
If filename is None -> return None. If filename is an absolute/relative path with dirs, use as-is. If it’s just a bare filename, place it under the package ./out/.
- Parameters:
filename (str | None)
- Return type:
Path | None
- pole_placement.observerTool.utils.save_csv_matrix(path, M, header=None)[source]¶
- Parameters:
path (str | PathLike)
M (numpy.ndarray)
header (Iterable[str] | None)
- Return type:
None
- pole_placement.observerTool.utils.save_csv_series(path, columns)[source]¶
- Parameters:
path (str | PathLike)
columns (Dict[str, Iterable[float]])
- Return type:
None
pole_placement.observerTool.design¶
- pole_placement.observerTool.design.compute_k0(A, B, C, K, L=None, mode='state', ogata_extra_gain=None, out=None)[source]¶
- pole_placement.observerTool.design.design_observer(kind, A, C, poles=None, B=None, method='place', G=None, Qn=None, Rn=None, csv=None, out=None)[source]¶
- Parameters:
kind (str)