monte_carlo_corners
- circuit_analyzer.all.monte_carlo_corners(circuit_model, wavelengths, inst_corners=None, fixed_hierarchy_insts=None, sample_size=100, parallel=False, parallel_option='number', seed=None, save_path=None)
- Run a monte carlo simulation where each instance varies randomly across corners. Use fixed_hierarchy_insts to limit the variations inside specific hierarchical cells. - Use this method if you want to analyze a circuit with a mix of variation at large-scale, but fixing variations of subcircuits. - Parameters:
- circuit_model: CircuitModel
- IPKISS CircuitModel used in the simulation. 
- wavelengths: array-like
- An array of wavelengths, for instance: np.linspace(1.54, 1.56, 1001). 
- inst_corners: dict
- Dictionary mapping the name of the instances to the list of fab corner parameters (for instance [‘s’, ‘t’]) that you want to vary. By default, each instance will vary one of their fab corner parameters. 
- fixed_hierarchy_insts: list
- List of names of circuit instances wherein the corners should remain constant for each instance in the hierarchy. 
- sample_size: int, default = 100
- Number of Monte Carlo simulations 
- parallel: bool, optional
- Parallelize the calculations to potentially reduce the simulation time. 
- parallel_option: str
- String of what to parallelize, either over ‘wavelengths’ or over the ‘number’ of simulations. Options are ‘wavelengths’ or ‘number’. 
- seed: int, optional
- Seed of the random generator. 
- save_path: str/path, optional
- Path where the save file will be stored, for instance: save_path = “simulation_results.data”. 
 
- Returns:
- an array of S matrices, one S matrix per sampling.
 
 - Examples - >>> import circuit_analyzer.all as ca >>> cell = MZI() >>> cm = cell.CircuitModel() >>> wavelengths = np.linspace(1.5, 1.6, 501) - >>> with ca.setup('/path/to/configuration'): >>> result = ca.monte_carlo_corners( >>> circuit_model=cm, >>> wavelengths=wavelengths, >>> inst_corners={"dc": ["insertion_loss_corner"]}, >>> sample_size=100, >>> seed=0, >>> )