API Reference¶
Core¶
- class pytwinnet.core.DigitalTwin(network=<factory>, environment=None, propagation_model=None)[source]¶
Bases:
object- Parameters:
network (Network)
environment (Environment | None)
propagation_model (PropagationModel | None)
-
environment:
Optional[Environment] = None¶
-
propagation_model:
Optional[PropagationModel] = None¶
- set_environment(env)[source]¶
- Return type:
- Parameters:
env (Environment)
- set_propagation_model(model)[source]¶
- Return type:
- Parameters:
model (PropagationModel)
- class pytwinnet.core.Network(nodes=<factory>)[source]¶
Bases:
object- Parameters:
nodes (Dict[str, WirelessNode])
- add_node(node)[source]¶
- Return type:
- Parameters:
node (WirelessNode)
-
nodes:
Dict[str,WirelessNode]¶
- class pytwinnet.core.TransceiverProperties(transmit_power_dbm=20.0, antenna_gain_dbi=0.0, carrier_frequency_hz=2400000000.0, additional=<factory>)[source]¶
Bases:
object- Parameters:
Nodes¶
- pytwinnet.core.node.Node¶
alias of
WirelessNode
- class pytwinnet.core.node.TransceiverProperties(transmit_power_dbm=20.0, antenna_gain_dbi=0.0, carrier_frequency_hz=2400000000.0, additional=<factory>)[source]¶
Bases:
object- Parameters:
Network¶
- class pytwinnet.core.network.Network(nodes=<factory>)[source]¶
Bases:
object- Parameters:
nodes (Dict[str, WirelessNode])
- add_node(node)[source]¶
- Return type:
- Parameters:
node (WirelessNode)
-
nodes:
Dict[str,WirelessNode]¶
Digital Twin¶
- class pytwinnet.core.digital_twin.DigitalTwin(network=<factory>, environment=None, propagation_model=None)[source]¶
Bases:
object- Parameters:
network (Network)
environment (Environment | None)
propagation_model (PropagationModel | None)
-
environment:
Optional[Environment] = None¶
-
propagation_model:
Optional[PropagationModel] = None¶
- set_environment(env)[source]¶
- Return type:
- Parameters:
env (Environment)
- set_propagation_model(model)[source]¶
- Return type:
- Parameters:
model (PropagationModel)
Ingestion¶
- class pytwinnet.ingestion.MockDataSource(node_ids, step_size_m=1.0, seed=0)[source]¶
Bases:
DataSource
- class pytwinnet.ingestion.RealTimeMonitor(twin, source, on_applied=None)[source]¶
Bases:
object- Parameters:
twin (DigitalTwin)
source (DataSource)
-
source:
DataSource¶
-
twin:
DigitalTwin¶
Physics¶
- class pytwinnet.physics.Environment(dimensions_m=(100.0, 100.0, 30.0), obstacles=<factory>)[source]¶
Bases:
object
- class pytwinnet.physics.FadedModel(base, kind='rayleigh', K_dB=6.0, seed=0, epoch=None)[source]¶
Bases:
PropagationModelWraps a base model and adds small-scale fading (Rayleigh or Rician) as an extra dB term: PL_faded = PL + fading_loss_db where fading_loss_db = -10*log10(|h|^2). Fading is deterministic per (tx, rx, epoch). Change ‘epoch’ to re-sample.
- Parameters:
base (PropagationModel)
kind (str)
K_dB (float)
seed (int)
epoch (int | None)
-
base:
PropagationModel¶
- calculate_path_loss(tx, rx, environment)[source]¶
- Return type:
- Parameters:
tx (WirelessNode)
rx (WirelessNode)
environment (Environment)
- class pytwinnet.physics.FreeSpacePathLoss[source]¶
Bases:
PropagationModel- calculate_path_loss(tx, rx, environment)[source]¶
- Return type:
- Parameters:
tx (WirelessNode)
rx (WirelessNode)
environment (Environment)
- class pytwinnet.physics.PropagationModel[source]¶
Bases:
ABC- abstractmethod calculate_path_loss(tx, rx, environment)[source]¶
- Return type:
- Parameters:
tx (WirelessNode)
rx (WirelessNode)
environment (Environment)
- class pytwinnet.physics.RISAugmentedModel(base, ris, extra_loss_db=3.0)[source]¶
Bases:
PropagationModelWrap a base PropagationModel and return the min of: - direct path loss - two-hop path loss via RIS: PL(tx->RIS) + PL(RIS->rx) - RIS_gain + extra_loss
- Parameters:
base (PropagationModel)
ris (RISPanel)
extra_loss_db (float)
- calculate_path_loss(tx, rx, environment)[source]¶
- Return type:
- Parameters:
tx (WirelessNode)
rx (WirelessNode)
environment (Environment)
- class pytwinnet.physics.RISBeamModel(base, ris, extra_loss_db=3.0)[source]¶
Bases:
PropagationModelWraps a base PropagationModel. For a configured target UE (by id), the RIS contributes mainlobe gain on the two-hop path; others see sidelobe gain. Effective path loss = min( direct, (tx->RIS + RIS->rx - gain + extra_loss_db) ).
- Parameters:
base (PropagationModel)
ris (SmartRISPanel)
extra_loss_db (float)
- calculate_path_loss(tx, rx, environment)[source]¶
- Return type:
- Parameters:
tx (WirelessNode)
rx (WirelessNode)
environment (Environment)
- class pytwinnet.physics.ShadowedModel(base, sigma_db=6.0, seed=0, epoch=None)[source]¶
Bases:
PropagationModelWraps a base propagation model and adds log-normal shadowing (Gaussian in dB). Shadowing is deterministic per (tx, rx, epoch) for reproducibility. Change ‘epoch’ (int) to refresh the samples (e.g., per-drop or per-time-slot).
- Parameters:
base (PropagationModel)
sigma_db (float)
seed (int)
epoch (int | None)
-
base:
PropagationModel¶
- calculate_path_loss(tx, rx, environment)[source]¶
- Return type:
- Parameters:
tx (WirelessNode)
rx (WirelessNode)
environment (Environment)
- class pytwinnet.physics.SmartRISPanel(position, element_count=64, mainlobe_gain_db=None, sidelobe_gain_db=None)[source]¶
Bases:
object- Toy RIS with a steerable mainlobe. Approximates array gain:
mainlobe_gain_db ~= 20*log10(N) sidelobe_gain_db ~= mainlobe - 13 dB (typical)
- Parameters:
Simulation¶
- class pytwinnet.simulation.Event(timestamp)[source]¶
Bases:
object- Parameters:
timestamp (float)
- apply(twin)[source]¶
- Return type:
- Parameters:
twin (DigitalTwin)
- class pytwinnet.simulation.MoveNodeEvent(timestamp, node_id, new_position)[source]¶
Bases:
Event- apply(twin)[source]¶
- Return type:
- Parameters:
twin (DigitalTwin)
- class pytwinnet.simulation.Simulator(twin)[source]¶
Bases:
object- Parameters:
twin (DigitalTwin)
-
twin:
DigitalTwin¶
Optimization¶
- class pytwinnet.optimization.GridSearchOptimizer(param_grid, copy_twin=True)[source]¶
Bases:
Optimizer- optimize(twin, objective)[source]¶
- Return type:
- Parameters:
twin (DigitalTwin)
objective (Objective)
- class pytwinnet.optimization.MaximizeThroughput[source]¶
Bases:
Objective- evaluate(twin)[source]¶
- Return type:
- Parameters:
twin (DigitalTwin)
- class pytwinnet.optimization.MinimizePowerConsumption[source]¶
Bases:
Objective- evaluate(twin)[source]¶
- Return type:
- Parameters:
twin (DigitalTwin)
- class pytwinnet.optimization.Objective[source]¶
Bases:
ABC- abstractmethod evaluate(twin)[source]¶
- Return type:
- Parameters:
twin (DigitalTwin)
- class pytwinnet.optimization.RandomSearchOptimizer(ranges_dbm, samples=32, seed=0, copy_twin=True)[source]¶
Bases:
Optimizer- optimize(twin, objective)[source]¶
- Return type:
- Parameters:
twin (DigitalTwin)
objective (Objective)
Mobility¶
- class pytwinnet.mobility.ConstantVelocity(velocity_mps=(0.0, 0.0, 0.0), start_time=0.0, _last_t=None)[source]¶
Bases:
object- update(node, timestamp)[source]¶
- Return type:
- Parameters:
node (WirelessNode)
timestamp (float)
- class pytwinnet.mobility.RandomWaypoint(env, speed_range_mps=(0.5, 1.5), pause_time_s=0.0, seed=0, _rng=None, _target=None, _speed=0.0, _paused_until=0.0, _last_t=None)[source]¶
Bases:
object- Parameters:
-
env:
Environment¶
- update(node, timestamp)[source]¶
- Return type:
- Parameters:
node (WirelessNode)
timestamp (float)