Full Code of potentialventures/cocotb for AI

master 41cacf6d7954 cached
635 files
3.0 MB
808.7k tokens
2742 symbols
1 requests
Download .txt
Showing preview only (3,230K chars total). Download the full file or copy to clipboard to get everything.
Repository: potentialventures/cocotb
Branch: master
Commit: 41cacf6d7954
Files: 635
Total size: 3.0 MB

Directory structure:
gitextract_potnizu6/

├── .backportrc.json
├── .clang-format
├── .codecov.yml
├── .devcontainer/
│   ├── Dockerfile
│   ├── README.md
│   ├── devcontainer.json
│   └── post-create.sh
├── .git-blame-ignore-revs
├── .github/
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── dependabot.yml
│   ├── generate-envs.py
│   ├── issue_template.md
│   └── workflows/
│       ├── backport.yml
│       ├── benchmark.yml
│       ├── build-test-dev.yml
│       ├── build-test-release.yml
│       ├── ecosystem-compat.yml
│       ├── experimental.yml
│       ├── extended.yml
│       ├── regression-tests.yml
│       └── stale.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .readthedocs.yml
├── CONTRIBUTING.md
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.md
├── cocotb_build_libs.py
├── docs/
│   ├── .gitignore
│   ├── Doxyfile
│   ├── README.md
│   └── source/
│       ├── _static/
│       │   ├── cocotb.css
│       │   └── cocotb.js
│       ├── analog_model.rst
│       ├── building.rst
│       ├── conf.py
│       ├── contributing.rst
│       ├── contributors.rst
│       ├── coroutines.rst
│       ├── coverage.rst
│       ├── custom_flows.rst
│       ├── developing.rst
│       ├── diagrams/
│       │   └── README.md
│       ├── examples.rst
│       ├── extensions.rst
│       ├── further_resources.rst
│       ├── genindex.rst
│       ├── glossary.rst
│       ├── index.rst
│       ├── install.rst
│       ├── install_devel.rst
│       ├── library_reference.rst
│       ├── library_reference_c.rst
│       ├── maintaining.rst
│       ├── newsfragments/
│       │   ├── 4519.feature.rst
│       │   ├── 4717.change.rst
│       │   ├── 4986.removal.1.rst
│       │   ├── 4986.removal.rst
│       │   ├── 4987.removal.rst
│       │   ├── 5007.feature.1.rst
│       │   ├── 5007.feature.2.rst
│       │   ├── 5007.feature.rst
│       │   ├── 5041.bugfix.rst
│       │   ├── 5057.feature.rst
│       │   ├── 5076.feature.rst
│       │   ├── 5090.feature.rst
│       │   ├── 5106.feature.rst
│       │   ├── 5114.feature.rst
│       │   ├── 5131.feature.rst
│       │   ├── 5162.change.rst
│       │   ├── 5163.feature.rst
│       │   ├── 5165.feature.1.rst
│       │   ├── 5165.feature.2.rst
│       │   ├── 5165.feature.rst
│       │   ├── 5179.change.rst
│       │   ├── 5179.feature.1.rst
│       │   ├── 5179.feature.rst
│       │   ├── 5181.feature.rst
│       │   ├── 5182.feature.rst
│       │   ├── 5205.feature.rst
│       │   ├── 5206.removal.rst
│       │   ├── 5207.change.rst
│       │   ├── 5220.feature.1.rst
│       │   ├── 5220.feature.rst
│       │   ├── 5222.feature.rst
│       │   ├── 5232.change.rst
│       │   ├── 5248.bugfix.rst
│       │   ├── 5258.change.rst
│       │   ├── 5263.change.rst
│       │   ├── 5293.feature.1.rst
│       │   ├── 5293.feature.rst
│       │   ├── 5306.bugfix.rst
│       │   ├── 5306.change.rst
│       │   ├── 5309.feature.rst
│       │   ├── 5357.feature.rst
│       │   ├── 5363.change.rst
│       │   ├── 5366.feature.rst
│       │   ├── 5380.feature.rst
│       │   ├── 5382.change.rst
│       │   ├── 5392.feature.rst
│       │   ├── 5395.removal.rst
│       │   ├── 5415.feature.rst
│       │   ├── 5439.bugfix.rst
│       │   ├── 5440.bugfix.rst
│       │   ├── 5450.feature.rst
│       │   ├── 5483.feature.rst
│       │   ├── 5506.feature.rst
│       │   ├── 5516.change.rst
│       │   ├── 5516.removal.1.rst
│       │   ├── 5516.removal.rst
│       │   └── README.rst
│       ├── platform_support.rst
│       ├── profiling.rst
│       ├── py-modindex.rst
│       ├── pytest.rst
│       ├── quickstart.rst
│       ├── refcard.rst
│       ├── regulator.rst
│       ├── release_notes.rst
│       ├── rescap.rst
│       ├── roadmap.rst
│       ├── rotating_logger.rst
│       ├── runner.rst
│       ├── simulator_support.rst
│       ├── spelling_wordlist.txt
│       ├── support.rst
│       ├── timing_model.rst
│       ├── troubleshooting.rst
│       ├── update_indexing.rst
│       ├── upgrade-2.0.rst
│       └── writing_testbenches.rst
├── examples/
│   ├── Makefile
│   ├── adder/
│   │   ├── hdl/
│   │   │   ├── adder.sv
│   │   │   └── adder.vhdl
│   │   ├── model/
│   │   │   ├── __init__.py
│   │   │   └── adder_model.py
│   │   └── tests/
│   │       ├── Makefile
│   │       └── test_adder.py
│   ├── analog_model/
│   │   ├── Makefile
│   │   ├── afe.py
│   │   ├── digital.sv
│   │   └── test_analog_model.py
│   ├── doc_examples/
│   │   └── quickstart/
│   │       ├── Makefile
│   │       ├── simple_counter.sv
│   │       ├── simple_counter_testcases.py
│   │       └── test_runner.py
│   ├── matrix_multiplier/
│   │   ├── hdl/
│   │   │   ├── matrix_multiplier.sv
│   │   │   ├── matrix_multiplier.vhd
│   │   │   └── matrix_multiplier_pkg.vhd
│   │   └── tests/
│   │       ├── Makefile
│   │       ├── matrix_multiplier_tests.py
│   │       └── test_matrix_multiplier.py
│   ├── mixed_language/
│   │   ├── hdl/
│   │   │   ├── endian_swapper.sv
│   │   │   ├── endian_swapper.vhdl
│   │   │   ├── toplevel.sv
│   │   │   └── toplevel.vhdl
│   │   └── tests/
│   │       ├── Makefile
│   │       └── test_mixed_language.py
│   ├── mixed_signal/
│   │   ├── .gitignore
│   │   ├── hdl/
│   │   │   ├── analog_probe_cadence.sv
│   │   │   ├── analog_probe_synopsys.sv
│   │   │   ├── capacitor.vams
│   │   │   ├── nettypes_pkg_cadence.sv
│   │   │   ├── nettypes_pkg_synopsys.sv
│   │   │   ├── regulator.sv
│   │   │   ├── regulator.vams
│   │   │   ├── regulator_block.vams
│   │   │   ├── rescap.sv
│   │   │   ├── resistor.vams
│   │   │   ├── tb_regulator.sv
│   │   │   └── tb_rescap.sv
│   │   └── tests/
│   │       ├── Makefile
│   │       ├── run.scs
│   │       ├── test_regulator_plot.py
│   │       ├── test_regulator_trim.py
│   │       ├── test_rescap.py
│   │       ├── test_rescap_minimalist.py
│   │       └── vcsAD.init
│   └── simple_dff/
│       ├── .gitignore
│       ├── Makefile
│       ├── dff.sv
│       ├── dff.vhdl
│       └── test_dff.py
├── noxfile.py
├── pyproject.toml
├── setup.py
├── src/
│   ├── cocotb/
│   │   ├── _ANSI.py
│   │   ├── __init__.py
│   │   ├── _base_triggers.py
│   │   ├── _bridge.py
│   │   ├── _concurrent_waiters.py
│   │   ├── _decorators.py
│   │   ├── _deprecation.py
│   │   ├── _event_loop.py
│   │   ├── _extended_awaitables.py
│   │   ├── _gpi_triggers.py
│   │   ├── _init.py
│   │   ├── _outcomes.py
│   │   ├── _profiling.py
│   │   ├── _py_compat.py
│   │   ├── _shutdown.py
│   │   ├── _task_manager.py
│   │   ├── _test_factory.py
│   │   ├── _test_manager.py
│   │   ├── _utils.py
│   │   ├── _vendor/
│   │   │   ├── README.md
│   │   │   ├── fli/
│   │   │   │   ├── acc_user.h
│   │   │   │   ├── acc_vhdl.h
│   │   │   │   └── mti.h
│   │   │   ├── tcl/
│   │   │   │   ├── license.terms
│   │   │   │   ├── tcl.h
│   │   │   │   ├── tclDecls.h
│   │   │   │   └── tclPlatDecls.h
│   │   │   ├── vhpi/
│   │   │   │   └── vhpi_user.h
│   │   │   └── vpi/
│   │   │       ├── sv_vpi_user.h
│   │   │       ├── vpi_compatibility.h
│   │   │       └── vpi_user.h
│   │   ├── _version.py
│   │   ├── _xunit_reporter.py
│   │   ├── clock.py
│   │   ├── debug.py
│   │   ├── handle.py
│   │   ├── logging.py
│   │   ├── py.typed
│   │   ├── queue.py
│   │   ├── regression.py
│   │   ├── result.py
│   │   ├── share/
│   │   │   ├── def/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── README.md
│   │   │   │   ├── aldec.def
│   │   │   │   ├── ghdl.def
│   │   │   │   ├── icarus.def
│   │   │   │   ├── modelsim.def
│   │   │   │   └── nvcvhpi.def
│   │   │   ├── include/
│   │   │   │   ├── exports.h
│   │   │   │   ├── gpi.h
│   │   │   │   ├── vhpi_user_ext.h
│   │   │   │   └── vpi_user_ext.h
│   │   │   └── lib/
│   │   │       ├── gpi/
│   │   │       │   ├── GpiCbHdl.cpp
│   │   │       │   ├── GpiCommon.cpp
│   │   │       │   ├── dynload.cpp
│   │   │       │   ├── fli/
│   │   │       │   │   ├── FliCbHdl.cpp
│   │   │       │   │   ├── FliImpl.cpp
│   │   │       │   │   ├── FliImpl.hpp
│   │   │       │   │   └── FliObjHdl.cpp
│   │   │       │   ├── gpi_priv.hpp
│   │   │       │   ├── logging.cpp
│   │   │       │   ├── logging.hpp
│   │   │       │   ├── vhpi/
│   │   │       │   │   ├── VhpiCbHdl.cpp
│   │   │       │   │   ├── VhpiImpl.cpp
│   │   │       │   │   ├── VhpiImpl.hpp
│   │   │       │   │   ├── VhpiIterator.cpp
│   │   │       │   │   ├── VhpiObj.cpp
│   │   │       │   │   └── VhpiSignal.cpp
│   │   │       │   └── vpi/
│   │   │       │       ├── VpiCbHdl.cpp
│   │   │       │       ├── VpiImpl.cpp
│   │   │       │       ├── VpiImpl.hpp
│   │   │       │       ├── VpiIterator.cpp
│   │   │       │       ├── VpiObj.cpp
│   │   │       │       └── VpiSignal.cpp
│   │   │       ├── pygpi/
│   │   │       │   ├── bind.cpp
│   │   │       │   ├── embed.cpp
│   │   │       │   ├── logging.cpp
│   │   │       │   └── pygpi_priv.hpp
│   │   │       ├── utils.hpp
│   │   │       └── verilator/
│   │   │           └── verilator.cpp
│   │   ├── simtime.py
│   │   ├── simulator.pyi
│   │   ├── task.py
│   │   ├── triggers.py
│   │   ├── types/
│   │   │   ├── __init__.py
│   │   │   ├── _abstract_array.py
│   │   │   ├── _array.py
│   │   │   ├── _indexing.py
│   │   │   ├── _logic.py
│   │   │   ├── _logic_array.py
│   │   │   ├── _range.py
│   │   │   └── _resolve.py
│   │   └── utils.py
│   ├── cocotb_tools/
│   │   ├── __init__.py
│   │   ├── _coverage.py
│   │   ├── _env.py
│   │   ├── _vendor/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   └── distutils_version.py
│   │   ├── check_results.py
│   │   ├── combine_results.py
│   │   ├── config.py
│   │   ├── ipython_support.py
│   │   ├── makefiles/
│   │   │   ├── Makefile.deprecations
│   │   │   ├── Makefile.inc
│   │   │   ├── Makefile.sim
│   │   │   └── simulators/
│   │   │       ├── Makefile.activehdl
│   │   │       ├── Makefile.cvc
│   │   │       ├── Makefile.dsim
│   │   │       ├── Makefile.ghdl
│   │   │       ├── Makefile.icarus
│   │   │       ├── Makefile.ius
│   │   │       ├── Makefile.modelsim
│   │   │       ├── Makefile.nvc
│   │   │       ├── Makefile.questa
│   │   │       ├── Makefile.questa-compat
│   │   │       ├── Makefile.questa-qisqrun
│   │   │       ├── Makefile.riviera
│   │   │       ├── Makefile.vcs
│   │   │       ├── Makefile.verilator
│   │   │       └── Makefile.xcelium
│   │   ├── py.typed
│   │   ├── pytest/
│   │   │   ├── __init__.py
│   │   │   ├── _compat.py
│   │   │   ├── _controller.py
│   │   │   ├── _fixture.py
│   │   │   ├── _handle.py
│   │   │   ├── _init.py
│   │   │   ├── _junitxml.py
│   │   │   ├── _logging.py
│   │   │   ├── _option.py
│   │   │   ├── _regression.py
│   │   │   ├── _runner.py
│   │   │   ├── _test.py
│   │   │   ├── _testbench.py
│   │   │   ├── hdl.py
│   │   │   ├── hookspecs.py
│   │   │   ├── mark.py
│   │   │   ├── plugin.py
│   │   │   └── py.typed
│   │   ├── runner.py
│   │   └── sim_versions.py
│   ├── pygpi/
│   │   ├── __init__.py
│   │   ├── entry.py
│   │   └── py.typed
│   └── pyproject.toml
└── tests/
    ├── Makefile
    ├── benchmarks/
    │   ├── test_matrix_multiplier.py
    │   └── test_parameterize_perf/
    │       ├── parametrize_perf_top.sv
    │       ├── parametrize_performance_tests.py
    │       └── test_parameterize_perf.py
    ├── designs/
    │   ├── array_module/
    │   │   ├── Makefile
    │   │   ├── array_module.sv
    │   │   ├── array_module.vhd
    │   │   └── array_module_pack.vhd
    │   ├── basic_hierarchy_module/
    │   │   ├── Makefile
    │   │   └── basic_hierarchy_module.v
    │   ├── multi_dimension_array/
    │   │   ├── Makefile
    │   │   ├── cocotb_array.sv
    │   │   └── cocotb_array_pkg.sv
    │   ├── plusargs_module/
    │   │   ├── Makefile
    │   │   ├── tb_top.v
    │   │   └── tb_top.vhd
    │   ├── runner/
    │   │   ├── runner.sv
    │   │   └── runner.vhdl
    │   ├── runner_defines/
    │   │   └── runner_defines.sv
    │   ├── sample_module/
    │   │   ├── Makefile
    │   │   ├── sample_module.sv
    │   │   ├── sample_module.vhdl
    │   │   ├── sample_module_1.sv
    │   │   ├── sample_module_1.vhdl
    │   │   └── sample_module_package.vhdl
    │   ├── uart2bus/
    │   │   ├── Makefile
    │   │   ├── README
    │   │   ├── top/
    │   │   │   ├── verilog_toplevel.sv
    │   │   │   └── vhdl_toplevel.vhdl
    │   │   ├── verilog/
    │   │   │   ├── baud_gen.v
    │   │   │   ├── uart2bus_top.v
    │   │   │   ├── uart_parser.v
    │   │   │   ├── uart_rx.v
    │   │   │   ├── uart_top.v
    │   │   │   └── uart_tx.v
    │   │   └── vhdl/
    │   │       ├── baudGen.vhd
    │   │       ├── uart2BusTop.vhd
    │   │       ├── uart2BusTop_pkg.vhd
    │   │       ├── uartParser.vhd
    │   │       ├── uartRx.vhd
    │   │       ├── uartTop.vhd
    │   │       └── uartTx.vhd
    │   ├── verilator_timing/
    │   │   ├── Makefile
    │   │   ├── README.md
    │   │   └── test_verilator_timing.sv
    │   ├── vhdl_configurations/
    │   │   ├── Makefile
    │   │   ├── configurations.vhd
    │   │   ├── dut.vhd
    │   │   ├── testbench.sv
    │   │   └── testbench.vhd
    │   └── viterbi_decoder_axi4s/
    │       ├── Makefile
    │       ├── gpl-2.0.txt
    │       ├── packages/
    │       │   ├── pkg_components.vhd
    │       │   ├── pkg_helper.vhd
    │       │   ├── pkg_param.vhd
    │       │   ├── pkg_param_derived.vhd
    │       │   ├── pkg_trellis.vhd
    │       │   └── pkg_types.vhd
    │       └── src/
    │           ├── acs.vhd
    │           ├── axi4s_buffer.vhd
    │           ├── branch_distance.vhd
    │           ├── dec_viterbi.vhd
    │           ├── generic_sp_ram.vhd
    │           ├── ram_ctrl.vhd
    │           ├── recursion.vhd
    │           ├── reorder.vhd
    │           └── traceback.vhd
    ├── pytest/
    │   ├── test_array.py
    │   ├── test_cocotb.py
    │   ├── test_env.py
    │   ├── test_logging_with_envs.py
    │   ├── test_logic.py
    │   ├── test_logic_array.py
    │   ├── test_logs.py
    │   ├── test_parallel_cocotb.py
    │   ├── test_parameterize.py
    │   ├── test_plusargs.py
    │   ├── test_range.py
    │   ├── test_runner.py
    │   ├── test_timescale.py
    │   ├── test_version.py
    │   ├── test_vhdl_libraries_multiple.py
    │   └── test_waves.py
    ├── pytest_plugin/
    │   ├── conftest.py
    │   ├── test_caplog.py
    │   ├── test_cocotb.py
    │   ├── test_cocotb_top.py
    │   ├── test_end_test.py
    │   ├── test_fixture.py
    │   ├── test_parametrize.py
    │   ├── test_sample_module.py
    │   ├── test_sample_module_1.py
    │   ├── test_sample_module_2.py
    │   ├── test_session.py
    │   ├── test_timeout.py
    │   └── test_xfail.py
    ├── sxs.ps1
    └── test_cases/
        ├── test_array/
        │   ├── Makefile
        │   └── test_array.py
        ├── test_array_simple/
        │   ├── Makefile
        │   └── test_array_simple.py
        ├── test_async_bridge/
        │   ├── Makefile
        │   └── test_async_bridge.py
        ├── test_cocotb/
        │   ├── Makefile
        │   ├── common.py
        │   ├── pytest_assertion_rewriting.py
        │   ├── test_async_coroutines.py
        │   ├── test_async_generators.py
        │   ├── test_ci.py
        │   ├── test_clock.py
        │   ├── test_deprecated.py
        │   ├── test_edge_triggers.py
        │   ├── test_first_combine.py
        │   ├── test_handle.py
        │   ├── test_logging.py
        │   ├── test_queues.py
        │   ├── test_scheduler.py
        │   ├── test_sim_time_utils.py
        │   ├── test_start_soon.py
        │   ├── test_synchronization_primitives.py
        │   ├── test_task_manager.py
        │   ├── test_testfactory.py
        │   ├── test_tests.py
        │   ├── test_timing_triggers.py
        │   └── test_waiters.py
        ├── test_compare/
        │   ├── Makefile
        │   └── test_compare.py
        ├── test_configuration/
        │   ├── Makefile
        │   └── test_configurations.py
        ├── test_custom_entry/
        │   ├── .gitignore
        │   ├── Makefile
        │   ├── custom_entry.py
        │   └── expected_results.log
        ├── test_deadlock/
        │   ├── Makefile
        │   └── test_deadlock.py
        ├── test_defaultless_parameter/
        │   ├── Makefile
        │   ├── test_defaultless_parameter.py
        │   └── test_defaultless_parameter.sv
        ├── test_discovery/
        │   ├── Makefile
        │   └── test_discovery.py
        ├── test_dumpfile_verilator/
        │   ├── Makefile
        │   ├── test_dumpfile_verilator.py
        │   └── test_dumpfile_verilator.sv
        ├── test_exit_error/
        │   ├── Makefile
        │   └── test_exit.py
        ├── test_failure/
        │   ├── Makefile
        │   └── test_failure.py
        ├── test_fatal/
        │   ├── Makefile
        │   ├── fatal.sv
        │   ├── fatal.vhd
        │   └── test_fatal.py
        ├── test_first_on_coincident_triggers/
        │   ├── Makefile
        │   ├── test.sv
        │   ├── test.vhd
        │   └── test_first_on_coincident_triggers.py
        ├── test_force_release/
        │   ├── Makefile
        │   └── test_force_release.py
        ├── test_forked_exception/
        │   ├── Makefile
        │   └── test_forked_exception.py
        ├── test_gpi_extra_bad_lib/
        │   ├── Makefile
        │   └── test_simple.py
        ├── test_gpi_users_bad_lib/
        │   ├── Makefile
        │   └── test_simple.py
        ├── test_gpi_users_notset/
        │   ├── Makefile
        │   └── test_simple.py
        ├── test_indexing_warning/
        │   ├── Makefile
        │   ├── indexing_warning_tests.py
        │   ├── test_indexing_warning.py
        │   └── top.sv
        ├── test_inertial_writes/
        │   ├── Makefile
        │   └── inertial_writes_tests.py
        ├── test_integers/
        │   ├── Makefile
        │   ├── integer_tests.py
        │   ├── integers.sv
        │   ├── integers.vhdl
        │   ├── integers_pkg.vhdl
        │   └── test_integers.py
        ├── test_iteration_mixedlang/
        │   ├── Makefile
        │   └── test_iteration.py
        ├── test_iteration_verilog/
        │   ├── Makefile
        │   ├── endian_swapper.sv
        │   └── test_iteration_es.py
        ├── test_iteration_vhdl/
        │   ├── Makefile
        │   └── test_iteration.py
        ├── test_kill_sim/
        │   ├── Makefile
        │   └── kill_sim_tests.py
        ├── test_listing/
        │   ├── .gitignore
        │   ├── Makefile
        │   ├── check_results.py
        │   ├── test_listing_1.py
        │   └── test_listing_2.py
        ├── test_log_prefix/
        │   ├── Makefile
        │   ├── log_prefix_tests.py
        │   ├── test_log_prefix.py
        │   └── top.sv
        ├── test_logic_array_indexing/
        │   ├── Makefile
        │   ├── test_logic_array_indexing.py
        │   ├── test_logic_array_indexing.v
        │   └── test_logic_array_indexing.vhdl
        ├── test_long_log_msg/
        │   ├── .gitignore
        │   ├── Makefile
        │   ├── test.sv
        │   ├── test.vhd
        │   └── test_long_log_msg.py
        ├── test_max_failures/
        │   ├── Makefile
        │   └── test_max_failures.py
        ├── test_module_var_empty/
        │   └── Makefile
        ├── test_module_var_messy/
        │   ├── Makefile
        │   └── test_nothing.py
        ├── test_module_without_tests/
        │   ├── Makefile
        │   └── test_nothing.py
        ├── test_multi_dimension_array/
        │   ├── Makefile
        │   └── test_cocotb_array.py
        ├── test_multi_level_module_path/
        │   ├── Makefile
        │   ├── __init__.py
        │   └── test_package/
        │       ├── __init__.py
        │       └── test_module_path.py
        ├── test_null_ranges/
        │   ├── Makefile
        │   ├── null_ranges.vhdl
        │   ├── null_ranges_pkg.vhdl
        │   └── test_null_ranges.py
        ├── test_one_empty_test/
        │   ├── Makefile
        │   └── test_one_empty_test.py
        ├── test_package/
        │   ├── Makefile
        │   ├── cocotb_package.sv
        │   ├── cocotb_package_pkg.sv
        │   └── test_package.py
        ├── test_packed_union/
        │   ├── Makefile
        │   ├── test_packed_union.py
        │   └── test_packed_union.sv
        ├── test_plusargs/
        │   ├── Makefile
        │   └── plusargs.py
        ├── test_random_test_order/
        │   ├── Makefile
        │   └── test_random_test_order.py
        ├── test_seed/
        │   ├── .gitignore
        │   ├── Makefile
        │   ├── test_other.py
        │   └── test_seed.py
        ├── test_select_testcase/
        │   ├── Makefile
        │   ├── x_tests.py
        │   ├── y_tests.py
        │   └── y_tests_again.py
        ├── test_select_testcase_error/
        │   ├── Makefile
        │   └── x_tests.py
        ├── test_similar_scope_name/
        │   ├── Makefile
        │   ├── test.sv
        │   ├── test.vhd
        │   └── test_similar_scope_name.py
        ├── test_skip/
        │   ├── Makefile
        │   └── test_skip.py
        ├── test_skipped_explicitly_run/
        │   ├── Makefile
        │   └── test_skipped_explicitly_run.py
        ├── test_struct/
        │   ├── Makefile
        │   └── test_struct.py
        ├── test_sv_interface/
        │   ├── Makefile
        │   ├── test_sv_if.py
        │   └── top.sv
        ├── test_test_filter/
        │   ├── Makefile
        │   └── x_tests.py
        ├── test_toplevel_architecture_same_as_entity/
        │   ├── Makefile
        │   ├── test.vhdl
        │   └── test_toplevel_architecture_same_as_entity.py
        ├── test_toplevel_library/
        │   ├── Makefile
        │   ├── mylib.vhd
        │   └── test_myentity.py
        ├── test_verilator_timing_a/
        │   ├── Makefile
        │   └── test_verilator_timing_a.py
        ├── test_verilator_timing_b/
        │   ├── Makefile
        │   └── test_verilator_timing_b.py
        ├── test_verilator_timing_c/
        │   ├── Makefile
        │   ├── check_version
        │   └── test_verilator_timing_c.py
        ├── test_verilator_timing_d/
        │   ├── Makefile
        │   └── test_verilator_timing_d.py
        ├── test_verilog_access/
        │   ├── Makefile
        │   └── test_verilog_access.py
        ├── test_verilog_include_dirs/
        │   ├── Makefile
        │   ├── common/
        │   │   ├── a.vh
        │   │   └── b.vh
        │   ├── const_stream/
        │   │   └── c.vh
        │   ├── simple_and.sv
        │   └── test_verilog_include_dirs.py
        ├── test_vhdl_access/
        │   ├── Makefile
        │   └── test_vhdl_access.py
        ├── test_vhdl_integer/
        │   ├── Makefile
        │   ├── test_vhdl_integer.py
        │   └── vhdl_integer.vhdl
        ├── test_vhdl_libraries/
        │   ├── Makefile
        │   ├── a.vhdl
        │   ├── b.vhdl
        │   └── test_ab.py
        ├── test_vhdl_libraries_multiple/
        │   ├── Makefile
        │   ├── a.vhdl
        │   ├── b.vhdl
        │   ├── c.vhdl
        │   ├── d.vhdl
        │   ├── e.vhdl
        │   └── test_abcde.py
        └── test_xfail/
            ├── Makefile
            └── test_xfail.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .backportrc.json
================================================
// Documentation at
// https://github.com/sorenlouv/backport/blob/main/docs/config-file-options.md
// Comments are allowed, trailing commas are not.
{
  "repoOwner": "cocotb",
  "repoName": "cocotb",

  // Branches to backport to.
  "targetBranchChoices": [
    "stable/1.9"
  ],

  // Use `backport-to:VERSION` as indication of the target branch.
  // Also update .github/workflows/backport.yml when changing the label here.
  "branchLabelMapping": {
    "^backport-to:(\\d+\\.\\d+)$": "stable/$1"
  },

  // Labels assigned to the source PR after opening the backport PR(s).
  "sourcePRLabels": ["status:backport-created"],

  // In GitHub PR comments made by the bot suggest that users run
  // "npx backport", which automatically installs backport if necessary.
  "backportBinary": "npx backport",

  // Leave a note in the source PR if a backport failed.
  "publishStatusCommentOnFailure": true,

  // Title of the backport PR(s).
  "prTitle": "[{{targetBranch}}] Backport PR #{{sourcePullRequest.number}}: {{sourcePullRequest.title}}",

  // Labels added to the newly created backport PR(s).
  "targetPRLabels": ["type:backport"],

  // Default reviewers.
  "reviewers": ["cocotb/maintainers"]
}


================================================
FILE: .clang-format
================================================
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause
BasedOnStyle: Google
IndentWidth: 4
AccessModifierOffset: -2
PointerAlignment: Right


================================================
FILE: .codecov.yml
================================================
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause

# Codecov configuration
codecov:
    notify:
        # Codecov claims [1] to wait until all CI runs have completed, but that
        # doesn't work for our CI setup, causing early reports to come in which
        # indicate a drop in coverage. These reports are later updated as more
        # reports come in. But by that time the first issue comment has already
        # been made and an email has been sent. Prevent that by explicitly
        # specifying the number of builds that need to be uploaded to codecov
        # [2].
        #
        # Keep this number in sync with the CI configuration!
        #
        # The number should be the same as the total number of tests belonging
        # to "ci-free" and "ci-licensed".
        #
        # [1] https://docs.codecov.io/docs/merging-reports#how-does-codecov-know-when-to-send-notifications
        # [2] https://docs.codecov.io/docs/notifications#preventing-notifications-until-after-n-builds
        after_n_builds: 24

coverage:
    status:
        project:
            default:
                # Report a CI failure if coverage drops by more than 1 percent.
                threshold: 1%


================================================
FILE: .devcontainer/Dockerfile
================================================
ARG VERILATOR_VERSION=5.044
ARG UV_VERSION=0.10.2

# Container images used only to copy binaries out of it (see below).
FROM verilator/verilator:v${VERILATOR_VERSION} AS verilator
FROM ghcr.io/astral-sh/uv:${UV_VERSION} AS uv

# See https://github.com/devcontainers/images/tree/main/src/base-ubuntu/history
# for a description of what's in this base image.
FROM mcr.microsoft.com/devcontainers/base:2-ubuntu-24.04

RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
    && apt-get -y install --no-install-recommends \
        bear \
        bison  \
        build-essential \
        ccache \
        clang \
        clangd \
        colordiff \
        doxygen \
        flex \
        gdb \
        gdb \
        gh \
        ghdl \
        git \
        git-absorb \
        gperf  \
        graphviz \
        iverilog \
        libenchant-2-dev \
        lldb \
        pre-commit \
        python3-dev \
        python3-pip \
        python3-venv \
        valgrind \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

# Install UV from the official uv container image.
COPY --from=uv /uv /uvx /usr/local/bin/

# Install Verilator from official Verilator container image.
COPY --from=verilator /usr/local/share/verilator /usr/local/share/verilator
COPY --from=verilator /usr/local/bin/verilator* /usr/local/bin/
COPY --from=verilator /usr/local/share/man /usr/local/share/man
COPY --from=verilator /usr/local/share/pkgconfig/verilator.pc /usr/local/share/pkgconfig

# Install NVC from an upstream Debian package.
# (Use apt instead of dpkg to resolve dependencies automatically.)
ARG NVC_VERSION=1.18.2
ARG NVC_SHA256=bb6f19a84a398e13c56649996262db63ed9787e19dd0ad894774e132e170b785
RUN mkdir -p /tmp/nvc-install \
    && curl -SLo /tmp/nvc-install/nvc.deb "https://github.com/nickg/nvc/releases/download/r${NVC_VERSION}/nvc_${NVC_VERSION}-1_amd64_ubuntu-24.04.deb" \
    && echo "${NVC_SHA256} /tmp/nvc-install/nvc.deb" | sha256sum --check \
    && apt-get update && export DEBIAN_FRONTEND=noninteractive \
    && apt -y install --no-install-recommends /tmp/nvc-install/nvc.deb \
    && apt-get clean && rm -rf /var/lib/apt/lists/* \
    && rm -rf /tmp/nvc-install


================================================
FILE: .devcontainer/README.md
================================================
# Cocotb Development Environment in a Dev Container

The Dev Container provides a ready-to-code development environment for cocotb on Windows, Mac, or Linux.
Dev Containers combine VS Code with (Docker) containers and configuration within the cocotb repository.

By default, Dev Containers cannot access files on your local machine;
if you want to use proprietary simulators installed on your machine, you might be better off with a development environment on your machine itself.

## What's included in the Dev Container?

* Ubuntu 24.04
* Compilers: GCC and clang
* Open-source simulators: GHDL, Icarus Verilog, Verilator, NVC
* Productivity tools: GDB, LLDB, Valgrind, [Bear](https://github.com/rizsotto/Bear)

## Getting started

You need VS Code and the Dev Containers extension to run the Dev Container on your local machine.
Follow the [Dev Containers Getting Started documentation](https://code.visualstudio.com/docs/devcontainers/containers#_getting-started) documentation to install all required tools.

Then start the Dev Container:
* Open VS Code
* Open the command palette (F1)
* Type `Dev Containers: Clone Repository in Container Volume...` and press ENTER.
* Enter the repository URL `https://github.com/cocotb/cocotb` and press ENTER again.
* Wait for a short moment until the Dev Container is ready to be used.

Note: On Linux you can alternatively clone the Git repository on your local machine and open the folder in a container.
We don't recommend that on Windows or Mac to get good filesystem performance ([learn more](https://code.visualstudio.com/remote/advancedcontainers/improve-performance)).

After the Dev Container startup completed **open a new terminal** to run a first cocotb test.
Note: *Do not* reuse the `Welcome to Codespaces` terminal you might see -- it does not have an active Python venv and commands will fail.

```
cd examples/simple_dff
make WAVES=1 SIM=iverlog
code sim_build/dff.fst
```


================================================
FILE: .devcontainer/devcontainer.json
================================================
// VS Code Dev Container configuration file for a cocotb development environment.
{
	"name": "cocotb development",
	"build": {
		"context": "..",
		"dockerfile": "Dockerfile"
	},
	"postCreateCommand": ".devcontainer/post-create.sh",
	"postAttachCommand": "less .devcontainer/README.md",
	"customizations": {
		"vscode": {
			"extensions": [
				"llvm-vs-code-extensions.vscode-clangd",
				"ms-python.python",
				"ms-python.vscode-pylance",
				"lramseyer.vaporview"
			],
			"settings": {
				"tasks": {
					// See https://go.microsoft.com/fwlink/?LinkId=733558
					// for the documentation about the tasks.json format
					"version": "2.0.0",
					"tasks": [
						{
							"label": "Preview documentation",
							"type": "shell",
							// Run the docs_preview nox session with the virtual environment's Python
							// (if it exists).
							"command": "PATH=.venv/bin:$PATH nox -s docs_preview",
							"isBackground": true
						}
					]
				},
				"files.exclude": {
					"**/.venv": true
				}
			}
		}
	}
}


================================================
FILE: .devcontainer/post-create.sh
================================================
#!/bin/bash
set -eo pipefail

# Create and activate a virtual environment.
python3 -m venv --prompt cocotb-devenv .venv
. .venv/bin/activate

# Install prerequisites and development tools.
pre-commit install
pip3 install nox pytest

# Install cocotb in editable mode.
bear -- pip3 install -e .


================================================
FILE: .git-blame-ignore-revs
================================================
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause

# The following command will configure your local git repo to ignore these commits
# when doing git-blame.
#     git config blame.ignoreRevsFile .git-blame-ignore-revs

# clang-format
78e69fa428477b73808d08aec0e6702a924497f8
# black and isort
720b0e1071d0c720e61fa50fcb1813fd99198f20
# ruff
eb254d7581b64e5384ee87f49d4363d72be6e20a
785e0896930039023db3c2e2be47bed5375326c5
0f943a324a997bb31dcd55831b51b393d5435965


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--

Thanks for improving cocotb! Here are some points to make this as smooth as possible.
Not all of them may be applicable.

Most important: please explain *why* you are proposing this change.

* Make sure you have read https://github.com/cocotb/cocotb/blob/master/CONTRIBUTING.md
* Extend or add a test under `tests/test_cases/`.
* Add documentation under `docs/source/`,
  docstrings in Python code, or Doxygen markup in C/C++ code.
  Use ``versionadded``/``versionchanged``/``deprecated``.
* Add a newsfragment - see `docs/source/newsfragments/README.rst`.
* Use `closes #XXXX` to auto-close the issue that this PR fixes (if such).

-->


================================================
FILE: .github/dependabot.yml
================================================
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause

version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
    cooldown:
      default-days: 7
  - package-ecosystem: "uv"
    directory: "/"
    schedule:
      interval: "weekly"
    cooldown:
      default-days: 7
    versioning-strategy: lockfile-only
    groups:
      updates:
        applies-to: version-updates
        patterns:
          - "*"
        update-types:
          - "minor"
          - "patch"


================================================
FILE: .github/generate-envs.py
================================================
#!/usr/bin/env python3
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause

"""Generate a list of test environments.

Each environment must contain the following fields:
- lang: The TOPLEVEL_LANG of the test. Must be one of "verilog" or "vhdl".
- sim: The SIM of the test. Must be one of "icarus", "ghdl", "nvc", "verilator", "riviera", "questa", "xcelium", or "vcs".
- sim-version: The version of the simulator to use. Valid values depend upon the simulator and build recipe.
- os: The OS to operate on. Must be a valid value for the "jobs.<job_name>.runs-on" field for Github Actions.
- python-version: The Python version to test with. Must be a valid value for the "python-version" field of the "actions/setup-python" Github Action.
- group: The group to run the test in. One of "ci-free", "ci-licensed", "experimental", or "extended". See below note.

Optional fields:
- self-hosted: True if test needs to be run on a self-hosted Github Action runner. Default: False.
- cc: C compiler and linker to use. Default: gcc.
- cxx: C++ compiler and linker to use. Default: g++.
- extra_name: Additional tag prepended to computed name for test. Default: <none>.

What tests belong in what groups:
- ci-free: The most recent stable release of a given free simulator, all supported versions of Python, and all supported operating systems. Run on all PRs and master pushes.
- ci-licensed: The most recent stable release of a given licensed simulator. Run on all PRs and master pushes in the cocotb repo, but are skipped in forks.
- experimental: Development HEAD for each simulator, any under-development version of Python, and under-development simulator. Run weekly.
- extended: The minimum supoprted version of a simulator, and a smattering of released simulator versions between the minimum and most recent. Run weekly.

Ideally, whenever a new version of a simulator is released, a new test should be added for that simulator.
The current test in the "ci-free"/"ci-licensed" group should be moved to "extended",
and the new version should be added to "ci-free"/"ci-licensed" and any changes in behavior recorded with expectations to make CI pass.
"""

from __future__ import annotations

import argparse
import json
import sys

ENVS = [
    # Test different Python versions with package managed Icarus on Ubuntu
    {
        "lang": "vhdl",
        "sim": "nvc",
        "sim-version": "r1.19.2",
        "os": "ubuntu-22.04",
        "python-version": "3.9",
        "group": "ci-free",
    },
    {
        "lang": "vhdl",
        "sim": "nvc",
        "sim-version": "r1.19.2",
        "os": "ubuntu-22.04",
        "python-version": "3.10",
        "group": "ci-free",
    },
    {
        "lang": "vhdl",
        "sim": "nvc",
        "sim-version": "r1.19.2",
        "os": "ubuntu-22.04",
        "python-version": "3.11",
        "group": "ci-free",
    },
    {
        "lang": "vhdl",
        "sim": "nvc",
        "sim-version": "r1.19.2",
        "os": "ubuntu-22.04",
        "python-version": "3.12",
        "group": "ci-free",
    },
    {
        "lang": "vhdl",
        "sim": "nvc",
        "sim-version": "r1.19.2",
        "os": "ubuntu-22.04",
        "python-version": "3.13",
        "group": "ci-free",
    },
    {
        "lang": "vhdl",
        "sim": "nvc",
        "sim-version": "r1.19.2",
        "os": "ubuntu-22.04",
        "python-version": "3.14",
        "group": "ci-free",
    },
    # {
    #     "lang": "vhdl",
    #     "sim": "nvc",
    #     "sim-version": "r1.17.1",
    #     "os": "ubuntu-22.04",
    #     "python-version": "3.15",
    #     "group": "experimental",
    # },
    # Test Icarus on Ubuntu
    {
        "lang": "verilog",
        "sim": "icarus",
        "sim-version": "v11_0",  # Minimum supported version
        "os": "ubuntu-22.04",
        "python-version": "3.9",
        "group": "extended",
    },
    {
        "lang": "verilog",
        "sim": "icarus",
        "sim-version": "v13_0",  # The latest release version.
        "os": "ubuntu-22.04",
        "python-version": "3.9",
        "group": "ci-free",
    },
    {
        "lang": "verilog",
        "sim": "icarus",
        "sim-version": "master",
        "os": "ubuntu-22.04",
        "python-version": "3.9",
        "group": "experimental",
    },
    # Test GHDL on Ubuntu
    {
        "lang": "vhdl",
        "sim": "ghdl",
        "sim-version": "v2.0.0",  # GHDL 2.0 is the minimum supported version.
        "os": "ubuntu-22.04",
        "python-version": "3.9",
        "group": "extended",
    },
    {
        "lang": "vhdl",
        "sim": "ghdl",
        "sim-version": "v5.1.1",  # The latest release version.
        "os": "ubuntu-22.04",
        "python-version": "3.9",
        "group": "ci-free",
    },
    {
        "lang": "vhdl",
        "sim": "ghdl",
        "sim-version": "master",
        "os": "ubuntu-22.04",
        "python-version": "3.9",
        "group": "experimental",
    },
    # Testing latest release is covered by the Python version tests
    {
        "lang": "vhdl",
        "sim": "nvc",
        "sim-version": "master",
        "os": "ubuntu-22.04",
        "python-version": "3.9",
        "group": "experimental",
    },
    # Test Verilator on Ubuntu
    {
        "lang": "verilog",
        "sim": "verilator",
        "sim-version": "v5.046",  # Latest release version.
        "os": "ubuntu-22.04",
        "python-version": "3.10",
        "group": "ci-free",
    },
    {
        "lang": "verilog",
        "sim": "verilator",
        "sim-version": "master",
        "os": "ubuntu-22.04",
        "python-version": "3.10",
        "group": "experimental",
    },
    # Test other OSes
    # Icarus homebrew (ARM64)
    {
        "lang": "verilog",
        "sim": "icarus",
        "sim-version": "homebrew-stable",
        "os": "macos-14",
        "python-version": "3.9",
        "group": "ci-free",
    },
    # Icarus homebrew (ARM64) (HEAD/master)
    {
        "lang": "verilog",
        "sim": "icarus",
        "sim-version": "homebrew-HEAD",
        "os": "macos-14",
        "python-version": "3.9",
        "group": "experimental",
    },
    # Verilator macOS (ARM64) HEAD
    {
        "lang": "verilog",
        "sim": "verilator",
        "sim-version": "master",
        "os": "macos-14",
        "python-version": "3.9",
        "group": "experimental",
    },
    # Verilator macOS (ARM64) latest release
    {
        "lang": "verilog",
        "sim": "verilator",
        "sim-version": "v5.046",
        "os": "macos-14",
        "python-version": "3.9",
        "group": "ci-free",
    },
    # Icarus homebrew (x86)
    {
        "lang": "verilog",
        "sim": "icarus",
        "sim-version": "homebrew-stable",
        "os": "macos-15-intel",
        "python-version": "3.9",
        "group": "ci-free",
    },
    # Icarus windows from source
    {
        "lang": "verilog",
        "sim": "icarus",
        "sim-version": "v13_0",
        "os": "windows-latest",
        "python-version": "3.11",
        "toolchain": "mingw",
        "extra-name": "mingw",
        "group": "ci-free",
    },
    # use msvc instead of mingw
    {
        "lang": "verilog",
        "sim": "icarus",
        "sim-version": "v13_0",
        "os": "windows-latest",
        "python-version": "3.11",
        "toolchain": "msvc",
        "extra-name": "msvc",
        "group": "ci-free",
    },
    # NVC on windows
    {
        "lang": "vhdl",
        "sim": "nvc",
        "sim-version": "r1.19.2",
        "os": "windows-latest",
        "python-version": "3.11",
        "group": "ci-free",
    },
    # Other
    # use clang instead of gcc
    {
        "lang": "vhdl",
        "sim": "nvc",
        "sim-version": "r1.19.2",
        "os": "ubuntu-22.04",
        "python-version": "3.9",
        "cxx": "clang++",
        "cc": "clang",
        "extra-name": "clang",
        "group": "ci-free",
    },
    # Test Siemens Questa on Ubuntu
    {
        "lang": "verilog",
        "sim": "questa",
        "sim-version": "siemens/questa/2025.2",
        "os": "ubuntu-22.04",
        "self-hosted": True,
        "python-version": "3.9",
        "group": "ci-licensed",
    },
    {
        "lang": "vhdl and fli",
        "sim": "questa",
        "sim-version": "siemens/questa/2025.2",
        "os": "ubuntu-22.04",
        "self-hosted": True,
        "python-version": "3.9",
        "group": "ci-licensed",
    },
    {
        "lang": "vhdl and vhpi",
        "sim": "questa",
        "sim-version": "siemens/questa/2025.2",
        "os": "ubuntu-22.04",
        "self-hosted": True,
        "python-version": "3.9",
        "group": "ci-licensed",
    },
    # Test Aldec Riviera-PRO on Ubuntu
    {
        "lang": "verilog",
        "sim": "riviera",
        "sim-version": "aldec/rivierapro/2025.10",
        "os": "ubuntu-22.04",
        "self-hosted": True,
        "python-version": "3.9",
        "group": "ci-licensed",
    },
    {
        "lang": "vhdl",
        "sim": "riviera",
        "sim-version": "aldec/rivierapro/2025.10",
        "os": "ubuntu-22.04",
        "self-hosted": True,
        "python-version": "3.9",
        "group": "ci-licensed",
    },
    # Test Cadence Xcelium on Ubuntu
    {
        "lang": "verilog",
        "sim": "xcelium",
        "sim-version": "cadence/xcelium/2509",
        "os": "ubuntu-22.04",
        "self-hosted": True,
        "python-version": "3.9",
        "group": "ci-licensed",
    },
    {
        "lang": "vhdl",
        "sim": "xcelium",
        "sim-version": "cadence/xcelium/2509",
        "os": "ubuntu-22.04",
        "self-hosted": True,
        "python-version": "3.9",
        "group": "ci-licensed",
    },
    # Test Synopsys VCS on Ubuntu
    {
        "lang": "verilog",
        "sim": "vcs",
        "sim-version": "synopsys/vcs/X-2025.06",
        "os": "ubuntu-22.04",
        "self-hosted": True,
        "python-version": "3.9",
        "group": "ci-licensed",
    },
    {
        "lang": "vhdl",
        "sim": "vcs",
        "sim-version": "synopsys/vcs/X-2025.06",
        "os": "ubuntu-22.04",
        "self-hosted": True,
        "python-version": "3.9",
        "group": "experimental",
    },
]

ghdl_versions = ("v3.0.0", "v4.1.0")
for version in ghdl_versions:
    ENVS += [
        {
            "lang": "vhdl",
            "sim": "ghdl",
            "sim-version": version,
            "os": "ubuntu-22.04",
            "python-version": "3.9",
            "group": "extended",
        },
    ]

icarus_versions = ("v12_0",)
for version in icarus_versions:
    ENVS += [
        {
            "lang": "verilog",
            "sim": "icarus",
            "sim-version": version,
            "os": "ubuntu-22.04",
            "python-version": "3.9",
            "group": "extended",
        },
    ]

verilator_versions = ("v5.036", "v5.038", "v5.040", "v5.042", "v5.044")
for version in verilator_versions:
    ENVS += [
        {
            "lang": "verilog",
            "sim": "verilator",
            "sim-version": version,
            "os": "ubuntu-22.04",
            "python-version": "3.9",
            "group": "extended",
        },
    ]

nvc_versions = (
    "r1.11.0",
    "r1.12.2",
    "r1.13.3",
    "r1.14.2",
    "r1.15.2",
    "r1.16.0",  # First version with --preserve-case
    "r1.17.1",
    "r1.18.2",
)
for version in nvc_versions:
    ENVS += [
        {
            "lang": "vhdl",
            "sim": "nvc",
            "sim-version": version,
            "os": "ubuntu-22.04",
            "python-version": "3.9",
            "group": "extended",
        },
    ]

# Questa: test more versions as part of the extended tests.
questa_versions_novhpi = ("2021.2", "2021.3", "2021.4", "2022.1", "2022.2")
questa_versions_vhpi = (
    "2022.3",
    "2022.4",
    "2023.1",
    "2023.2",
    "2023.4",
    "2024.1",
    "2024.2",
)

for version in questa_versions_novhpi + questa_versions_vhpi:
    ENVS += [
        {
            "lang": "verilog",
            "sim": "questa",
            "sim-version": f"siemens/questa/{version}",
            "os": "ubuntu-22.04",
            "self-hosted": True,
            "python-version": "3.9",
            "group": "extended",
        },
        {
            "lang": "vhdl and fli",
            "sim": "questa",
            "sim-version": f"siemens/questa/{version}",
            "os": "ubuntu-22.04",
            "self-hosted": True,
            "python-version": "3.9",
            "group": "extended",
        },
    ]
for version in questa_versions_vhpi:
    ENVS += [
        {
            "lang": "vhdl and vhpi",
            "sim": "questa",
            "sim-version": f"siemens/questa/{version}",
            "os": "ubuntu-22.04",
            "self-hosted": True,
            "python-version": "3.9",
            "group": "extended",
        },
    ]

# Riviera-PRO: test more versions as part of the extended tests.
riviera_versions = (
    "2019.10",
    "2020.04",
    "2020.10",
    "2021.04",
    "2021.10",
    "2022.04",
    "2023.10",
    "2024.04",
    "2024.10",
    "2025.04",
)
for version in riviera_versions:
    ENVS += [
        {
            "lang": "verilog",
            "sim": "riviera",
            "sim-version": f"aldec/rivierapro/{version}",
            "os": "ubuntu-22.04",
            "self-hosted": True,
            "python-version": "3.9",
            "group": "extended",
        },
        {
            "lang": "vhdl",
            "sim": "riviera",
            "sim-version": f"aldec/rivierapro/{version}",
            "os": "ubuntu-22.04",
            "self-hosted": True,
            "python-version": "3.9",
            "group": "extended",
        },
    ]

# Xcelium: test more versions as part of the extended tests.
xcelium_versions = ("2309", "2403", "2503")
for version in xcelium_versions:
    ENVS += [
        {
            "lang": "verilog",
            "sim": "xcelium",
            "sim-version": f"cadence/xcelium/{version}",
            "os": "ubuntu-22.04",
            "self-hosted": True,
            "python-version": "3.9",
            "group": "extended",
        },
        {
            "lang": "vhdl",
            "sim": "xcelium",
            "sim-version": f"cadence/xcelium/{version}",
            "os": "ubuntu-22.04",
            "self-hosted": True,
            "python-version": "3.9",
            "group": "extended",
        },
    ]

# VCS: test more versions as part of the extended tests.
vcs_versions = ("W-2024.09",)
for version in vcs_versions:
    ENVS += [
        {
            "lang": "verilog",
            "sim": "vcs",
            "sim-version": f"synopsys/vcs/{version}",
            "os": "ubuntu-22.04",
            "self-hosted": True,
            "python-version": "3.9",
            "group": "extended",
        },
        # Don't run extended tests for VCS/VHDL yet until we have a version that
        # works.
    ]


def append_str_val(listref, my_list, key) -> None:
    if key not in my_list:
        return
    listref.append(str(my_list[key]))


def main() -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--group")
    parser.add_argument("--output-format", choices=("gha", "json"), default="json")
    parser.add_argument(
        "--gha-output-file",
        type=argparse.FileType("a", encoding="utf-8"),
        help="The $GITHUB_OUTPUT file.",
    )

    args = parser.parse_args()

    if args.group is not None and args.group != "":
        selected_envs = [t for t in ENVS if "group" in t and t["group"] == args.group]
    else:
        # Return all tasks if no group is selected.
        selected_envs = ENVS

    for env in selected_envs:
        # The "runs-on" job attribute is a string if we're using the GitHub-
        # provided hosted runners, or an array with special keys if we're
        # using self-hosted runners.
        if "self-hosted" in env and env["self-hosted"] and "runs-on" not in env:
            env["runs-on"] = ["self-hosted", f"cocotb-private-{env['os']}"]
        else:
            env["runs-on"] = env["os"]

        # Assemble the human-readable name of the job.
        name_parts = []
        append_str_val(name_parts, env, "extra-name")
        append_str_val(name_parts, env, "sim")
        if "/" in env["sim-version"]:
            # Shorten versions like 'siemens/questa/2023.2' to '2023.2'.
            name_parts.append(env["sim-version"].split("/")[-1])
        else:
            name_parts.append(env["sim-version"])
        append_str_val(name_parts, env, "lang")
        append_str_val(name_parts, env, "os")
        append_str_val(name_parts, env, "python-version")
        if env.get("may-fail") is not None:
            name_parts.append("May fail")

        env["name"] = "|".join(name_parts)

    if args.output_format == "gha":
        # Output for GitHub Actions (GHA). Appends the configuration to
        # the file named in the "--gha-output-file" argument.

        assert args.gha_output_file is not None

        # The generated JSON output may not contain newlines to be parsed by GHA
        print(f"envs={json.dumps(selected_envs)}", file=args.gha_output_file)

        # Print the the selected environments for easier debugging.
        print("Generated the following test configurations:")
        print(json.dumps(selected_envs, indent=2))
    elif args.output_format == "json":
        print(json.dumps(selected_envs, indent=2))
    else:
        assert False

    return 0


if __name__ == "__main__":
    sys.exit(main())


================================================
FILE: .github/issue_template.md
================================================
<!--
In case you are reporting a problem with running cocotb,
please remember to add relevant information about your environment, such as
* the cocotb version used,
* the operating system and version (32/64 bit),
* the simulator and version (32/64 bit),
* the Python version, and where it's coming from (e.g. system, Anaconda, self-installed, ...),
* (part of) the log file (cleaned of proprietary information).
If you are unsure about any of the above items, open the issue anyway and we will figure it out together.
Thanks for helping improve cocotb!
-->


================================================
FILE: .github/workflows/backport.yml
================================================
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause

# A workflow to automatically backport pull requests to a stable branch.
#
# This workflow uses the Backport CLI (https://github.com/sorenlouv/backport)
# under the hood, which is configured in `.backportrc.json` in the repository
# root.
#
# See https://github.com/sorenlouv/backport-github-action for documentation
# on the used action.

name: Backport PRs to stable branches

on:
  pull_request_target:
    # Run this workflow when a label on a PR is added, or if it's closed.
    types: ["labeled", "closed"]

jobs:
  backport:
    name: Backport PR
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    steps:
      # Run the backport action only on PRs with one of the `backport-to:`
      # labels applied.
      #
      # Also update `branchLabelMapping` in `.backportrc.json` when changing the
      # label here.
      #
      # Implementation note: GitHub's contains() is matching the full string
      # when operating on an array (and startsWith() does not operate on arrays
      # at all). Do the label matching with jq instead.
      - name: Check for backport labels
        id: check_labels
        run: |-
          labels='${{ toJSON(github.event.pull_request.labels.*.name) }}'
          matched=$(echo $labels | jq '.|map(select(startswith("backport-to:"))) | length')
          echo "matched=$matched"
          echo "matched=$matched" >> $GITHUB_OUTPUT

      - name: Backport Action
        if: fromJSON(steps.check_labels.outputs.matched) > 0
        uses: sorenlouv/backport-github-action@9460b7102fea25466026ce806c9ebf873ac48721  # v11.0.0
        with:
          # GITHUB_TOKEN is available by default, but the powers it has are
          # configurable. Follow the GitHub documentation at
          # https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#setting-the-permissions-of-the-github_token-for-your-repository
          # to "Allow GitHub Actions to create and approve pull requests".
          github_token: ${{ secrets.GITHUB_TOKEN }}

      - name: Info log
        if: ${{ fromJSON(steps.check_labels.outputs.matched) > 0 && success() }}
        run: cat ~/.backport/backport.info.log

      - name: Debug log
        if: ${{ fromJSON(steps.check_labels.outputs.matched) > 0 && failure() }}
        run: cat ~/.backport/backport.debug.log


================================================
FILE: .github/workflows/benchmark.yml
================================================
name: Performance Benchmark
# adapted from https://github.com/benchmark-action/github-action-benchmark#charts-on-github-pages-1

concurrency:
  group: ${{ github.workflow }}-${{ github.event.number }}-${{ github.event.ref }}
  cancel-in-progress: ${{ !(contains(github.ref, 'release/') || contains(github.ref, 'master')) }}

on:
  push:
    branches:
    - master
  pull_request:
    branches:
      - master

jobs:

  tests:
    if: github.repository == 'cocotb/cocotb'
    name: Python ${{matrix.python-version}}
    runs-on: ubuntu-22.04

    strategy:
      fail-fast: false
      matrix:
        include:
          - python-version: 3.9

    steps:
    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2
    - name: Set up Python ${{matrix.python-version}}
      uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405  # v6.2.0
      with:
        python-version: ${{matrix.python-version}}

    - name: Install Icarus Verilog
      run: |
        sudo apt-get install -y --no-install-recommends iverilog

    - name: Set up NVC (Ubuntu)
      run: |
        sudo apt-get install -y --no-install-recommends llvm-dev libdw-dev flex libzstd-dev pkg-config
        git clone https://github.com/nickg/nvc.git
        cd nvc
        git reset --hard r1.16.0
        ./autogen.sh
        mkdir build
        cd build
        ../configure
        make -j $(nproc)
        sudo make install

    - name: Run benchmark
      run: |
        pip install pytest pytest-benchmark
        pip install .
        pytest -c /dev/null tests/benchmarks --benchmark-json output.json

    # Pushing the benchmark requires elevated permissions to the
    # cocotb/cocotb-benchmark-results repository, which we only grant for
    # master builds, not for PR builds.
    - name: Generate a token to access cocotb/cocotb-benchmark-results
      if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
      id: generate_token
      uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859  # v3.0.0
      with:
        app-id: ${{ secrets.COCOTB_CI_REPOACCESS_APP_ID }}
        private-key: ${{ secrets.COCOTB_CI_REPOACCESS_APP_PRIVATE_KEY }}
        owner: ${{ github.repository_owner }}
        repositories: cocotb-benchmark-results

    - name: Store benchmark result
      if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
      uses: benchmark-action/github-action-benchmark@a60cea5bc7b49e15c1f58f411161f99e0df48372  # v1.22.0
      continue-on-error: true
      with:
        tool: 'pytest'
        output-file-path: output.json
        alert-threshold: '120%'
        fail-on-alert: true
        github-token: ${{ steps.generate_token.outputs.token }}
        auto-push: true
        gh-repository: 'github.com/cocotb/cocotb-benchmark-results'


================================================
FILE: .github/workflows/build-test-dev.yml
================================================
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause

name: CI

concurrency:
  group: ${{ github.workflow }}-${{ github.event.number }}-${{ github.event.ref }}
  cancel-in-progress: ${{ !(contains(github.ref, 'release/') || contains(github.ref, 'master')) }}

on:
  # Run this workflow on every push to the master branch, or a stable branch.
  push:
    branches:
      - master
      - "stable/**"
  pull_request:
    branches:
      - master
      - 'stable/**'
    paths-ignore:
      # Skip running tests for changes only in:
      # Documentation
      - 'docs/**'
      # Dot-files not related to running tests
      - '.devcontainer/**'
      - '.backportrc.json'
      - '.clang-format'
      - '.git-blame-ignore-revs'
      - '.gitignore'
      - '.pre-commit-config.yaml'
      - '.readthedocs.yml'
      # Information files
      - 'LICENSE'
      - 'README.md'
      - 'CONTRIBUTING.md'
      - 'MANIFEST.in'
      # Github files that aren't related to testing
      - '.github/issue_template.md'
      - '.github/PULL_REQUEST_TEMPLATE.md'
      - '.github/workflows/backport.yml'
      - '.github/workflows/benchmark.yml'
      - '.github/workflows/ecosystem-compat.yml'
      - '.github/workflows/experimental.yml'
      - '.github/workflows/extended.yml'
      - '.github/workflows/stale.yml'

jobs:
  test_dev:
    name: Regression Tests
    uses: ./.github/workflows/regression-tests.yml
    with:
      test_task: dev_test
      collect_coverage: true
      group: ci-free

  test_dev_licensed:
    if: github.repository == 'cocotb/cocotb'
    name: Regression Tests
    uses: ./.github/workflows/regression-tests.yml
    with:
      test_task: dev_test
      collect_coverage: true
      group: ci-licensed


================================================
FILE: .github/workflows/build-test-release.yml
================================================
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause

#
# DO NOT RENAME THIS FILE!
# PyPi uploads use OIDC, aka Trusted Publishing, to avoid the need for API keys.
# https://pypi.org/manage/project/cocotb/settings/publishing/ is configured to
# allow uploads from the cocotb GitHub project and this exact file name.
#

name: Release

concurrency:
  group: ${{ github.workflow }}-${{ github.event.number }}-${{ github.event.ref }}
  cancel-in-progress: ${{ !(contains(github.ref, 'release/') || contains(github.ref, 'master')) }}

on:
  # Run this workflow on every push to master or to a stable branch.
  push:
    branches:
      - master
      - "stable/**"
    tags:
      - 'v*'

jobs:
  build_release:
    name: Build distribution on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false # Keep going even if one matrix build fails.
      matrix:
        os:
          - ubuntu-22.04
          - windows-2022
          - macos-15-intel  # x86_64
          - macos-14        # ARM64
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2
      - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405  # v6.2.0
        with:
          python-version: "3.12"
      - name: Install uv
        uses: astral-sh/setup-uv@v7
      - name: Install nox
        run: python3 -m pip install nox nox-uv

      # Use the cibuildwheel configuration inside nox, instead of the
      # cibuildwheel GitHub Action, to make the process easy to reproduce
      # locally.
      - name: Build cocotb release
        run: |
          nox -s release_clean
          nox -s release_build

      - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f  # v7.0.0
        with:
          name: cocotb-dist-${{ matrix.os }}
          path: |
            dist/*.whl
            dist/*.tar.gz

  # This tests both the sdist and wheel builds in separate venvs back to back with just the pytest tests.
  test_release:
    name: Regression Tests
    needs: build_release
    uses: ./.github/workflows/regression-tests.yml
    with:
      test_task: release_test
      download_artifacts: true
      group: ci-free

  test_release_licensed:
    name: Regression Tests
    needs: build_release
    uses: ./.github/workflows/regression-tests.yml
    with:
      test_task: release_test
      download_artifacts: true
      group: ci-licensed

  deploy_pypi:
    name: Deploy to pypi.org
    needs:
    - test_release
    - test_release_licensed
    permissions:
      id-token: write
    runs-on: ubuntu-22.04
    # Only upload tagged releases.
    if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
    steps:
    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2
    - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405  # v6.2.0
      with:
        python-version: "3.12"
    - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c  # v8.0.1
      with:
        path: dist
        pattern: cocotb-dist-*
        merge-multiple: true
    - name: Publish distribution to PyPI
      uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e  # v1.13.0
      # Authentication to PyPi is done through OIDC ("Trusted Publishing").


================================================
FILE: .github/workflows/ecosystem-compat.yml
================================================
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause

# Tests to ensure that projects depending on cocotb continue to work with the
# latest development version of cocotb.
#
# Generally, we test the development version of cocotb against supported,
# released versions of the other projects. (It is expected that the projects
# themselves test their in-development code against the released version of
# cocotb.)

name: Ecosystem compatibility tests

on:
  # Run daily at midnight (UTC).
  schedule:
    - cron: '0 0 * * *'
  # Allow triggering a CI run from the web UI.
  workflow_dispatch:

jobs:
  cocotb-coverage:
    if: github.repository == 'cocotb/cocotb'
    name: Test cocotb-coverage
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        cocotb-coverage-version: [ "2.0" ]

    steps:
      - name: Set up Python
        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405  # v6.2.0
        with:
          python-version: "3.11"

      - name: Install Icarus Verilog
        run: sudo apt-get install -y --no-install-recommends iverilog

      - name: Checkout cocotb-coverage repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2
        with:
          repository: mciepluc/cocotb-coverage
          path: cocotb-coverage
          ref: v${{ matrix.cocotb-coverage-version }}

      - name: Install the release version of cocotb-coverage
        run: pip install ./cocotb-coverage

      - name: Install the development version of cocotb
        run: pip install git+https://github.com/cocotb/cocotb.git

      - name: Run tests
        if: ${{ matrix.cocotb-coverage-version }} == '2.0'
        env:
          SIM: icarus
          TOPLEVEL_LANG: verilog
        run: |
          pip install pytest cocotb-bus numpy
          cd cocotb-coverage
          make -k -C tests
          make -C examples/fifo/tests
          make -C examples/pkt_switch/tests

  pyuvm:
    if: github.repository == 'cocotb/cocotb'
    name: Test pyuvm
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        pyuvm-version: [ "4.0.1" ]

    steps:
      - name: Set up Python
        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405  # v6.2.0
        with:
          python-version: "3.11"

      - name: Install Icarus Verilog
        run: sudo apt-get install -y --no-install-recommends iverilog

      - name: Install NVC
        uses: nickg/setup-nvc@v1
        with:
          version: r1.19.3

      - name: Checkout pyuvm repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2
        with:
          repository: pyuvm/pyuvm
          path: pyuvm
          ref: ${{ matrix.pyuvm-version }}

      - name: Install pyuvm
        run: pip install ./pyuvm

      - name: Install the development version of cocotb
        run: pip install git+https://github.com/cocotb/cocotb.git

      - name: Run tests
        if: ${{ matrix.pyuvm-version }} == '4.0.1'
        working-directory: pyuvm
        env:
          VERILOG_SIM: icarus
          VHDL_SIM: nvc
        run: |
          pip install pytest
          pytest
          make cocotb_tests

  forastero:
    if: github.repository == 'cocotb/cocotb'
    name: Test Forastero
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        forastero-version: [ "1.2.1" ]

    steps:
      - name: Set up Python
        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405  # v6.2.0
        with:
          python-version: "3.13"

      - name: Install Icarus Verilog
        run: sudo apt-get install -y --no-install-recommends iverilog

      - name: Checkout Forastero repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2
        with:
          repository: intuity/forastero
          path: forastero
          ref: ${{ matrix.forastero-version }}

      - name: Install the release version of Forastero
        run: pip install ./forastero

      - name: Install the development version of cocotb
        run: pip install git+https://github.com/cocotb/cocotb.git

      - name: Run tests
        working-directory: forastero
        env:
          SIM: icarus
          TOPLEVEL_LANG: verilog
        run: |
          make -C examples/arbiter_strict
          make -C examples/arbiter_window


================================================
FILE: .github/workflows/experimental.yml
================================================
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause

# A workflow where the tool is the moving target, or the tool is known to be
# not fully supported by cocotb, but we still want to see how its support
# evolves over time.

name: Test experimental tool versions

on:
  # Run every Monday at 2am (UTC).
  schedule:
    - cron: '0 2 * * 1'
  # Allow triggering a CI run from the web UI.
  workflow_dispatch:

jobs:
  test_dev:
    if: github.repository == 'cocotb/cocotb'
    name: Regression Tests
    uses: ./.github/workflows/regression-tests.yml
    with:
      test_task: dev_test
      group: experimental


================================================
FILE: .github/workflows/extended.yml
================================================
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause

# Run tests against an extended set of simulator (versions).

name: Test extended tool versions

on:
  # Run every Sunday at 2am (UTC).
  schedule:
    - cron: '0 2 * * 0'
  # Allow triggering a CI run from the web UI.
  workflow_dispatch:

jobs:
  test_dev:
    if: github.repository == 'cocotb/cocotb'
    name: Regression Tests
    uses: ./.github/workflows/regression-tests.yml
    with:
      test_task: dev_test
      group: extended
      max_parallel: 5


================================================
FILE: .github/workflows/regression-tests.yml
================================================
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause
name: Regression Tests

on:
  workflow_call:
    inputs:
      test_task:
        required: true
        type: string
        default: dev_test
      collect_coverage:
        required: false
        type: boolean
        default: false
      download_artifacts:
        required: false
        type: boolean
        default: false
      group:
        required: false
        type: string
        default: "ci-free"
        description: Group of environments to run the tests against. Leave empty to run them all.
      max_parallel:
        required: false
        type: number
        default: 0
        description: Maximum number of parallel matrix jobs
      setup_python:
        required: false
        type: string
        description: Which Github Action to setup Python

jobs:

  generate_envs:
    runs-on: ubuntu-latest
    name: Generate a list of environments to run tests against
    steps:
    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2
    - run: ./.github/generate-envs.py --output-format=gha --gha-output-file="$GITHUB_OUTPUT" --group="${{inputs.group}}"
      id: run_generate_script
    outputs:
      envs: ${{ steps.run_generate_script.outputs.envs }}

  tests:

    needs: generate_envs

    name: ${{matrix.name}}
    runs-on: ${{matrix.runs-on}}
    timeout-minutes: 60

    env:
      SIM: ${{matrix.sim}}
      TOPLEVEL_LANG: ${{matrix.lang}}
      CXX: ${{matrix.cxx || 'g++'}}
      CC: ${{matrix.cc || 'gcc'}}
      OS: ${{matrix.os}}
      PYTHON_VERSION: ${{matrix.python-version}}

    strategy:
      fail-fast: false
      matrix:
        include: ${{ fromJson(needs.generate_envs.outputs.envs) }}
      max-parallel: ${{ inputs.max_parallel }}

    steps:
    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd  # v6.0.2
      with:
        # GitHub PR's create a merge commit, and Actions are run on that commit.
        # Codecov's uploader needs the previous commit (tip of PR branch) to associate coverage correctly.
        # A fetch depth of 2 provides enough information without fetching the entire history.
        fetch-depth: 2

    - name: setup ccache
      uses: hendrikmuhs/ccache-action@33522472633dbd32578e909b315f5ee43ba878ce # v1.2.22
      if: ${{ startsWith(matrix.os, 'ubuntu') }}
      with:
        key: ${{ matrix.os }}-${{matrix.cc || 'gcc'}}
    - name: setup ccache path
      if: ${{ startsWith(matrix.os, 'ubuntu') }}
      run: |
        echo "/usr/lib/ccache:/usr/local/opt/ccache/libexec" >> $GITHUB_PATH

     # Use the ccache cache for all compilers.

    - name: Update package index (ubuntu)
      if: startsWith(matrix.os, 'ubuntu')
      run: sudo apt-get update

     # Download distribution artifacts (if any).
    - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c  # v8.0.1
      if: ${{ inputs.download_artifacts }}
      with:
        path: dist
        pattern: cocotb-dist-*
        merge-multiple: true

      # Install Python
    - name: Set up Python ${{matrix.python-version}} (setup-python)
      if: matrix.setup_python == ''
      uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405  # v6.2.0
      with:
        python-version: ${{matrix.python-version}}
        allow-prereleases: true

    - name: Install msys2 (Windows)
      if: startsWith(matrix.os, 'windows') && matrix.sim == 'icarus'
      uses: msys2/setup-msys2@v2
      with:
        msystem: MINGW64
        update: true
        install: >
          base-devel
          gperf
          mingw-w64-x86_64-toolchain

      # Install
    - name: Install XML-dependencies for Python 3.14
      if: startsWith(matrix.python-version, '3.14') && startsWith(matrix.os, 'ubuntu')
      run: sudo apt-get install -y --no-install-recommends libxml2-dev libxslt-dev
      # Run tests that don't need a simulator.
    - name: Install uv
      uses: astral-sh/setup-uv@v7
    - name: Install Python testing dependencies
      run: |
        pip install nox nox-uv

      # Install Icarus
    - name: Set up Icarus (Ubuntu - apt)
      if: startsWith(matrix.os, 'ubuntu') && matrix.sim == 'icarus' && matrix.sim-version == 'apt'
      run: |
        sudo apt-get install -y --no-install-recommends iverilog
    - name: Set up Icarus (Ubuntu - source)
      if: startsWith(matrix.os, 'ubuntu') && matrix.sim == 'icarus' && matrix.sim-version != 'apt'
      run: |
        sudo apt-get install -y --no-install-recommends g++ gperf flex bison make autoconf
        git clone https://github.com/steveicarus/iverilog.git
        cd iverilog
        git reset --hard ${{matrix.sim-version}}
        bash ./autoconf.sh
        # Icarus 11.0 fails to configure under Ubuntu 22.04 without explicitly
        # telling it where to find the preprocessor.
        CXXCPP=/usr/bin/cpp bash ./configure
        make -j $(nproc)
        sudo make install
    - name: Set up Icarus (Windows - source - pt. 1)
      if: startsWith(matrix.os, 'windows') && matrix.sim == 'icarus'
      run: |
        git config --global core.autocrlf input
        git clone https://github.com/steveicarus/iverilog.git
        cd iverilog
        git reset --hard ${{matrix.sim-version}}
    - name: Set up Icarus (Windows - source - pt. 2)
      if: startsWith(matrix.os, 'windows') && matrix.sim == 'icarus'
      timeout-minutes: 10
      shell: msys2 {0}
      env:
        MINGW_ARCH: MINGW64
      run: |
        cd iverilog
        cd msys2
        makepkg-mingw --noconfirm --noprogressbar -sCLf
    - name: Set up Icarus (Windows - source - pt. 3)
      if: startsWith(matrix.os, 'windows') && matrix.sim == 'icarus'
      timeout-minutes: 10
      shell: msys2 {0}
      env:
        MINGW_ARCH: MINGW64
      run: |
        pacman -U --noconfirm iverilog/msys2/*.zst
        echo "$(dirname $(cygpath -m $(which iverilog)))" >> $GITHUB_PATH
    - name: Set up Icarus (MacOS - homebrew --HEAD)
      if: startsWith(matrix.os, 'macos') && matrix.sim == 'icarus' && matrix.sim-version == 'homebrew-HEAD'
      run: |
        brew install icarus-verilog --HEAD
    - name: Set up Icarus (MacOS - homebrew)
      if: startsWith(matrix.os, 'macos') && matrix.sim == 'icarus' && matrix.sim-version == 'homebrew-stable'
      run: |
        brew install icarus-verilog

      # Install GHDL
    - name: Set up GHDL (Ubuntu)
      if: startsWith(matrix.os, 'ubuntu') && matrix.sim == 'ghdl'
      run: |
        sudo apt-get install -y --no-install-recommends gnat
        git clone https://github.com/ghdl/ghdl.git
        cd ghdl
        git reset --hard ${{matrix.sim-version}}
        mkdir build
        cd build
        ../configure
        make -j $(nproc)
        sudo make install

      # Install NVC
    - name: Set up NVC (Ubuntu, release)
      if: startsWith(matrix.os, 'ubuntu') && matrix.sim == 'nvc' && startsWith(matrix.sim-version, 'r') && matrix.cc != 'clang'
      uses: nickg/setup-nvc@v1
      with:
        version: ${{matrix.sim-version}}
    - name: Set up NVC (Windows, release)
      if: startsWith(matrix.os, 'windows') && matrix.sim == 'nvc'
      uses: nickg/setup-nvc@v1
      with:
        version: ${{matrix.sim-version}}
    - name: Set up NVC (Ubuntu, source)
      if: startsWith(matrix.os, 'ubuntu') && matrix.sim == 'nvc' && (!startsWith(matrix.sim-version, 'r') || matrix.cc == 'clang')
      run: |
        sudo apt-get install -y --no-install-recommends llvm-dev libdw-dev flex
        git clone --depth=1 --no-single-branch https://github.com/nickg/nvc.git
        cd nvc
        git reset --hard ${{matrix.sim-version}}
        ./autogen.sh
        mkdir build
        cd build
        ../configure
        make -j $(nproc)
        sudo make install

      # Install Verilator (Linux)
    - name: Set up Verilator (Ubuntu - source)
      if: startsWith(matrix.os, 'ubuntu') && matrix.sim == 'verilator'
      run: |
        sudo apt-get install -y --no-install-recommends help2man make g++ perl python3 autoconf flex bison libfl2 libfl-dev zlib1g zlib1g-dev
        git clone https://github.com/verilator/verilator.git
        cd verilator
        git reset --hard ${{matrix.sim-version}}
        autoconf
        ./configure
        make -j $(nproc)
        sudo make install

      # Install Verilator (MacOS)
    - name: Set up Verilator (MacOS - source)
      if: startsWith(matrix.os, 'macos') && matrix.sim == 'verilator'
      run: |
        brew install autoconf help2man
        git clone https://github.com/verilator/verilator.git
        cd verilator
        git reset --hard ${{matrix.sim-version}}
        autoconf
        ./configure
        make -j $(sysctl -n hw.logicalcpu)
        sudo make install

      # Windows Testing
    - name: Test (Windows)
      if: startsWith(matrix.os, 'windows')
      id: windowstesting
      continue-on-error: ${{matrix.may-fail || false}}
      run: |
        nox -k "${{ inputs.test_task }} and ${{ matrix.sim }} and ${{ matrix.lang }}"
      env:
        COCOTB_ANSI_OUTPUT: 1
        COCOTB_CI_SKIP_MAKE: 1

      # Ubuntu / MacOS Testing
    - name: Install cocotb build dependencies (Ubuntu - g++)
      if: startsWith(matrix.os, 'ubuntu') && (!matrix.cxx || matrix.cxx == 'g++')
      run: |
        sudo apt-get install g++
    - name: Install cocotb build dependencies (Ubuntu - clang++)
      if: startsWith(matrix.os, 'ubuntu') && matrix.cxx == 'clang++'
      run: |
        sudo apt-get install clang llvm
    - name: Install cocotb build dependencies (MacOS)
      if: startsWith(matrix.os, 'macos')
      run: |
        g++ --version
    - name: Test (Ubuntu, MacOS)
      id: unixtesting
      if: startsWith(matrix.os, 'ubuntu') || startsWith(matrix.os, 'macos')
      continue-on-error: ${{matrix.may-fail || false}}
      timeout-minutes: 40
      run: |
        if [ "${{matrix.self-hosted}}" == "true" ]; then
          module load "${{ matrix.sim-version }}"
        fi
        nox -k "${{ inputs.test_task }} and ${{ matrix.sim }} and ${{ matrix.lang }}"
      env:
        COCOTB_ANSI_OUTPUT: 1

    # codecov
    - name: Combine and report coverage
      if: inputs.collect_coverage && matrix.cxx != 'clang++'
      run: nox -s dev_coverage_report
    - name: Combine and report coverage (clang)
      if: inputs.collect_coverage && matrix.cxx == 'clang++'
      run: nox -s dev_coverage_report -- 'llvm-cov gcov'

    - name: Upload to codecov
      if: inputs.collect_coverage
      uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2  # v6.0.0
      env:
        # https://community.codecov.com/t/upload-issues-unable-to-locate-build-via-github-actions-api/3954
        CODECOV_TOKEN: 669f2048-851e-479e-a618-8fa64f3736cc
      with:
        files: .python_coverage.xml,.cpp_coverage.xml
        name: ${{ matrix.name }}
        env_vars: SIM,TOPLEVEL_LANG,CXX,OS,PYTHON_VERSION
        verbose: true


================================================
FILE: .github/workflows/stale.yml
================================================
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause

name: "Stale Questions"
on:
  schedule:
  - cron: "00 02 * * *"

jobs:
  stale:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f  # v10.2.0
      with:
        repo-token: ${{secrets.GITHUB_TOKEN}}
        days-before-stale: 30
        days-before-close: 7
        stale-issue-message: >
          Has your question been resolved? If so please close this issue.
          If it has not been resolved, you may need to provide more information.
          If no more activity on this issue occurs in 7 days, it will be closed.
        stale-issue-label: "status:stale"
        stale-pr-message: >
          Are you still actively working on this pull request?
          You may have requested changes that need to be addressed.
          If the maintainers aren't being timely with a review, we apologize.
          Please bump this pull request to keep it alive.
          If no more activity on this pull request occurs in 7 days, it will be closed.
        stale-pr-label: "status:stale"
        any-of-labels: "type:question,status:close?,status:needs-info"
        operations-per-run: 30


================================================
FILE: .gitignore
================================================
*.py[cod]

# C extensions
*.so
*.dll

# C objects
*.o

# Python and C++ code coverage
.coverage
.coverage.cocotb
*.gcno
*.gcda
*.gcov
*.xml

# Packaging
*.egg
*.egg-info
dist
build
eggs
parts
sdist
obj
develop-eggs
.installed.cfg
__pycache__
.tox
.nox
.eggs

# Vim tmp files
*.swp
*~

# VSCode project files
.vscode/
*.code-workspace

# Emacs tmp files
\#*\#
\.\#*

# Mergetool tmp files
*.orig
*.bak

# Waveforms
*.vcd
*.fst
*.fst.hier

# Results
results.xml
combined_results.xml

# Debuggers
.gdb_history

# VCS files
*.tab
sim_build
ucli.key

# Pytest
.pytest_cache

# Cadence Incisive/Xcelium
*.elog
irun.log
xrun.log
irun.key
xrun.key
irun.history
xrun.history
INCA_libs
xcelium.d
ncelab_*.err
xmelab_*.err
ncsim_*.err
xmsim_*.err
bpad_*.err
.bpad/
.simvision/
waves.shm/

# Interface libraries built on setup
src/cocotb/libs
pip-wheel-metadata/

# Mentor Modelsim/Questa
tests/test_cases/*/modelsim.ini
tests/test_cases/*/transcript
tests/test_cases/*/qwave.db
tests/test_cases/*/design.bin
examples/*/tests/modelsim.ini
examples/*/tests/transcript
examples/*/tests/qwave.db
examples/*/tests/design.bin
*.wlf
qrun.log
visualizer.log

# Riviera
tests/test_cases/*/library.cfg
tests/test_cases/*/dataset.asdb
tests/test_cases/*/compile
examples/*/tests/library.cfg
examples/*/tests/dataset.asdb
examples/*/tests/compile

# Tachyon DA CVC
tests/test_cases/*/verilog.log
examples/*/tests/verilog.log

# DSim
dsim*
metrics.db

# Build artifacts
/dist/

# clangd
compile_commands.json
compile_commands.*.json
.cache/


================================================
FILE: .pre-commit-config.yaml
================================================
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause

exclude: "^.*/_vendor/"
repos:
# ruff with --fix should run before other formatting tools
- repo: https://github.com/astral-sh/ruff-pre-commit
  rev: "v0.15.10"
  hooks:
    # Run the linter.
    - id: "ruff"
      args:
      - "--fix"
      - "--exit-non-zero-on-fix"
    # Run the formatter.
    - id: ruff-format

- repo: "https://github.com/pre-commit/mirrors-clang-format"
  rev: "v22.1.3"
  hooks:
  - id: "clang-format"
    exclude: "^src/cocotb/share/include/(sv_vpi|vhpi|vpi)_user(_ext)?.h"
    types_or: [c, c++]

- repo: "https://github.com/pre-commit/pre-commit-hooks"
  rev: "v6.0.0"
  hooks:
  - id: "trailing-whitespace"
  - id: "mixed-line-ending"
    args:
    - "--fix=lf"
  - id: "end-of-file-fixer"
    exclude: "^docs/source/diagrams/(svg|xml)/"

- repo: https://github.com/henryiii/validate-pyproject-schema-store
  rev: "2026.04.11"
  hooks:
    - id: validate-pyproject
      files: pyproject.toml

- repo: local
  hooks:
  - id: "git-diff"
    name: git diff
    entry: git diff --exit-code
    language: system
    pass_filenames: false
    always_run: true

- repo: https://github.com/codespell-project/codespell
  rev: v2.4.2
  hooks:
  - id: codespell
    additional_dependencies:
      - tomli

- repo: https://github.com/pre-commit/mirrors-mypy
  rev: v1.19.1
  hooks:
  - id: mypy
    args: [--follow-imports=silent]
    additional_dependencies:
    - pytest
    - pluggy
    - coverage
    - nox
    - nox-uv
    files: ^(src/cocotb/|src/pygpi/|noxfile\.py|src/cocotb_tools/pytest/)

- repo: https://github.com/astral-sh/uv-pre-commit
  rev: 0.11.6
  hooks:
    - id: uv-lock

ci:
  autofix_prs: false


================================================
FILE: .readthedocs.yml
================================================
# .readthedocs.yml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details

version: 2

build:
  os: ubuntu-22.04
  tools:
    python: "3.12"
  apt_packages:
    - graphviz
  jobs:
    create_environment:
      - asdf plugin add uv
      - asdf install uv latest
      - asdf global uv latest
      - UV_PROJECT_ENVIRONMENT=$READTHEDOCS_VIRTUALENV_PATH uv sync --all-extras --group docs
    install:
      - "true"

sphinx:
  configuration: docs/source/conf.py


================================================
FILE: CONTRIBUTING.md
================================================
# cocotb Contribution Guidelines

cocotb welcomes contributions from anyone!
Please have a look at the [Development & Community](https://docs.cocotb.org/en/development/contributing.html) section of the cocotb documentation for an in-depth contribution guide.


================================================
FILE: LICENSE
================================================
Copyright cocotb contributors
Copyright (c) 2013 Potential Ventures Ltd
Copyright (c) 2013 SolarFlare Communications Inc
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its
   contributors may be used to endorse or promote products derived from
   this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL POTENTIAL VENTURES LTD BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


================================================
FILE: MANIFEST.in
================================================
recursive-include src/cocotb/share *
recursive-include src/cocotb/_vendor *
include README.md
include LICENSE
include cocotb_build_libs.py


================================================
FILE: Makefile
================================================
# Copyright cocotb contributors
# Copyright (c) 2013 Potential Ventures Ltd
# Copyright (c) 2013 SolarFlare Communications Inc
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause

REPO_ROOT := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))

.PHONY: all
all: test

.PHONY: clean
clean:
	-@find . -name "obj" -exec rm -rf {} +
	-@find . -name "*.pyc" -delete
	-@find . -name "*results.xml" -delete
	$(MAKE) -C examples clean
	$(MAKE) -C tests clean

.PHONY: do_tests
do_tests::
	$(MAKE) -C tests
do_tests::
	$(MAKE) -C examples

# For Jenkins we use the exit code to detect compile errors or catastrophic
# failures and the XML to track test results
.PHONY: jenkins
jenkins: do_tests
	python -m cocotb_tools.combine_results --repo-root $(REPO_ROOT) --suppress_rc --testsuites_name=cocotb_regression

# By default want the exit code to indicate the test results
.PHONY: test
test:
	$(MAKE) do_tests; ret=$$?; python -m cocotb_tools.combine_results --repo-root $(REPO_ROOT) && exit $$ret

COCOTB_MAKEFILES_DIR = $(realpath $(shell cocotb-config --makefiles))
AVAILABLE_SIMULATORS = $(patsubst .%,%,$(suffix $(wildcard $(COCOTB_MAKEFILES_DIR)/simulators/Makefile.*)))

.PHONY: help
help:
	@echo ""
	@echo "This cocotb makefile has the following targets"
	@echo ""
	@echo "all, test - run regression producing combined_results.xml"
	@echo "            (return error code produced by sub-makes)"
	@echo "jenkins   - run regression producing combined_results.xml"
	@echo "            (return error code 1 if any failure was found)"
	@echo "clean     - remove build directory and all simulation artefacts"
	@echo ""
	@echo "The default simulator is Icarus Verilog."
	@echo "To use another, set the environment variable SIM as below."
	@echo "Available simulators:"
	@for X in $(sort $(AVAILABLE_SIMULATORS)); do \
		echo export SIM=$$X; \
	done
	@echo ""


================================================
FILE: README.md
================================================
**cocotb** is a framework empowering users to write VHDL and Verilog testbenches in Python.

[![Documentation Status](https://readthedocs.org/projects/cocotb/badge/?version=development)](https://docs.cocotb.org/en/stable/)
[![CI](https://github.com/cocotb/cocotb/actions/workflows/build-test-dev.yml/badge.svg?branch=master)](https://github.com/cocotb/cocotb/actions/workflows/build-test-dev.yml)
[![PyPI](https://img.shields.io/pypi/dm/cocotb.svg?label=PyPI%20downloads)](https://pypi.org/project/cocotb/)
[![codecov](https://codecov.io/gh/cocotb/cocotb/branch/master/graph/badge.svg)](https://codecov.io/gh/cocotb/cocotb)

* Check out the [tutorial](https://docs.cocotb.org/en/stable/quickstart.html)
* Read the [docs](https://docs.cocotb.org/en/stable/)
* Find more info in the [wiki](https://github.com/cocotb/cocotb/wiki)
* Discover [useful extensions](https://github.com/cocotb/cocotb/wiki/Further-Resources#utility-libraries-and-frameworks)
* Join the discussion in the [Gitter chat room](https://gitter.im/cocotb/Lobby)
* [Ask a question](https://github.com/cocotb/cocotb/discussions)
* [Raise a bug / request an enhancement](https://github.com/cocotb/cocotb/issues/new)


================================================
FILE: cocotb_build_libs.py
================================================
# Copyright cocotb contributors
# Licensed under the Revised BSD License, see LICENSE for details.
# SPDX-License-Identifier: BSD-3-Clause
from __future__ import annotations

import distutils
import logging
import os
import subprocess
import sys
import sysconfig
import textwrap
from distutils.ccompiler import get_default_compiler
from distutils.file_util import copy_file

from setuptools import Extension
from setuptools.command.build_ext import build_ext as _build_ext

logger = logging.getLogger(__name__)
cocotb_share_dir = os.path.abspath(
    os.path.join(os.path.dirname(__file__), "src", "cocotb", "share")
)
_base_warns = [
    "-Wall",
    "-Wextra",
    "-Wcast-qual",
    "-Wwrite-strings",
    "-Wconversion",
    # -Wno-missing-field-initializers is required on GCC 4.x to prevent a
    # spurious warning `error: missing initializer for member ...` when
    # compiling `PyTypeObject type = {};` in `simulatormodule.cpp`.
    # (See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=36750.) This flag can be
    # removed once we require later GCC versions.
    "-Wno-missing-field-initializers",
    "-Werror=shadow",
]
_ccx_warns = [*_base_warns, "-Wnon-virtual-dtor", "-Woverloaded-virtual"]
_extra_cxx_compile_args = [
    "-std=c++11",
    "-fvisibility=hidden",
    "-fvisibility-inlines-hidden",
    *_ccx_warns,
]
if os.name != "nt":
    _extra_cxx_compile_args += ["-flto"]

_extra_cxx_compile_args_msvc = ["/permissive-"]

# Make PRI* format macros available with C++11 compiler but older libc, e.g. on RHEL6.
_extra_defines = [("__STDC_FORMAT_MACROS", "")]


def create_sxs_assembly_manifest(
    name: str, filename: str, libraries: list[str], dependency_only=False
) -> str:
    """
    Create side-by-side (sxs) assembly manifest

    It contains dependencies to other assemblies (in our case the assemblies are equal to the other libraries).
    For more details see:
     - https://docs.microsoft.com/en-us/windows/win32/sbscs/assembly-manifests
     - https://docs.microsoft.com/en-us/windows/win32/sbscs/using-side-by-side-assemblies

    Args:
        name: The name of the assembly for which the manifest is generated, e.g. ``libgpi``.
        filename: The filename of the library, e.g. ``libgpi.dll``.
        libraries: A list of names of dependent manifests, e.g. ``["libgpi"]``.
    """

    architecture = "amd64" if sys.maxsize > 2**32 else "x86"
    dependencies = []

    for lib in libraries:
        dependencies.append(
            textwrap.dedent(
                """\
            <dependency>
                <dependentAssembly>
                    <assemblyIdentity name="%s" version="1.0.0.0" type="win32" processorArchitecture="%s" />
                </dependentAssembly>
            </dependency>
            """
            )
            % (lib, architecture)
        )

    if not dependency_only:
        manifest_body = textwrap.dedent(
            """\
            <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
            <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
                <assemblyIdentity name="%s" version="1.0.0.0" type="win32" processorArchitecture="%s" />
                <file name="%s" />
                %s
            </assembly>
            """
        ) % (
            name,
            architecture,
            filename,
            textwrap.indent("".join(dependencies), "    ").strip(),
        )
    else:
        manifest_body = textwrap.dedent(
            """\
            <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
            <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
                %s
            </assembly>
            """
        ) % (textwrap.indent("".join(dependencies), "    ").strip())

    return manifest_body


def create_sxs_appconfig(filename):
    """
    Create side-by-side (sxs) application configuration file.

    The application configuration specifies additional search paths for manifests.
    For more details see: https://docs.microsoft.com/en-us/windows/win32/sbscs/application-configuration-files
    """

    config_body = textwrap.dedent(
        """\
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <configuration>
            <windows>
                <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
                    <probing privatePath="libs" />
                </assemblyBinding>
            </windows>
        </configuration>
        """
    )

    dirpath = os.path.dirname(filename)
    os.makedirs(dirpath, exist_ok=True)

    with open(filename + ".2.config", "w", encoding="utf-8") as f:
        f.write(config_body)


def create_rc_file(rc_filename, name, filename, libraries, runtime_libraries):
    """
    Creates windows resource definition script to embed the side-by-side assembly manifest into the libraries.

    For more details see: https://docs.microsoft.com/en-us/windows/win32/menurc/about-resource-files
    """

    manifest = create_sxs_assembly_manifest(name, filename, libraries)

    # Escape double quotes and put every line between double quotes for embedding into rc file
    manifest = manifest.replace('"', '""')
    manifest = "\n".join([f'"{x}\\r\\n"' for x in manifest.splitlines()])

    rc_body = (
        textwrap.dedent(
            """\
        #pragma code_page(65001) // UTF-8
        #include <Windows.h>

        LANGUAGE 0x00, 0x00

        ISOLATIONAWARE_MANIFEST_RESOURCE_ID RT_MANIFEST
        BEGIN
        %s
        END
        """
        )
        % manifest
    )

    if runtime_libraries is not None:
        manifest = create_sxs_assembly_manifest(
            name, filename, runtime_libraries, dependency_only=True
        )

        # Escape double quotes and put every line between double quotes for embedding into rc file
        manifest = manifest.replace('"', '""')
        manifest = "\n".join([f'"{x}\\r\\n"' for x in manifest.splitlines()])

        rc_body += (
            textwrap.dedent(
                """\
            1000 RT_MANIFEST
            BEGIN
            %s
            END
            """
            )
            % manifest
        )

    with open(rc_filename, "w", encoding="utf-8") as f:
        f.write(rc_body)


def _get_lib_ext_name():
    """Get name of default library file extension on given OS."""

    if os.name == "nt":
        ext_name = "dll"
    else:
        ext_name = "so"

    return ext_name


class build_ext(_build_ext):
    def _uses_msvc(self):
        if self.compiler == "msvc":
            return True
        if self.compiler is None:
            return get_default_compiler() == "msvc"
        else:
            return getattr(self.compiler, "compiler_type", None) == "msvc"

    def run(self):
        if os.name == "nt":
            create_sxs_appconfig(
                self.get_ext_fullpath(os.path.join("cocotb", "simulator"))
            )

        super().run()

    def build_extensions(self):
        if os.name == "nt":
            if self._uses_msvc():
                # Initialize the compiler now so that compiler/linker flags are populated
                if not self.compiler.initialized:
                    self.compiler.initialize()

                # Setuptools defaults to activate automatic manifest generation for msvc,
                # disable it here as we manually generate it to also support mingw on windows
                for k, ldflags in self.compiler._ldflags.items():
                    self.compiler._ldflags[k] = [
                        x for x in ldflags if not x.startswith("/MANIFEST")
                    ] + ["/MANIFEST:NO"]

                self.compiler.compile_options = [
                    x for x in self.compiler.compile_options if not x.startswith("/W")
                ] + ["/W4"]

            ext_names = {os.path.split(ext.name)[-1] for ext in self.extensions}
            for ext in self.extensions:
                fullname = self.get_ext_fullname(ext.name)
                filename = self.get_ext_filename(fullname)
                name = os.path.split(fullname)[-1]
                filename = os.path.split(filename)[-1]
                libraries = {"lib" + lib for lib in ext.libraries}.intersection(
                    ext_names
                )
                rc_filename = name + ".rc"
                runtime_libraries = None

                # Strip lib prefix for msvc
                if self._uses_msvc():
                    name = name[3:] if name.startswith("lib") else name
                    libraries = {
                        (lib[3:] if lib.startswith("lib") else lib) for lib in libraries
                    }
                    if runtime_libraries is not None:
                        runtime_libraries = {
                            (lib[3:] if lib.startswith("lib") else lib)
                            for lib in runtime_libraries
                        }
                create_rc_file(
                    rc_filename, name, filename, libraries, runtime_libraries
                )

            def_dir = os.path.join(cocotb_share_dir, "def")
            self._gen_import_libs(def_dir)

            for e in self.extensions:
                e.library_dirs += [def_dir]

        super().build_extensions()

    def build_extension(self, ext):
        """Build each extension in its own temp directory to make gcov happy.

        A normal PEP 517 install still works as the temp directories are discarded anyway.
        """
        lib_name = os.path.split(ext.name)[-1]

        if self._uses_msvc():
            ext.extra_compile_args += _extra_cxx_compile_args_msvc
        else:
            ext.extra_compile_args += _extra_cxx_compile_args

            if os.name == "nt":
                # Align behavior of gcc with msvc and export only symbols marked with __declspec(dllexport)
                ext.extra_link_args += ["-Wl,--exclude-all-symbols"]
            else:
                ext.extra_link_args += ["-flto"]

                rpaths = []
                if lib_name == "simulator":
                    rpaths += ["$ORIGIN/libs"]
                    install_name = None
                else:
                    rpaths += ["$ORIGIN"]
                    install_name = lib_name

                if sys.platform == "darwin":
                    rpaths = [
                        rpath.replace("$ORIGIN", "@loader_path") for rpath in rpaths
                    ]
                    if install_name is not None:
                        ext.extra_link_args += [
                            f"-Wl,-install_name,@rpath/{install_name}.so"
                        ]

                if sys.platform == "linux":
                    # Avoid a runtime dependency on libstdc++. Some simulators
                    # ship a version of libstdc++6.so which is older than the
                    # one cocotb has been compiled with, which will then lead to
                    # load-time errors like "libstdc++.so.6: version
                    # `GLIBCXX_3.4.29' not found (required by
                    # /path/to/libcocotbvhpi_modelsim.so)."
                    ext.extra_link_args += ["-static-libstdc++"]

                ext.extra_link_args += [f"-Wl,-rpath,{rpath}" for rpath in rpaths]

        # vpi_user.h and vhpi_user.h require that WIN32 is defined
        if os.name == "nt":
            ext.define_macros += [("WIN32", "")]

        old_build_temp = self.build_temp
        self.build_temp = os.path.join(self.build_temp, ext.name)
        super().build_extension(ext)
        self.build_temp = old_build_temp

    # Needed for Windows to not assume python module (generate interface in def file)
    def get_export_symbols(self, ext):
        return None

    # For proper cocotb library naming, based on https://github.com/cython/cython/issues/1740
    def get_ext_filename(self, ext_name):
        """
        Like the base class method, but for libraries that are not python extension:
         - removes the ``.cpython-36m-x86_64-linux-gnu.`` or ``-cpython-36m.`` part before the extension
         - replaces ``.pyd`` with ``.dll`` on windows.
        """

        filename = _build_ext.get_ext_filename(self, ext_name)

        # for the simulator python extension library, leaving suffix in place
        if os.path.split(ext_name)[-1] == "simulator":
            return filename

        head, tail = os.path.split(filename)
        tail_split = tail.split(".")

        # mingw on msys2 uses `-` as separator
        tail_split = tail_split[0].split("-")

        # strip lib prefix if msvc is used
        if self._uses_msvc() and tail_split[0].startswith("lib"):
            tail_split[0] = tail_split[0][3:]

        filename_short = os.path.join(head, tail_split[0] + "." + _get_lib_ext_name())

        return filename_short

    def finalize_options(self):
        """Like the base class method,but add extra library_dirs path."""

        super().finalize_options()

        for ext in self.extensions:
            ext.library_dirs.append(os.path.join(self.build_lib, "cocotb", "libs"))

    def copy_extensions_to_source(self):
        """Like the base class method, but copy libs into proper directory in develop."""

        build_py = self.get_finalized_command("build_py")
        for ext in self.extensions:
            fullname = self.get_ext_fullname(ext.name)
            filename = self.get_ext_filename(fullname)
            modpath = fullname.split(".")
            package = ".".join(modpath[:-1])
            package_dir = build_py.get_package_dir(package)
            # unlike the method from `setuptools`, we do not call `os.path.basename` here
            dest_filename = os.path.join(package_dir, filename)
            src_filename = os.path.join(self.build_lib, filename)

            os.makedirs(os.path.dirname(dest_filename), exist_ok=True)

            copy_file(src_filename, dest_filename, verbose=self.verbose)
            if ext._needs_stub:
                self.write_stub(package_dir or os.curdir, ext, True)

    def _gen_import_libs(self, def_dir):
        """
        On Windows generate import libraries that contains the code required to
        load the DLL (.a) based on module definition files (.def)
        """

        for sim in ["icarus", "modelsim", "aldec", "ghdl", "nvcvhpi"]:
            if self._uses_msvc():
                subprocess.run(
                    [
                        self.compiler.lib,
                        "/def:" + os.path.join(def_dir, sim + ".def"),
                        "/out:" + os.path.join(def_dir, sim + ".lib"),
                        "/machine:" + ("X64" if sys.maxsize > 2**32 else "X86"),
                    ],
                    check=True,
                )
            else:
                subprocess.run(
                    [
                        "dlltool",
                        "-d",
                        os.path.join(def_dir, sim + ".def"),
                        "-l",
                        os.path.join(def_dir, "lib" + sim + ".a"),
                    ],
                    check=True,
                )


def _get_python_lib_link():
    """Get name of python library used for linking"""

    if sys.platform == "darwin":
        ld_library = sysconfig.get_config_var("LIBRARY")
    else:
        ld_library = sysconfig.get_config_var("LDLIBRARY")

    if ld_library is not None:
        python_lib_link = os.path.splitext(ld_library)[0][3:]
    else:
        python_version = sysconfig.get_python_version().replace(".", "")
        python_lib_link = "python" + python_version

    return python_lib_link


def _get_python_lib():
    """Get the library for embedded the python interpreter"""

    if os.name == "nt":
        python_lib = _get_python_lib_link() + "." + _get_lib_ext_name()
    elif sys.platform == "darwin":
        python_lib = os.path.join(
            sysconfig.get_config_var("LIBDIR"), "lib" + _get_python_lib_link() + "."
        )
        if os.path.exists(python_lib + "dylib"):
            python_lib += "dylib"
        else:
            python_lib += "so"
    else:
        python_lib = "lib" + _get_python_lib_link() + "." + _get_lib_ext_name()

    return python_lib


def _get_common_lib_ext(include_dirs, share_lib_dir):
    """
    Defines common libraries.

    All libraries go into the same directory to enable loading without modifying the library path (e.g. LD_LIBRARY_PATH).
    """

    #
    #  libgpi
    #
    libgpi_sources = [
        os.path.join(share_lib_dir, "gpi", "GpiCbHdl.cpp"),
        os.path.join(share_lib_dir, "gpi", "GpiCommon.cpp"),
        os.path.join(share_lib_dir, "gpi", "dynload.cpp"),
        os.path.join(share_lib_dir, "gpi", "logging.cpp"),
    ]
    libgpi_libraries = []
    if sys.platform.startswith(("linux", "darwin", "cygwin", "msys")):
        libgpi_libraries.append("dl")  # dlopen, dlerror, dlsym
    if os.name == "nt":
        libgpi_sources += ["libgpi.rc"]
    libgpi = Extension(
        os.path.join("cocotb", "libs", "libgpi"),
        define_macros=[
            ("GPI_EXPORTS", ""),
            *_extra_defines,
        ],
        include_dirs=include_dirs,
        libraries=libgpi_libraries,
        sources=libgpi_sources,
    )

    #
    #  PyGPI
    #
    pygpi_sources = [
        os.path.join(share_lib_dir, "pygpi", "bind.cpp"),
        os.path.join(share_lib_dir, "pygpi", "embed.cpp"),
        os.path.join(share_lib_dir, "pygpi", "logging.cpp"),
    ]
    if os.name == "nt":
        pygpi_sources += ["simulator.rc"]
    python_lib_dirs = []
    if sys.platform == "darwin":
        python_lib_dirs = [sysconfig.get_config_var("LIBDIR")]
    libpygpi = Extension(
        os.path.join("cocotb", "simulator"),
        define_macros=[
            ("PYGPI_EXPORTS", ""),
            *_extra_defines,
        ],
        include_dirs=include_dirs,
        libraries=["gpi"],
        library_dirs=python_lib_dirs,
        sources=pygpi_sources,
    )

    # The libraries in this list are compiled in order of their appearance.
    # If there is a linking dependency on one library to another,
    # the linked library must be built first.
    return [libgpi, libpygpi]


def _get_vpi_lib_ext(
    include_dirs, share_lib_dir, sim_define, extra_lib=[], extra_lib_dir=[]
):
    lib_name = "libcocotbvpi_" + sim_define.lower()
    libcocotbvpi_sources = [
        os.path.join(share_lib_dir, "gpi", "vpi", "VpiImpl.cpp"),
        os.path.join(share_lib_dir, "gpi", "vpi", "VpiCbHdl.cpp"),
        os.path.join(share_lib_dir, "gpi", "vpi", "VpiObj.cpp"),
        os.path.join(share_lib_dir, "gpi", "vpi", "VpiIterator.cpp"),
        os.path.join(share_lib_dir, "gpi", "vpi", "VpiSignal.cpp"),
    ]
    if os.name == "nt":
        libcocotbvpi_sources += [lib_name + ".rc"]
    libcocotbvpi = Extension(
        os.path.join("cocotb", "libs", lib_name),
        define_macros=[("COCOTBVPI_EXPORTS", ""), (sim_define, ""), *_extra_defines],
        include_dirs=include_dirs,
        libraries=["gpi", *extra_lib],
        library_dirs=extra_lib_dir,
        sources=libcocotbvpi_sources,
    )

    return libcocotbvpi


def _get_vhpi_lib_ext(
    include_dirs, share_lib_dir, sim_define, extra_lib=[], extra_lib_dir=[]
):
    lib_name = "libcocotbvhpi_" + sim_define.lower()
    libcocotbvhpi_sources = [
        os.path.join(share_lib_dir, "gpi", "vhpi", "VhpiImpl.cpp"),
        os.path.join(share_lib_dir, "gpi", "vhpi", "VhpiCbHdl.cpp"),
        os.path.join(share_lib_dir, "gpi", "vhpi", "VhpiObj.cpp"),
        os.path.join(share_lib_dir, "gpi", "vhpi", "VhpiIterator.cpp"),
        os.path.join(share_lib_dir, "gpi", "vhpi", "VhpiSignal.cpp"),
    ]
    if os.name == "nt":
        libcocotbvhpi_sources += [lib_name + ".rc"]
    libcocotbvhpi = Extension(
        os.path.join("cocotb", "libs", lib_name),
        include_dirs=include_dirs,
        define_macros=[("COCOTBVHPI_EXPORTS", ""), (sim_define, ""), *_extra_defines],
        libraries=["gpi", *extra_lib],
        library_dirs=extra_lib_dir,
        sources=libcocotbvhpi_sources,
    )

    return libcocotbvhpi


def get_ext():
    cfg_vars = distutils.sysconfig.get_config_vars()

    if sys.platform == "darwin":
        cfg_vars["LDSHARED"] = cfg_vars["LDSHARED"].replace("-bundle", "-dynamiclib")
        cfg_vars["LDCXXSHARED"] = cfg_vars["LDSHARED"].replace("-bundle", "-dynamiclib")

    share_lib_dir = os.path.relpath(os.path.join(cocotb_share_dir, "lib"))
    include_dirs = [
        os.path.relpath(os.path.join(cocotb_share_dir, "include")),
        os.path.relpath(os.path.join(os.path.dirname(__file__), "src", "cocotb")),
    ]

    ext = []

    logger.info("Compiling interface libraries for cocotb ...")

    ext += _get_common_lib_ext(include_dirs, share_lib_dir)

    #
    #  Icarus Verilog
    #
    icarus_extra_lib = []
    logger.info("Compiling libraries for Icarus Verilog")
    if os.name == "nt":
        icarus_extra_lib = ["icarus"]

    icarus_vpi_ext = _get_vpi_lib_ext(
        include_dirs=include_dirs,
        share_lib_dir=share_lib_dir,
        sim_define="ICARUS",
        extra_lib=icarus_extra_lib,
    )
    ext.append(icarus_vpi_ext)

    #
    #  Modelsim/Questa
    #
    modelsim_extra_lib = []
    logger.info("Compiling libraries for Modelsim/Questa")
    if os.name == "nt":
        modelsim_extra_lib = ["modelsim"]

    modelsim_vpi_ext = _get_vpi_lib_ext(
        include_dirs=include_dirs,
        share_lib_dir=share_lib_dir,
        sim_define="MODELSIM",
        extra_lib=modelsim_extra_lib,
    )
    ext.append(modelsim_vpi_ext)

    modelsim_vhpi_ext = _get_vhpi_lib_ext(
        include_dirs=include_dirs,
        share_lib_dir=share_lib_dir,
        sim_define="MODELSIM",
        extra_lib=modelsim_extra_lib,
    )
    ext.append(modelsim_vhpi_ext)

    lib_name = "libcocotbfli_modelsim"
    fli_sources = [
        os.path.join(share_lib_dir, "gpi", "fli", "FliImpl.cpp"),
        os.path.join(share_lib_dir, "gpi", "fli", "FliCbHdl.cpp"),
        os.path.join(share_lib_dir, "gpi", "fli", "FliObjHdl.cpp"),
    ]
    if os.name == "nt":
        fli_sources += [lib_name + ".rc"]
    fli_ext = Extension(
        os.path.join("cocotb", "libs", lib_name),
        define_macros=[("COCOTBFLI_EXPORTS", ""), *_extra_defines],
        include_dirs=include_dirs,
        libraries=["gpi", *modelsim_extra_lib],
        sources=fli_sources,
    )

    ext.append(fli_ext)

    #
    # GHDL
    #
    ghdl_extra_lib = []
    logger.info("Compiling libraries for GHDL")
    if os.name == "nt":
        ghdl_extra_lib = ["ghdl"]

    ghdl_vpi_ext = _get_vpi_lib_ext(
        include_dirs=include_dirs,
        share_lib_dir=share_lib_dir,
        sim_define="GHDL",
        extra_lib=ghdl_extra_lib,
    )
    ext.append(ghdl_vpi_ext)

    #
    # IUS
    #
    if os.name == "posix":
        logger.info("Compiling libraries for Incisive/Xcelium")
        ius_vpi_ext = _get_vpi_lib_ext(
            include_dirs=include_dirs, share_lib_dir=share_lib_dir, sim_define="IUS"
        )
        ext.append(ius_vpi_ext)

        ius_vhpi_ext = _get_vhpi_lib_ext(
            include_dirs=include_dirs, share_lib_dir=share_lib_dir, sim_define="IUS"
        )
        ext.append(ius_vhpi_ext)

    #
    # VCS
    #
    if os.name == "posix":
        logger.info("Compiling libraries for VCS")
        vcs_vpi_ext = _get_vpi_lib_ext(
            include_dirs=include_dirs, share_lib_dir=share_lib_dir, sim_define="VCS"
        )
        ext.append(vcs_vpi_ext)

    #
    # Aldec Riviera Pro
    #
    aldec_extra_lib = []
    logger.info("Compiling libraries for Riviera")
    if os.name == "nt":
        aldec_extra_lib = ["aldec"]

    aldec_vpi_ext = _get_vpi_lib_ext(
        include_dirs=include_dirs,
        share_lib_dir=share_lib_dir,
        sim_define="ALDEC",
        extra_lib=aldec_extra_lib,
    )
    ext.append(aldec_vpi_ext)

    aldec_vhpi_ext = _get_vhpi_lib_ext(
        include_dirs=include_dirs,
        share_lib_dir=share_lib_dir,
        sim_define="ALDEC",
        extra_lib=aldec_extra_lib,
    )
    ext.append(aldec_vhpi_ext)

    #
    # Verilator
    #
    if os.name == "posix":
        logger.info("Compiling libraries for Verilator")
        verilator_vpi_ext = _get_vpi_lib_ext(
            include_dirs=include_dirs,
            share_lib_dir=share_lib_dir,
            sim_define="VERILATOR",
        )
        ext.append(verilator_vpi_ext)

    #
    # NVC
    #
    nvc_extra_lib = []
    if os.name == "nt":
        nvc_extra_lib = ["nvcvhpi"]
    logger.info("Compiling libraries for NVC")
    nvc_vhpi_ext = _get_vhpi_lib_ext(
        include_dirs=include_dirs,
        share_lib_dir=share_lib_dir,
        sim_define="NVC",
        extra_lib=nvc_extra_lib,
    )
    ext.append(nvc_vhpi_ext)

    #
    # DSim
    #
    if os.name == "posix":
        logger.info("Compiling libraries for DSim")
        dsim_vpi_ext = _get_vpi_lib_ext(
            include_dirs=include_dirs, share_lib_dir=share_lib_dir, sim_define="DSim"
        )
        ext.append(dsim_vpi_ext)

    return ext


================================================
FILE: docs/.gitignore
================================================
.venv
source/master-notes.rst
source/doxygen


================================================
FILE: docs/Doxyfile
================================================
# Doxyfile 1.9.8

# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
#
# All text after a double hash (##) is considered a comment and is placed in
# front of the TAG it is preceding.
#
# All text after a single hash (#) is considered a comment and will be ignored.
# The format is:
# TAG = value [value, ...]
# For lists, items can also be appended using:
# TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (\" \").
#
# Note:
#
# Use doxygen to compare the used configuration file with the template
# configuration file:
# doxygen -x [configFile]
# Use doxygen to compare the used configuration file with the template
# configuration file without replacing the environment variables or CMake type
# replacement variables:
# doxygen -x_noenv [configFile]

#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------

# This tag specifies the encoding used for all characters in the configuration
# file that follow. The default is UTF-8 which is also the encoding used for all
# text before the first occurrence of this tag. Doxygen uses libiconv (or the
# iconv built into libc) for the transcoding. See
# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
# The default value is: UTF-8.

DOXYFILE_ENCODING      = UTF-8

# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
# double-quotes, unless you are using Doxywizard) that should identify the
# project for which the documentation is generated. This name is used in the
# title of most generated pages and in a few other places.
# The default value is: My Project.

PROJECT_NAME           = cocotb

# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
# could be handy for archiving the generated documentation or if some version
# control system is used.

PROJECT_NUMBER         =

# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
# quick idea about the purpose of the project. Keep the description short.

PROJECT_BRIEF          =

# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
# in the documentation. The maximum height of the logo should not exceed 55
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
# the logo to the output directory.

PROJECT_LOGO           =

# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
# into which the generated documentation will be written. If a relative path is
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.

OUTPUT_DIRECTORY       = source/doxygen

# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
# sub-directories (in 2 levels) under the output directory of each output format
# and will distribute the generated files over these directories. Enabling this
# option can be useful when feeding doxygen a huge amount of source files, where
# putting all generated files in the same directory would otherwise causes
# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to
# control the number of sub-directories.
# The default value is: NO.

CREATE_SUBDIRS         = NO

# Controls the number of sub-directories that will be created when
# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every
# level increment doubles the number of directories, resulting in 4096
# directories at level 8 which is the default and also the maximum value. The
# sub-directories are organized in 2 levels, the first level always has a fixed
# number of 16 directories.
# Minimum value: 0, maximum value: 8, default value: 8.
# This tag requires that the tag CREATE_SUBDIRS is set to YES.

CREATE_SUBDIRS_LEVEL   = 8

# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
# characters to appear in the names of generated files. If set to NO, non-ASCII
# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
# U+3044.
# The default value is: NO.

ALLOW_UNICODE_NAMES    = NO

# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian,
# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English
# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek,
# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with
# English messages), Korean, Korean-en (Korean with English messages), Latvian,
# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese,
# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish,
# Swedish, Turkish, Ukrainian and Vietnamese.
# The default value is: English.

OUTPUT_LANGUAGE        = English

# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
# descriptions after the members that are listed in the file and class
# documentation (similar to Javadoc). Set to NO to disable this.
# The default value is: YES.

BRIEF_MEMBER_DESC      = YES

# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
# description of a member or function before the detailed description
#
# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
# The default value is: YES.

REPEAT_BRIEF           = YES

# This tag implements a quasi-intelligent brief description abbreviator that is
# used to form the text in various listings. Each string in this list, if found
# as the leading text of the brief description, will be stripped from the text
# and the result, after processing the whole list, is used as the annotated
# text. Otherwise, the brief description is used as-is. If left blank, the
# following values are used ($name is automatically replaced with the name of
# the entity):The $name class, The $name widget, The $name file, is, provides,
# specifies, contains, represents, a, an and the.

ABBREVIATE_BRIEF       =

# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# doxygen will generate a detailed section even if there is only a brief
# description.
# The default value is: NO.

ALWAYS_DETAILED_SEC    = NO

# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
# inherited members of a class in the documentation of that class as if those
# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
# The default value is: NO.

INLINE_INHERITED_MEMB  = NO

# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
# before files name in the file list and in the header files. If set to NO the
# shortest path that makes the file name unique will be used
# The default value is: YES.

FULL_PATH_NAMES        = NO

# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
# Stripping is only done if one of the specified strings matches the left-hand
# part of the path. The tag can be used to show relative paths in the file list.
# If left blank the directory from which doxygen is run is used as the path to
# strip.
#
# Note that you can specify absolute paths here, but also relative paths, which
# will be relative from the directory where doxygen is started.
# This tag requires that the tag FULL_PATH_NAMES is set to YES.

STRIP_FROM_PATH        =

# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
# path mentioned in the documentation of a class, which tells the reader which
# header file to include in order to use a class. If left blank only the name of
# the header file containing the class definition is used. Otherwise one should
# specify the list of include paths that are normally passed to the compiler
# using the -I flag.

STRIP_FROM_INC_PATH    =

# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
# less readable) file names. This can be useful is your file systems doesn't
# support long names like on DOS, Mac, or CD-ROM.
# The default value is: NO.

SHORT_NAMES            = NO

# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
# first line (until the first dot) of a Javadoc-style comment as the brief
# description. If set to NO, the Javadoc-style will behave just like regular Qt-
# style comments (thus requiring an explicit @brief command for a brief
# description.)
# The default value is: NO.

JAVADOC_AUTOBRIEF      = YES

# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
# such as
# /***************
# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
# Javadoc-style will behave just like regular comments and it will not be
# interpreted by doxygen.
# The default value is: NO.

JAVADOC_BANNER         = NO

# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
# line (until the first dot) of a Qt-style comment as the brief description. If
# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
# requiring an explicit \brief command for a brief description.)
# The default value is: NO.

QT_AUTOBRIEF           = NO

# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
# a brief description. This used to be the default behavior. The new default is
# to treat a multi-line C++ comment block as a detailed description. Set this
# tag to YES if you prefer the old behavior instead.
#
# Note that setting this tag to YES also means that rational rose comments are
# not recognized any more.
# The default value is: NO.

MULTILINE_CPP_IS_BRIEF = NO

# By default Python docstrings are displayed as preformatted text and doxygen's
# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
# doxygen's special commands can be used and the contents of the docstring
# documentation blocks is shown as doxygen documentation.
# The default value is: YES.

PYTHON_DOCSTRING       = YES

# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
# documentation from any documented member that it re-implements.
# The default value is: YES.

INHERIT_DOCS           = YES

# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
# page for each member. If set to NO, the documentation of a member will be part
# of the file/class/namespace that contains it.
# The default value is: NO.

SEPARATE_MEMBER_PAGES  = NO

# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
# uses this value to replace tabs by spaces in code fragments.
# Minimum value: 1, maximum value: 16, default value: 4.

TAB_SIZE               = 4

# This tag can be used to specify a number of aliases that act as commands in
# the documentation. An alias has the form:
# name=value
# For example adding
# "sideeffect=@par Side Effects:^^"
# will allow you to put the command \sideeffect (or @sideeffect) in the
# documentation, which will result in a user-defined paragraph with heading
# "Side Effects:". Note that you cannot put \n's in the value part of an alias
# to insert newlines (in the resulting output). You can put ^^ in the value part
# of an alias to insert a newline as if a physical newline was in the original
# file. When you need a literal { or } or , in the value part of an alias you
# have to escape them by means of a backslash (\), this can lead to conflicts
# with the commands \{ and \} for these it is advised to use the version @{ and
# @} or use a double escape (\\{ and \\})

ALIASES                =

# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C. For
# instance, some of the names that are used will be different. The list of all
# members will be omitted, etc.
# The default value is: NO.

OPTIMIZE_OUTPUT_FOR_C  = NO

# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
# Python sources only. Doxygen will then generate output that is more tailored
# for that language. For instance, namespaces will be presented as packages,
# qualified scopes will look different, etc.
# The default value is: NO.

OPTIMIZE_OUTPUT_JAVA   = NO

# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
# sources. Doxygen will then generate output that is tailored for Fortran.
# The default value is: NO.

OPTIMIZE_FOR_FORTRAN   = NO

# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
# sources. Doxygen will then generate output that is tailored for VHDL.
# The default value is: NO.

OPTIMIZE_OUTPUT_VHDL   = NO

# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
# sources only. Doxygen will then generate output that is more tailored for that
# language. For instance, namespaces will be presented as modules, types will be
# separated into more groups, etc.
# The default value is: NO.

OPTIMIZE_OUTPUT_SLICE  = NO

# Doxygen selects the parser to use depending on the extension of the files it
# parses. With this tag you can assign which parser to use for a given
# extension. Doxygen has a built-in mapping, but you can override or extend it
# using this tag. The format is ext=language, where ext is a file extension, and
# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice,
# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
# tries to guess whether the code is fixed or free formatted code, this is the
# default for Fortran type files). For instance to make doxygen treat .inc files
# as Fortran files (default is PHP), and .f files as C (default is Fortran),
# use: inc=Fortran f=C.
#
# Note: For files without extension you can use no_extension as a placeholder.
#
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
# the files are not read by doxygen. When specifying no_extension you should add
# * to the FILE_PATTERNS.
#
# Note see also the list of default file extension mappings.

EXTENSION_MAPPING      =

# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
# according to the Markdown format, which allows for more readable
# documentation. See https://daringfireball.net/projects/markdown/ for details.
# The output of markdown processing is further processed by doxygen, so you can
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
# case of backward compatibilities issues.
# The default value is: YES.

MARKDOWN_SUPPORT       = YES

# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
# to that level are automatically included in the table of contents, even if
# they do not have an id attribute.
# Note: This feature currently applies only to Markdown headings.
# Minimum value: 0, maximum value: 99, default value: 5.
# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.

TOC_INCLUDE_HEADINGS   = 5

# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to
# generate identifiers for the Markdown headings. Note: Every identifier is
# unique.
# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a
# sequence number starting at 0 and GITHUB use the lower case version of title
# with any whitespace replaced by '-' and punctuation characters removed.
# The default value is: DOXYGEN.
# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.

MARKDOWN_ID_STYLE      = DOXYGEN

# When enabled doxygen tries to link words that correspond to documented
# classes, or namespaces to their corresponding documentation. Such a link can
# be prevented in individual cases by putting a % sign in front of the word or
# globally by setting AUTOLINK_SUPPORT to NO.
# The default value is: YES.

AUTOLINK_SUPPORT       = YES

# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
# to include (a tag file for) the STL sources as input, then you should set this
# tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string);
# versus func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
# The default value is: NO.

BUILTIN_STL_SUPPORT    = NO

# If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support.
# The default value is: NO.

CPP_CLI_SUPPORT        = NO

# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
# will parse them like normal C++ but will assume all classes use public instead
# of private inheritance when no explicit protection keyword is present.
# The default value is: NO.

SIP_SUPPORT            = NO

# For Microsoft's IDL there are propget and propput attributes to indicate
# getter and setter methods for a property. Setting this option to YES will make
# doxygen to replace the get and set methods by a property in the documentation.
# This will only work if the methods are indeed getting or setting a simple
# type. If this is not the case, or you want to show the methods anyway, you
# should set this option to NO.
# The default value is: YES.

IDL_PROPERTY_SUPPORT   = YES

# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
# The default value is: NO.

DISTRIBUTE_GROUP_DOC   = NO

# If one adds a struct or class to a group and this option is enabled, then also
# any nested class or struct is added to the same group. By default this option
# is disabled and one has to add nested compounds explicitly via \ingroup.
# The default value is: NO.

GROUP_NESTED_COMPOUNDS = NO

# Set the SUBGROUPING tag to YES to allow class member groups of the same type
# (for instance a group of public functions) to be put as a subgroup of that
# type (e.g. under the Public Functions section). Set it to NO to prevent
# subgrouping. Alternatively, this can be done per class using the
# \nosubgrouping command.
# The default value is: YES.

SUBGROUPING            = YES

# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
# are shown inside the group in which they are included (e.g. using \ingroup)
# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
# and RTF).
#
# Note that this feature does not work in combination with
# SEPARATE_MEMBER_PAGES.
# The default value is: NO.

INLINE_GROUPED_CLASSES = NO

# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
# with only public data fields or simple typedef fields will be shown inline in
# the documentation of the scope in which they are defined (i.e. file,
# namespace, or group documentation), provided this scope is documented. If set
# to NO, structs, classes, and unions are shown on a separate page (for HTML and
# Man pages) or section (for LaTeX and RTF).
# The default value is: NO.

INLINE_SIMPLE_STRUCTS  = NO

# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
# enum is documented as struct, union, or enum with the name of the typedef. So
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
# with name TypeT. When disabled the typedef will appear as a member of a file,
# namespace, or class. And the struct will be named TypeS. This can typically be
# useful for C code in case the coding convention dictates that all compound
# types are typedef'ed and only the typedef is referenced, never the tag name.
# The default value is: NO.

TYPEDEF_HIDES_STRUCT   = YES

# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
# cache is used to resolve symbols given their name and scope. Since this can be
# an expensive process and often the same symbol appears multiple times in the
# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
# doxygen will become slower. If the cache is too large, memory is wasted. The
# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
# symbols. At the end of a run doxygen will report the cache usage and suggest
# the optimal cache size from a speed point of view.
# Minimum value: 0, maximum value: 9, default value: 0.

LOOKUP_CACHE_SIZE      = 0

# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use
# during processing. When set to 0 doxygen will based this on the number of
# cores available in the system. You can set it explicitly to a value larger
# than 0 to get more control over the balance between CPU load and processing
# speed. At this moment only the input processing can be done using multiple
# threads. Since this is still an experimental feature the default is set to 1,
# which effectively disables parallel processing. Please report any issues you
# encounter. Generating dot graphs in parallel is controlled by the
# DOT_NUM_THREADS setting.
# Minimum value: 0, maximum value: 32, default value: 1.

NUM_PROC_THREADS       = 1

# If the TIMESTAMP tag is set different from NO then each generated page will
# contain the date or date and time when the page was generated. Setting this to
# NO can help when comparing the output of multiple runs.
# Possible values are: YES, NO, DATETIME and DATE.
# The default value is: NO.

TIMESTAMP              = NO

#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------

# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
# documentation are documented, even if no documentation was available. Private
# class members and static file members will be hidden unless the
# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
# Note: This will also disable the warnings about undocumented members that are
# normally produced when WARNINGS is set to YES.
# The default value is: NO.

EXTRACT_ALL            = NO

# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
# be included in the documentation.
# The default value is: NO.

EXTRACT_PRIVATE        = NO

# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
# methods of a class will be included in the documentation.
# The default value is: NO.

EXTRACT_PRIV_VIRTUAL   = NO

# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
# scope will be included in the documentation.
# The default value is: NO.

EXTRACT_PACKAGE        = NO

# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
# included in the documentation.
# The default value is: NO.

EXTRACT_STATIC         = NO

# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
# locally in source files will be included in the documentation. If set to NO,
# only classes defined in header files are included. Does not have any effect
# for Java sources.
# The default value is: YES.

EXTRACT_LOCAL_CLASSES  = YES

# This flag is only useful for Objective-C code. If set to YES, local methods,
# which are defined in the implementation section but not in the interface are
# included in the documentation. If set to NO, only methods in the interface are
# included.
# The default value is: NO.

EXTRACT_LOCAL_METHODS  = NO

# If this flag is set to YES, the members of anonymous namespaces will be
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base name of
# the file that contains the anonymous namespace. By default anonymous namespace
# are hidden.
# The default value is: NO.

EXTRACT_ANON_NSPACES   = NO

# If this flag is set to YES, the name of an unnamed parameter in a declaration
# will be determined by the corresponding definition. By default unnamed
# parameters remain unnamed in the output.
# The default value is: YES.

RESOLVE_UNNAMED_PARAMS = YES

# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
# undocumented members inside documented classes or files. If set to NO these
# members will be included in the various overviews, but no documentation
# section is generated. This option has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.

HIDE_UNDOC_MEMBERS     = NO

# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy. If set
# to NO, these classes will be included in the various overviews. This option
# will also hide undocumented C++ concepts if enabled. This option has no effect
# if EXTRACT_ALL is enabled.
# The default value is: NO.

HIDE_UNDOC_CLASSES     = NO

# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
# declarations. If set to NO, these declarations will be included in the
# documentation.
# The default value is: NO.

HIDE_FRIEND_COMPOUNDS  = NO

# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
# documentation blocks found inside the body of a function. If set to NO, these
# blocks will be appended to the function's detailed documentation block.
# The default value is: NO.

HIDE_IN_BODY_DOCS      = NO

# The INTERNAL_DOCS tag determines if documentation that is typed after a
# \internal command is included. If the tag is set to NO then the documentation
# will be excluded. Set it to YES to include the internal documentation.
# The default value is: NO.

INTERNAL_DOCS          = NO

# With the correct setting of option CASE_SENSE_NAMES doxygen will better be
# able to match the capabilities of the underlying filesystem. In case the
# filesystem is case sensitive (i.e. it supports files in the same directory
# whose names only differ in casing), the option must be set to YES to properly
# deal with such files in case they appear in the input. For filesystems that
# are not case sensitive the option should be set to NO to properly deal with
# output files written for symbols that only differ in casing, such as for two
# classes, one named CLASS and the other named Class, and to also support
# references to files without having to specify the exact matching casing. On
# Windows (including Cygwin) and MacOS, users should typically set this option
# to NO, whereas on Linux or other Unix flavors it should typically be set to
# YES.
# Possible values are: SYSTEM, NO and YES.
# The default value is: SYSTEM.

CASE_SENSE_NAMES       = YES

# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
# their full class and namespace scopes in the documentation. If set to YES, the
# scope will be hidden.
# The default value is: NO.

HIDE_SCOPE_NAMES       = NO

# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
# append additional text to a page's title, such as Class Reference. If set to
# YES the compound reference will be hidden.
# The default value is: NO.

HIDE_COMPOUND_REFERENCE= NO

# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class
# will show which file needs to be included to use the class.
# The default value is: YES.

SHOW_HEADERFILE        = YES

# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
# the files that are included by a file in the documentation of that file.
# The default value is: YES.

SHOW_INCLUDE_FILES     = NO

# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
# grouped member an include statement to the documentation, telling the reader
# which file to include in order to use the member.
# The default value is: NO.

SHOW_GROUPED_MEMB_INC  = NO

# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
# files with double quotes in the documentation rather than with sharp brackets.
# The default value is: NO.

FORCE_LOCAL_INCLUDES   = NO

# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
# documentation for inline members.
# The default value is: YES.

INLINE_INFO            = YES

# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
# (detailed) documentation of file and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order.
# The default value is: YES.

SORT_MEMBER_DOCS       = YES

# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
# descriptions of file, namespace and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order. Note that
# this will also influence the order of the classes in the class list.
# The default value is: NO.

SORT_BRIEF_DOCS        = NO

# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
# (brief and detailed) documentation of class members so that constructors and
# destructors are listed first. If set to NO the constructors will appear in the
# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
# member documentation.
# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
# detailed member documentation.
# The default value is: NO.

SORT_MEMBERS_CTORS_1ST = NO

# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
# of group names into alphabetical order. If set to NO the group names will
# appear in their defined order.
# The default value is: NO.

SORT_GROUP_NAMES       = NO

# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
# fully-qualified names, including namespaces. If set to NO, the class list will
# be sorted only by class name, not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the alphabetical
# list.
# The default value is: NO.

SORT_BY_SCOPE_NAME     = NO

# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
# type resolution of all parameters of a function it will reject a match between
# the prototype and the implementation of a member function even if there is
# only one candidate or it is obvious which candidate to choose by doing a
# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
# accept a match between prototype and implementation in such cases.
# The default value is: NO.

STRICT_PROTO_MATCHING  = NO

# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
# list. This list is created by putting \todo commands in the documentation.
# The default value is: YES.

GENERATE_TODOLIST      = YES

# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
# list. This list is created by putting \test commands in the documentation.
# The default value is: YES.

GENERATE_TESTLIST      = YES

# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
# list. This list is created by putting \bug commands in the documentation.
# The default value is: YES.

GENERATE_BUGLIST       = YES

# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
# the deprecated list. This list is created by putting \deprecated commands in
# the documentation.
# The default value is: YES.

GENERATE_DEPRECATEDLIST= YES

# The ENABLED_SECTIONS tag can be used to enable conditional documentation
# sections, marked by \if <section_label> ... \endif and \cond <section_label>
# ... \endcond blocks.

ENABLED_SECTIONS       =

# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
# initial value of a variable or macro / define can have for it to appear in the
# documentation. If the initializer consists of more lines than specified here
# it will be hidden. Use a value of 0 to hide initializers completely. The
# appearance of the value of individual variables and macros / defines can be
# controlled using \showinitializer or \hideinitializer command in the
# documentation regardless of this setting.
# Minimum value: 0, maximum value: 10000, default value: 30.

MAX_INITIALIZER_LINES  = 30

# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
# the bottom of the documentation of classes and structs. If set to YES, the
# list will mention the files that were used to generate the documentation.
# The default value is: YES.

SHOW_USED_FILES        = NO

# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
# will remove the Files entry from the Quick Index and from the Folder Tree View
# (if specified).
# The default value is: YES.

SHOW_FILES             = NO

# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
# page. This will remove the Namespaces entry from the Quick Index and from the
# Folder Tree View (if specified).
# The default value is: YES.

SHOW_NAMESPACES        = YES

# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from
# the version control system). Doxygen will invoke the program by executing (via
# popen()) the command command input-file, where command is the value of the
# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
# by doxygen. Whatever the program writes to standard output is used as the file
# version. For an example see the documentation.

FILE_VERSION_FILTER    =

# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
# by doxygen. The layout file controls the global structure of the generated
# output files in an output format independent way. To create the layout file
# that represents doxygen's defaults, run doxygen with the -l option. You can
# optionally specify a file name after the option, if omitted DoxygenLayout.xml
# will be used as the name of the layout file. See also section "Changing the
# layout of pages" for information.
#
# Note that if you run doxygen from a directory containing a file called
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
# tag is left empty.

LAYOUT_FILE            =

# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool
# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references.

CITE_BIB_FILES         =

#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------

# The QUIET tag can be used to turn on/off the messages that are generated to
# standard output by doxygen. If QUIET is set to YES this implies that the
# messages are off.
# The default value is: NO.

QUIET                  = NO

# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
# this implies that the warnings are on.
#
# Tip: Turn warnings on while writing the documentation.
# The default value is: YES.

WARNINGS               = YES

# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
# will automatically be disabled.
# The default value is: YES.

WARN_IF_UNDOCUMENTED   = NO

# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as documenting some parameters in
# a documented function twice, or documenting parameters that don't exist or
# using markup commands wrongly.
# The default value is: YES.

WARN_IF_DOC_ERROR      = YES

# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete
# function parameter documentation. If set to NO, doxygen will accept that some
# parameters have no documentation without warning.
# The default value is: YES.

WARN_IF_INCOMPLETE_DOC = YES

# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
# are documented, but have no documentation for their parameters or return
# value. If set to NO, doxygen will only warn about wrong parameter
# documentation, but not about the absence of documentation. If EXTRACT_ALL is
# set to YES then this flag will automatically be disabled. See also
# WARN_IF_INCOMPLETE_DOC
# The default value is: NO.

WARN_NO_PARAMDOC       = NO

# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about
# undocumented enumeration values. If set to NO, doxygen will accept
# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag
# will automatically be disabled.
# The default value is: NO.

WARN_IF_UNDOC_ENUM_VAL = NO

# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
# at the end of the doxygen process doxygen will return with a non-zero status.
# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves
# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not
# write the warning messages in between other messages but write them at the end
# of a run, in case a WARN_LOGFILE is defined the warning messages will be
# besides being in the defined file also be shown at the end of a run, unless
# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case
# the behavior will remain as with the setting FAIL_ON_WARNINGS.
# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT.
# The default value is: NO.

WARN_AS_ERROR          = NO

# The WARN_FORMAT tag determines the format of the warning messages that doxygen
# can produce. The string should contain the $file, $line, and $text tags, which
# will be replaced by the file and line number from which the warning originated
# and the warning text. Optionally the format may contain $version, which will
# be replaced by the version of the file (if it could be obtained via
# FILE_VERSION_FILTER)
# See also: WARN_LINE_FORMAT
# The default value is: $file:$line: $text.

WARN_FORMAT            = "$file:$line: $text"

# In the $text part of the WARN_FORMAT command it is possible that a reference
# to a more specific place is given. To make it easier to jump to this place
# (outside of doxygen) the user can define a custom "cut" / "paste" string.
# Example:
# WARN_LINE_FORMAT = "'vi $file +$line'"
# See also: WARN_FORMAT
# The default value is: at line $line of file $file.

WARN_LINE_FORMAT       = "at line $line of file $file"

# The WARN_LOGFILE tag can be used to specify a file to which warning and error
# messages should be written. If left blank the output is written to standard
# error (stderr). In case the file specified cannot be opened for writing the
# warning and error messages are written to standard error. When as file - is
# specified the warning and error messages are written to standard output
# (stdout).

WARN_LOGFILE           =

#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------

# The INPUT tag is used to specify the files and/or directories that contain
# documented source files. You may enter file names like myfile.cpp or
# directories like /usr/src/myproject. Separate the files or directories with
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched.

INPUT                  = ../src/cocotb/share/include/gpi.h

# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
# documentation (see:
# https://www.gnu.org/software/libiconv/) for the list of possible encodings.
# See also: INPUT_FILE_ENCODING
# The default value is: UTF-8.

INPUT_ENCODING         = UTF-8

# This tag can be used to specify the character encoding of the source files
# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify
# character encoding on a per file pattern basis. Doxygen will compare the file
# name with each pattern and apply the encoding instead of the default
# INPUT_ENCODING) if there is a match. The character encodings are a list of the
# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding
# "INPUT_ENCODING" for further information on supported encodings.

INPUT_FILE_ENCODING    =

# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
# *.h) to filter out the source-files in the directories.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# read by doxygen.
#
# Note the list of default checked file patterns might differ from the list of
# default file extension mappings.
#
# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm,
# *.cpp, *.cppm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl,
# *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, *.php,
# *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be
# provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.

FILE_PATTERNS          =

# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
# The default value is: NO.

RECURSIVE              = YES

# The EXCLUDE tag can be used to specify files and/or directories that should be
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
#
# Note that relative paths are relative to the directory from which doxygen is
# run.

EXCLUDE                =

# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.
# The default value is: NO.

EXCLUDE_SYMLINKS       = NO

# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
# certain files from those directories.
#
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories for example use the pattern */test/*

EXCLUDE_PATTERNS       =

# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
# output. The symbol name can be a fully qualified name, a word, or if the
# wildcard * is used, a substring. Examples: ANamespace, AClass,
# ANamespace::AClass, ANamespace::*Test

EXCLUDE_SYMBOLS        =

# The EXAMPLE_PATH tag can be used to specify one or more files or directories
# that contain example code fragments that are included (see the \include
# command).

EXAMPLE_PATH           =

# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
# *.h) to filter out the source-files in the directories. If left blank all
# files are included.

EXAMPLE_PATTERNS       =

# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
# searched for input files to be used with the \include or \dontinclude commands
# irrespective of the value of the RECURSIVE tag.
# The default value is: NO.

EXAMPLE_RECURSIVE      = NO

# The IMAGE_PATH tag can be used to specify one or more files or directories
# that contain images that are to be included in the documentation (see the
# \image command).

IMAGE_PATH             =

# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
# by executing (via popen()) the command:
#
# <filter> <input-file>
#
# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
# name of an input file. Doxygen will then use the output that the filter
# program writes to standard output. If FILTER_PATTERNS is specified, this tag
# will be ignored.
#
# Note that the filter must not add or remove lines; it is applied before the
# code is scanned, but not when the output code is generated. If lines are added
# or removed, the anchors will not be placed correctly.
#
# Note that doxygen will use the data processed and written to standard output
# for further processing, therefore nothing else, like debug statements or used
# commands (so in case of a Windows batch file always use @echo OFF), should be
# written to standard output.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# properly processed by doxygen.

INPUT_FILTER           =

# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
# basis. Doxygen will compare the file name with each pattern and apply the
# filter if there is a match. The filters are a list of the form: pattern=filter
# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
# patterns match the file name, INPUT_FILTER is applied.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# properly processed by doxygen.

FILTER_PATTERNS        =

# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will also be used to filter the input files that are used for
# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
# The default value is: NO.

FILTER_SOURCE_FILES    = NO

# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
# it is also possible to disable source filtering for a specific pattern using
# *.ext= (so without naming a filter).
# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.

FILTER_SOURCE_PATTERNS =

# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
# is part of the input, its contents will be placed on the main page
# (index.html). This can be useful if you have a project on for instance GitHub
# and want to reuse the introduction page also for the doxygen output.

USE_MDFILE_AS_MAINPAGE =

# The Fortran standard specifies that for fixed formatted Fortran code all
# characters from position 72 are to be considered as comment. A common
# extension is to allow longer lines before the automatic comment starts. The
# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can
# be processed before the automatic comment starts.
# Minimum value: 7, maximum value: 10000, default value: 72.

FORTRAN_COMMENT_AFTER  = 72

#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------

# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
# generated. Documented entities will be cross-referenced with these sources.
#
# Note: To get rid of all source code in the generated output, make sure that
# also VERBATIM_HEADERS is set to NO.
# The default value is: NO.

SOURCE_BROWSER         = NO

# Setting the INLINE_SOURCES tag to YES will include the body of functions,
# classes and enums directly into the documentation.
# The default value is: NO.

INLINE_SOURCES         = NO

# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
# special comment blocks from generated source code fragments. Normal C, C++ and
# Fortran comments will always remain visible.
# The default value is: YES.

STRIP_CODE_COMMENTS    = YES

# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
# entity all documented functions referencing it will be listed.
# The default value is: NO.

REFERENCED_BY_RELATION = NO

# If the REFERENCES_RELATION tag is set to YES then for each documented function
# all documented entities called/used by that function will be listed.
# The default value is: NO.

REFERENCES_RELATION    = NO

# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
# to YES then the hyperlinks from functions in REFERENCES_RELATION and
# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
# link to the documentation.
# The default value is: YES.

REFERENCES_LINK_SOURCE = YES

# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
# source code will show a tooltip with additional information such as prototype,
# brief description and links to the definition and documentation. Since this
# will make the HTML file larger and loading of large files a bit slower, you
# can opt to disable this feature.
# The default value is: YES.
# This tag requires that the tag SOURCE_BROWSER is set to YES.

SOURCE_TOOLTIPS        = YES

# If the USE_HTAGS tag is set to YES then the references to source code will
# point to the HTML generated by the htags(1) tool instead of doxygen built-in
# source browser. The htags tool is part of GNU's global source tagging system
# (see https://www.gnu.org/software/global/global.html). You will need version
# 4.8.6 or higher.
#
# To use it do the following:
# - Install the latest version of global
# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
# - Make sure the INPUT points to the root of the source tree
# - Run doxygen as normal
#
# Doxygen will invoke htags (and that will in turn invoke gtags), so these
# tools must be available from the command line (i.e. in the search path).
#
# The result: instead of the source browser generated by doxygen, the links to
# source code will now point to the output of htags.
# The default value is: NO.
# This tag requires that the tag SOURCE_BROWSER is set to YES.

USE_HTAGS              = NO

# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
# verbatim copy of the header file for each class for which an include is
# specified. Set to NO to disable this.
# See also: Section \class.
# The default value is: YES.

VERBATIM_HEADERS       = YES

# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
# clang parser (see:
# http://clang.llvm.org/) for more accurate parsing at the cost of reduced
# performance. This can be particularly helpful with template rich C++ code for
# which doxygen's built-in parser lacks the necessary type information.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse_libclang=ON option for CMake.
# The default value is: NO.

CLANG_ASSISTED_PARSING = NO

# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS
# tag is set to YES then doxygen will add the directory of each input to the
# include path.
# The default value is: YES.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.

CLANG_ADD_INC_PATHS    = YES

# If clang assisted parsing is enabled you can provide the compiler with command
# line options that you would normally use when invoking the compiler. Note that
# the include paths will already be set by doxygen for the files and directories
# specified with INPUT and INCLUDE_PATH.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.

CLANG_OPTIONS          =

# If clang assisted parsing is enabled you can provide the clang parser with the
# path to the directory containing a file called compile_commands.json. This
# file is the compilation database (see:
# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the
# options used when the source files were built. This is equivalent to
# specifying the -p option to a clang tool, such as clang-check. These options
# will then be passed to the parser. Any options specified with CLANG_OPTIONS
# will be added as well.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse_libclang=ON option for CMake.

CLANG_DATABASE_PATH    =

#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------

# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
# compounds will be generated. Enable this if the project contains a lot of
# classes, structs, unions or interfaces.
# The default value is: YES.

ALPHABETICAL_INDEX     = YES

# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes)
# that should be ignored while generating the index headers. The IGNORE_PREFIX
# tag works for classes, function and member names. The entity will be placed in
# the alphabetical list under the first letter of the entity name that remains
# after removing the prefix.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.

IGNORE_PREFIX          =

#---------------------------------------------------------------------------
# Configuration options related to the HTML output
#---------------------------------------------------------------------------

# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
# The default value is: YES.

GENERATE_HTML          = NO

# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: html.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_OUTPUT            = html

# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
# generated HTML page (for example: .htm, .php, .asp).
# The default value is: .html.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_FILE_EXTENSION    = .html

# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
# each generated HTML page. If the tag is left blank doxygen will generate a
# standard header.
#
# To get valid HTML the header file that includes any scripts and style sheets
# that doxygen needs, which is dependent on the configuration options used (e.g.
# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
# default header using
# doxygen -w html new_header.html new_footer.html new_stylesheet.css
# YourConfigFile
# and then modify the file new_header.html. See also section "Doxygen usage"
# for information on how to generate the default header that doxygen normally
# uses.
# Note: The header is subject to change so you typically have to regenerate the
# default header when upgrading to a newer version of doxygen. For a description
# of the possible markers and block names see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_HEADER            =

# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
# generated HTML page. If the tag is left blank doxygen will generate a standard
# footer. See HTML_HEADER for more information on how to generate a default
# footer and what special commands can be used inside the footer. See also
# section "Doxygen usage" for information on how to generate the default footer
# that doxygen normally uses.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_FOOTER            =

# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
# sheet that is used by each HTML page. It can be used to fine-tune the look of
# the HTML output. If left blank doxygen will generate a default style sheet.
# See also section "Doxygen usage" for information on how to generate the style
# sheet that doxygen normally uses.
# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
# it is more robust and this tag (HTML_STYLESHEET) will in the future become
# obsolete.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_STYLESHEET        =

# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
# cascading style sheets that are included after the standard style sheets
# created by doxygen. Using this option one can overrule certain style aspects.
# This is preferred over using HTML_STYLESHEET since it does not replace the
# standard style sheet and is therefore more robust against future updates.
# Doxygen will copy the style sheet files to the output directory.
# Note: The order of the extra style sheet files is of importance (e.g. the last
# style sheet in the list overrules the setting of the previous ones in the
# list).
# Note: Since the styling of scrollbars can currently not be overruled in
# Webkit/Chromium, the styling will be left out of the default doxygen.css if
# one or more extra stylesheets have been specified. So if scrollbar
# customization is desired it has to be added explicitly. For an example see the
# documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_EXTRA_STYLESHEET  =

# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the HTML output directory. Note
# that these files will be copied to the base HTML output directory. Use the
# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
# files will be copied as-is; there are no commands or markers available.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_EXTRA_FILES       =

# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output
# should be rendered with a dark or light theme.
# Possible values are: LIGHT always generate light mode output, DARK always
# generate dark mode output, AUTO_LIGHT automatically set the mode according to
# the user preference, use light mode if no preference is set (the default),
# AUTO_DARK automatically set the mode according to the user preference, use
# dark mode if no preference is set and TOGGLE allow to user to switch between
# light and dark mode via a button.
# The default value is: AUTO_LIGHT.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_COLORSTYLE        = AUTO_LIGHT

# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
# will adjust the colors in the style sheet and background images according to
# this color. Hue is specified as an angle on a color-wheel, see
# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
# purple, and 360 is red again.
# Minimum value: 0, maximum value: 359, default value: 220.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_COLORSTYLE_HUE    = 220

# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
# in the HTML output. For a value of 0 the output will use gray-scales only. A
# value of 255 will produce the most vivid colors.
# Minimum value: 0, maximum value: 255, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_COLORSTYLE_SAT    = 100

# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
# luminance component of the colors in the HTML output. Values below 100
# gradually make the output lighter, whereas values above 100 make the output
# darker. The value divided by 100 is the actual gamma applied, so 80 represents
# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
# change the gamma.
# Minimum value: 40, maximum value: 240, default value: 80.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_COLORSTYLE_GAMMA  = 80

# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
# documentation will contain a main index with vertical navigation menus that
# are dynamically created via JavaScript. If disabled, the navigation index will
# consists of multiple levels of tabs that are statically embedded in every HTML
# page. Disable this option to support browsers that do not have JavaScript,
# like the Qt help browser.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_DYNAMIC_MENUS     = YES

# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_DYNAMIC_SECTIONS  = NO

# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be
# dynamically folded and expanded in the generated HTML source code.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_CODE_FOLDING      = YES

# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
# shown in the various tree structured indices initially; the user can expand
# and collapse entries dynamically later on. Doxygen will expand the tree to
# such a level that at most the specified number of entries are visible (unless
# a fully collapsed tree already exceeds this amount). So setting the number of
# entries 1 will produce a full collapsed tree by default. 0 is a special value
# representing an infinite number of entries and will result in a full expanded
# tree by default.
# Minimum value: 0, maximum value: 9999, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_INDEX_NUM_ENTRIES = 100

# If the GENERATE_DOCSET tag is set to YES, additional index files will be
# generated that can be used as input for Apple's Xcode 3 integrated development
# environment (see:
# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To
# create a documentation set, doxygen will generate a Makefile in the HTML
# output directory. Running make will produce the docset in that directory and
# running make install will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
# genXcode/_index.html for more information.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_DOCSET        = NO

# This tag determines the name of the docset feed. A documentation feed provides
# an umbrella under which multiple documentation sets from a single provider
# (such as a company or product suite) can be grouped.
# The default value is: Doxygen generated docs.
# This tag requires that the tag GENERATE_DOCSET is set to YES.

DOCSET_FEEDNAME        = "Doxygen generated docs"

# This tag determines the URL of the docset feed. A documentation feed provides
# an umbrella under which multiple documentation sets from a single provider
# (such as a company or product suite) can be grouped.
# This tag requires that the tag GENERATE_DOCSET is set to YES.

DOCSET_FEEDURL         =

# This tag specifies a string that should uniquely identify the documentation
# set bundle. This should be a reverse domain-name style string, e.g.
# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_DOCSET is set to YES.

DOCSET_BUNDLE_ID       = org.doxygen.Project

# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
# the documentation publisher. This should be a reverse domain-name style
# string, e.g. com.mycompany.MyDocSet.documentation.
# The default value is: org.doxygen.Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.

DOCSET_PUBLISHER_ID    = org.doxygen.Publisher

# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
# The default value is: Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.

DOCSET_PUBLISHER_NAME  = Publisher

# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
# on Windows. In the beginning of 2021 Microsoft took the original page, with
# a.o. the download links, offline the HTML help workshop was already many years
# in maintenance mode). You can download the HTML help workshop from the web
# archives at Installation executable (see:
# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo
# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe).
#
# The HTML Help Workshop contains a compiler that can convert all HTML output
# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
# files are now used as the Windows 98 help format, and will replace the old
# Windows help format (.hlp) on all Windows platforms in the future. Compressed
# HTML files also contain an index, a table of contents, and you can search for
# words in the documentation. The HTML workshop also contains a viewer for
# compressed HTML files.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_HTMLHELP      = NO

# The CHM_FILE tag can be used to specify the file name of the resulting .chm
# file. You can add a path in front of the file if the result should not be
# written to the html output directory.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

CHM_FILE               =

# The HHC_LOCATION tag can be used to specify the location (absolute path
# including file name) of the HTML help compiler (hhc.exe). If non-empty,
# doxygen will try to run the HTML help compiler on the generated index.hhp.
# The file has to be specified with full path.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

HHC_LOCATION           =

# The GENERATE_CHI flag controls if a separate .chi index file is generated
# (YES) or that it should be included in the main .chm file (NO).
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

GENERATE_CHI           = NO

# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
# and project file content.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

CHM_INDEX_ENCODING     =

# The BINARY_TOC flag controls whether a binary table of contents is generated
# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
# enables the Previous and Next buttons.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

BINARY_TOC             = NO

# The TOC_EXPAND flag can be set to YES to add extra items for group members to
# the table of contents of the HTML help documentation and to the tree view.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.

TOC_EXPAND             = NO

# The SITEMAP_URL tag is used to specify the full URL of the place where the
# generated documentation will be placed on the server by the user during the
# deployment of the documentation. The generated sitemap is called sitemap.xml
# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL
# is specified no sitemap is generated. For information about the sitemap
# protocol see https://www.sitemaps.org
# This tag requires that the tag GENERATE_HTML is set to YES.

SITEMAP_URL            =

# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
# (.qch) of the generated HTML documentation.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_QHP           = NO

# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
# the file name of the resulting .qch file. The path specified is relative to
# the HTML output folder.
# This tag requires that the tag GENERATE_QHP is set to YES.

QCH_FILE               =

# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
# Project output. For more information please see Qt Help Project / Namespace
# (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_NAMESPACE          = org.doxygen.Project

# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
# Help Project output. For more information please see Qt Help Project / Virtual
# Folders (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).
# The default value is: doc.
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_VIRTUAL_FOLDER     = doc

# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
# filter to add. For more information please see Qt Help Project / Custom
# Filters (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_CUST_FILTER_NAME   =

# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
# custom filter to add. For more information please see Qt Help Project / Custom
# Filters (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_CUST_FILTER_ATTRS  =

# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
# project's filter section matches. Qt Help Project / Filter Attributes (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
# This tag requires that the tag GENERATE_QHP is set to YES.

QHP_SECT_FILTER_ATTRS  =

# The QHG_LOCATION tag can be used to specify the location (absolute path
# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to
# run qhelpgenerator on the generated .qhp file.
# This tag requires that the tag GENERATE_QHP is set to YES.

QHG_LOCATION           =

# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
# generated, together with the HTML files, they form an Eclipse help plugin. To
# install this plugin and make it available under the help contents menu in
# Eclipse, the contents of the directory containing the HTML and XML files needs
# to be copied into the plugins directory of eclipse. The name of the directory
# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
# After copying Eclipse needs to be restarted before the help appears.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_ECLIPSEHELP   = NO

# A unique identifier for the Eclipse help plugin. When installing the plugin
# the directory name containing the HTML and XML files should also have this
# name. Each documentation set should have its own identifier.
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.

ECLIPSE_DOC_ID         = org.doxygen.Project

# If you want full control over the layout of the generated HTML pages it might
# be necessary to disable the index and replace it with your own. The
# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
# of each HTML page. A value of NO enables the index and the value YES disables
# it. Since the tabs in the index contain the same information as the navigation
# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

DISABLE_INDEX          = NO

# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
# structure should be generated to display hierarchical information. If the tag
# value is set to YES, a side panel will be generated containing a tree-like
# index structure (just like the one that is generated for HTML Help). For this
# to work a browser that supports JavaScript, DHTML, CSS and frames is required
# (i.e. any modern browser). Windows users are probably better off using the
# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
# further fine tune the look of the index (see "Fine-tuning the output"). As an
# example, the default style sheet generated by doxygen has an example that
# shows how to put an image at the root of the tree instead of the PROJECT_NAME.
# Since the tree basically has the same information as the tab index, you could
# consider setting DISABLE_INDEX to YES when enabling this option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

GENERATE_TREEVIEW      = NO

# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the
# FULL_SIDEBAR option determines if the side bar is limited to only the treeview
# area (value NO) or if it should extend to the full height of the window (value
# YES). Setting this to YES gives a layout similar to
# https://docs.readthedocs.io with more room for contents, but less room for the
# project logo, title, and description. If either GENERATE_TREEVIEW or
# DISABLE_INDEX is set to NO, this option has no effect.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

FULL_SIDEBAR           = NO

# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
# doxygen will group on one line in the generated HTML documentation.
#
# Note that a value of 0 will completely suppress the enum values from appearing
# in the overview section.
# Minimum value: 0, maximum value: 20, default value: 4.
# This tag requires that the tag GENERATE_HTML is set to YES.

ENUM_VALUES_PER_LINE   = 4

# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
# to set the initial width (in pixels) of the frame in which the tree is shown.
# Minimum value: 0, maximum value: 1500, default value: 250.
# This tag requires that the tag GENERATE_HTML is set to YES.

TREEVIEW_WIDTH         = 250

# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
# external symbols imported via tag files in a separate window.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

EXT_LINKS_IN_WINDOW    = NO

# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email
# addresses.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.

OBFUSCATE_EMAILS       = YES

# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
# the HTML output. These images will generally look nicer at scaled resolutions.
# Possible values are: png (the default) and svg (looks nicer but requires the
# pdf2svg or inkscape tool).
# The default value is: png.
# This tag requires that the tag GENERATE_HTML is set to YES.

HTML_FORMULA_FORMAT    = png

# Use this tag to change the font size of LaTeX formulas included as images in
# the HTML documentation. When you change the font size after a successful
# doxygen run you need to manually remove any form_*.png images from the HTML
# output directory to force them to be regenerated.
# Minimum value: 8, maximum value: 50, default value: 10.
# This tag requires that the tag GENERATE_HTML is set to YES.

FORMULA_FONTSIZE       = 10

# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
# to create new LaTeX commands to be used in formulas as building blocks. See
# the section "Including formulas" for details.

FORMULA_MACROFILE      =

# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# https://www.mathjax.org) which uses client side JavaScript for the rendering
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
# installed or if you want to formulas look prettier in the HTML output. When
# enabled you may also need to install MathJax separately and configure the path
# to it using the MATHJAX_RELPATH option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.

USE_MATHJAX            = NO

# With MATHJAX_VERSION it is possible to specify the MathJax version to be used.
# Note that the different versions of MathJax have different requirements with
# regards to the different settings, so it is possible that also other MathJax
# settings have to be changed when switching between the different MathJax
# versions.
# Possible values are: MathJax_2 and MathJax_3.
# The default value is: MathJax_2.
# This tag requires that the tag USE_MATHJAX is set to YES.

MATHJAX_VERSION        = MathJax_2

# When MathJax is enabled you can set the default output format to be used for
# the MathJax output. For more details about the output format see MathJax
# version 2 (see:
# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3
# (see:
# http://docs.mathjax.org/en/latest/web/components/output.html).
# Possible values are: HTML-CSS (which is slower, but has the best
# compatibility. This is the name for Mathjax version 2, for MathJax version 3
# this will be translated into chtml), NativeMML (i.e. MathML. Only supported
# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This
# is the name for Mathjax version 3, for MathJax version 2 this will be
# translated into HTML-CSS) and SVG.
# The default value is: HTML-CSS.
# This tag requires that the tag USE_MATHJAX is set to YES.

MATHJAX_FORMAT         = HTML-CSS

# When MathJax is enabled you need to specify the location relative to the HTML
# output directory using the MATHJAX_RELPATH option. The destination directory
# should contain the MathJax.js script. For instance, if the mathjax directory
# is located at the same level as the HTML output directory, then
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
# Content Delivery Network so you can quickly see the result without installing
# MathJax. However, it is strongly recommended to install a local copy of
# MathJax from https://www.mathjax.org before deployment. The default value is:
# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2
# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3
# This tag requires that the tag USE_MATHJAX is set to YES.

MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest

# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
# extension names that should be enabled during MathJax rendering. For example
# for MathJax version 2 (see
# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions):
# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
# For example for MathJax version 3 (see
# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html):
# MATHJAX_EXTENSIONS = ams
# This tag requires that the tag USE_MATHJAX is set to YES.

MATHJAX_EXTENSIONS     =

# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
# of code that will be used on startup of the MathJax code. See the MathJax site
# (see:
# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an
# example see the documentation.
# This tag requires that the tag USE_MATHJAX is set to YES.

MATHJAX_CODEFILE       =

# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
# the HTML output. The underlying search engine uses javascript and DHTML and
# should work on any modern browser. Note that when using HTML help
# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
# there is already a search function so this one should typically be disabled.
# For large projects the javascript based search engine can be slow, then
# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
# search using the keyboard; to jump to the search box use <access key> + S
# (what the <access key> is depends on the OS and browser, but it is typically
# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
# key> to jump into the search results window, the results can be navigated
# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
# the search. The filter options can be selected when the cursor is inside the
# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
# to select a filter and <Enter> or <escape> to activate or cancel the filter
# option.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.

SEARCHENGINE           = YES

# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
# implemented using a web server instead of a web client using JavaScript. There
# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
# setting. When disabled, doxygen will generate a PHP script for searching and
# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
# and searching needs to be provided by external tools. See the section
# "External Indexing and Searching" for details.
# The default value is: NO.
# This tag requires that the tag SEARCHENGINE is set to YES.

SERVER_BASED_SEARCH    = NO

# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
# script for searching. Instead the search results are written to an XML file
# which needs to be processed by an external indexer. Doxygen will invoke an
# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
# search results.
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see:
# https://xapian.org/).
#
# See the section "External Indexing and Searching" for details.
# The default value is: NO.
# This tag requires that the tag SEARCHENGINE is set to YES.

EXTERNAL_SEARCH        = NO

# The SEARCHENGINE_URL should point to a search engine hosted by a web server
# which will return the search results when EXTERNAL_SEARCH is enabled.
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see:
# https://xapian.org/). See the section "External Indexing and Searching" for
# details.
# This tag requires that the tag SEARCHENGINE is set to YES.

SEARCHENGINE_URL       =

# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
# search data is written to a file for indexing by an external tool. With the
# SEARCHDATA_FILE tag the name of this file can be specified.
# The default file is: searchdata.xml.
# This tag requires that the tag SEARCHENGINE is set to YES.

SEARCHDATA_FILE        = searchdata.xml

# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
# projects and redirect the results back to the right project.
# This tag requires that the tag SEARCHENGINE is set to YES.

EXTERNAL_SEARCH_ID     =

# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
# projects other than the one defined by this configuration file, but that are
# all added to the same external search index. Each project needs to have a
# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
# to a relative location where the documentation can be found. The format is:
# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
# This tag requires that the tag SEARCHENGINE is set to YES.

EXTRA_SEARCH_MAPPINGS  =

#---------------------------------------------------------------------------
# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------

# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
# The default value is: YES.

GENERATE_LATEX         = NO

# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: latex.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_OUTPUT           = latex

# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
# invoked.
#
# Note that when not enabling USE_PDFLATEX the default is latex when enabling
# USE_PDFLATEX the default is pdflatex and when in the later case latex is
# chosen this is overwritten by pdflatex. For specific output languages the
# default can have been set differently, this depends on the implementation of
# the output language.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_CMD_NAME         = latex

# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
# index for LaTeX.
# Note: This tag is used in the Makefile / make.bat.
# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
# (.tex).
# The default file is: makeindex.
# This tag requires that the tag GENERATE_LATEX is set to YES.

MAKEINDEX_CMD_NAME     = makeindex

# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
# generate index for LaTeX. In case there is no backslash (\) as first character
# it will be automatically added in the LaTeX code.
# Note: This tag is used in the generated output file (.tex).
# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
# The default value is: makeindex.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_MAKEINDEX_CMD    = makeindex

# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.

COMPACT_LATEX          = NO

# The PAPER_TYPE tag can be used to set the paper type that is used by the
# printer.
# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
# 14 inches) and executive (7.25 x 10.5 inches).
# The default value is: a4.
# This tag requires that the tag GENERATE_LATEX is set to YES.

PAPER_TYPE             = a4

# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
# that should be included in the LaTeX output. The package can be specified just
# by its name or with the correct syntax as to be used with the LaTeX
# \usepackage command. To get the times font for instance you can specify :
# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
# To use the option intlimits with the amsmath package you can specify:
# EXTRA_PACKAGES=[intlimits]{amsmath}
# If left blank no extra packages will be included.
# This tag requires that the tag GENERATE_LATEX is set to YES.

EXTRA_PACKAGES         =

# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for
# the generated LaTeX document. The header should contain everything until the
# first chapter. If it is left blank doxygen will generate a standard header. It
# is highly recommended to start with a default header using
# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty
# and then modify the file new_header.tex. See also section "Doxygen usage" for
# information on how to generate the default header that doxygen normally uses.
#
# Note: Only use a user-defined header if you know what you are doing!
# Note: The header is subject to change so you typically have to regenerate the
# default header when upgrading to a newer version of doxygen. The following
# commands have a special meaning inside the header (and footer): For a
# description of the possible markers and block names see the documentation.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_HEADER           =

# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for
# the generated LaTeX document. The footer should contain everything after the
# last chapter. If it is left blank doxygen will generate a standard footer. See
# LATEX_HEADER for more information on how to generate a default footer and what
# special commands can be used inside the footer. See also section "Doxygen
# usage" for information on how to generate the default footer that doxygen
# normally uses. Note: Only use a user-defined footer if you know what you are
# doing!
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_FOOTER           =

# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
# LaTeX style sheets that are included after the standard style sheets created
# by doxygen. Using this option one can overrule certain style aspects. Doxygen
# will copy the style sheet files to the output directory.
# Note: The order of the extra style sheet files is of importance (e.g. the last
# style sheet in the list overrules the setting of the previous ones in the
# list).
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_EXTRA_STYLESHEET =

# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the LATEX_OUTPUT output
# directory. Note that the files will be copied as-is; there are no commands or
# markers available.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_EXTRA_FILES      =

# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
# contain links (just like the HTML output) instead of page references. This
# makes the output suitable for online browsing using a PDF viewer.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.

PDF_HYPERLINKS         = YES

# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as
# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
# files. Set this option to YES, to get a higher quality PDF documentation.
#
# See also section LATEX_CMD_NAME for selecting the engine.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.

USE_PDFLATEX           = YES

# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error.
# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch
# mode nothing is printed on the terminal, errors are scrolled as if <return> is
# hit at every error; missing files that TeX tries to input or request from
# keyboard input (\read on a not open input stream) cause the job to abort,
# NON_STOP In nonstop mode the diagnostic message will appear on the terminal,
# but there is no possibility of user interaction just like in batch mode,
# SCROLL In scroll mode, TeX will stop only for missing files to input or if
# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at
# each error, asking for user intervention.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_BATCHMODE        = NO

# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
# index chapters (such as File Index, Compound Index, etc.) in the output.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_HIDE_INDICES     = NO

# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See
# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# The default value is: plain.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_BIB_STYLE        = plain

# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
# path from which the emoji images will be read. If a relative path is entered,
# it will be relative to the LATEX_OUTPUT directory. If left blank the
# LATEX_OUTPUT directory will be used.
# This tag requires that the tag GENERATE_LATEX is set to YES.

LATEX_EMOJI_DIRECTORY  =

#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------

# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
# RTF output is optimized for Word 97 and may not look too pretty with other RTF
# readers/editors.
# The default value is: NO.

GENERATE_RTF           = NO

# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: rtf.
# This tag requires that the tag GENERATE_RTF is set to YES.

RTF_OUTPUT             = rtf

# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.

COMPACT_RTF            = NO

# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
# contain hyperlink fields. The RTF file will contain links (just like the HTML
# output) instead of page references. This makes the output suitable for online
# browsing using Word or some other Word compatible readers that support those
# fields.
#
# Note: WordPad (write) and others do not support links.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.

RTF_HYPERLINKS         = NO

# Load stylesheet definitions from file. Syntax is similar to doxygen's
# configuration file, i.e. a series of assignments. You only have to provide
# replacements, missing definitions are set to their default value.
#
# See also section "Doxygen usage" for information on how to generate the
# default style sheet that doxygen normally uses.
# This tag requires that the tag GENERATE_RTF is set to YES.

RTF_STYLESHEET_FILE    =

# Set optional variables used in the generation of an RTF document. Syntax is
# similar to doxygen's configuration file. A template extensions file can be
# generated using doxygen -e rtf extensionFile.
# This tag requires that the tag GENERATE_RTF is set to YES.

RTF_EXTENSIONS_FILE    =

#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------

# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
# classes and files.
# The default value is: NO.

GENERATE_MAN           = NO

# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it. A directory man3 will be created inside the directory specified by
# MAN_OUTPUT.
# The default directory is: man.
# This tag requires that the tag GENERATE_MAN is set to YES.

MAN_OUTPUT             = man

# The MAN_EXTENSION tag determines the extension that is added to the generated
# man pages. In case the manual section does not start with a number, the number
# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
# optional.
# The default value is: .3.
# This tag requires that the tag GENERATE_MAN is set to YES.

MAN_EXTENSION          = .3

# The MAN_SUBDIR tag determines the name of the directory created within
# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
# MAN_EXTENSION with the initial . removed.
# This tag requires that the tag GENERATE_MAN is set to YES.

MAN_SUBDIR             =

# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
# will generate one additional man file for each entity documented in the real
# man page(s). These additional files only source the real man page, but without
# them the man command would be unable to find the correct page.
# The default value is: NO.
# This tag requires that the tag GENERATE_MAN is set to YES.

MAN_LINKS              = NO

#---------------------------------------------------------------------------
# Configuration options related to the XML output
#---------------------------------------------------------------------------

# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
# captures the structure of the code including all documentation.
# The default value is: NO.

GENERATE_XML           = YES

# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: xml.
# This tag requires that the tag GENERATE_XML is set to YES.

XML_OUTPUT             = _xml

# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
# listings (including syntax highlighting and cross-referencing information) to
# the XML output. Note that enabling this will significantly increase the size
# of the XML output.
# The default value is: YES.
# This tag requires that the tag GENERATE_XML is set to YES.

XML_PROGRAMLISTING     = NO

# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
# namespace members in file scope as well, matching the HTML output.
# The default value is: NO.
# This tag requires that the tag GENERATE_XML is set to YES.

XML_NS_MEMB_FILE_SCOPE = NO

#---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------

# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
# that can be used to generate PDF.
# The default value is: NO.

GENERATE_DOCBOOK       = NO

# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
# front of it.
# The default directory is: docbook.
# This tag requires that the tag GENERATE_DOCBOOK is set to YES.

DOCBOOK_OUTPUT         = docbook

#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------

# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
# AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures
# the structure of the code including all documentation. Note that this feature
# is still experimental and incomplete at the moment.
# The default value is: NO.

GENERATE_AUTOGEN_DEF   = NO

#---------------------------------------------------------------------------
# Configuration options related to Sqlite3 output
#---------------------------------------------------------------------------

# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3
# database with symbols found by doxygen stored in tables.
# The default value is: NO.

GENERATE_SQLITE3       = NO

# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be
# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put
# in front of it.
# The default directory is: sqlite3.
# This tag requires that the tag GENERATE_SQLITE3 is set to YES.

SQLITE3_OUTPUT         = sqlite3

# The SQLITE3_OVERWRITE_DB tag is set to YES, the existing doxygen_sqlite3.db
# database file will be recreated with each doxygen run. If set to NO, doxygen
# will warn if an a database file is already found and not modify it.
# The default value is: YES.
# This tag requires that the tag GENERATE_SQLITE3 is set to YES.

SQLITE3_RECREATE_DB    = YES

#---------------------------------------------------------------------------
# Configuration options related to the Perl module output
#---------------------------------------------------------------------------

# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
# file that captures the structure of the code including all documentation.
#
# Note that this feature is still experimental and incomplete at the moment.
# The default value is: NO.

GENERATE_PERLMOD       = NO

# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
# output from the Perl module output.
# The default value is: NO.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.

PERLMOD_LATEX          = NO

# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
# formatted so it can be parsed by a human reader. This is useful if you want to
# understand what is going on. On the other hand, if this tag is set to NO, the
# size of the Perl module output will be much smaller and Perl will parse it
# just the same.
# The default value is: YES.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.

PERLMOD_PRETTY         = YES

# The names of the make variables in the generated doxyrules.make file are
# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
# so different doxyrules.make files included by the same Makefile don't
# overwrite each other's variables.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.

PERLMOD_MAKEVAR_PREFIX =

#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------

# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
# C-preprocessor directives found in the sources and include files.
# The default value is: YES.

ENABLE_PREPROCESSING   = YES

# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
# in the source code. If set to NO, only conditional compilation will be
# performed. Macro expansion can be done in a controlled way by setting
# EXPAND_ONLY_PREDEF to YES.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

MACRO_EXPANSION        = NO

# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
# the macro expansion is limited to the macros specified with the PREDEFINED and
# EXPAND_AS_DEFINED tags.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

EXPAND_ONLY_PREDEF     = NO

# If the SEARCH_INCLUDES tag is set to YES, the include files in the
# INCLUDE_PATH will be searched if a #include is found.
# The default value is: YES.
# This tag r
Download .txt
gitextract_potnizu6/

├── .backportrc.json
├── .clang-format
├── .codecov.yml
├── .devcontainer/
│   ├── Dockerfile
│   ├── README.md
│   ├── devcontainer.json
│   └── post-create.sh
├── .git-blame-ignore-revs
├── .github/
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── dependabot.yml
│   ├── generate-envs.py
│   ├── issue_template.md
│   └── workflows/
│       ├── backport.yml
│       ├── benchmark.yml
│       ├── build-test-dev.yml
│       ├── build-test-release.yml
│       ├── ecosystem-compat.yml
│       ├── experimental.yml
│       ├── extended.yml
│       ├── regression-tests.yml
│       └── stale.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .readthedocs.yml
├── CONTRIBUTING.md
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.md
├── cocotb_build_libs.py
├── docs/
│   ├── .gitignore
│   ├── Doxyfile
│   ├── README.md
│   └── source/
│       ├── _static/
│       │   ├── cocotb.css
│       │   └── cocotb.js
│       ├── analog_model.rst
│       ├── building.rst
│       ├── conf.py
│       ├── contributing.rst
│       ├── contributors.rst
│       ├── coroutines.rst
│       ├── coverage.rst
│       ├── custom_flows.rst
│       ├── developing.rst
│       ├── diagrams/
│       │   └── README.md
│       ├── examples.rst
│       ├── extensions.rst
│       ├── further_resources.rst
│       ├── genindex.rst
│       ├── glossary.rst
│       ├── index.rst
│       ├── install.rst
│       ├── install_devel.rst
│       ├── library_reference.rst
│       ├── library_reference_c.rst
│       ├── maintaining.rst
│       ├── newsfragments/
│       │   ├── 4519.feature.rst
│       │   ├── 4717.change.rst
│       │   ├── 4986.removal.1.rst
│       │   ├── 4986.removal.rst
│       │   ├── 4987.removal.rst
│       │   ├── 5007.feature.1.rst
│       │   ├── 5007.feature.2.rst
│       │   ├── 5007.feature.rst
│       │   ├── 5041.bugfix.rst
│       │   ├── 5057.feature.rst
│       │   ├── 5076.feature.rst
│       │   ├── 5090.feature.rst
│       │   ├── 5106.feature.rst
│       │   ├── 5114.feature.rst
│       │   ├── 5131.feature.rst
│       │   ├── 5162.change.rst
│       │   ├── 5163.feature.rst
│       │   ├── 5165.feature.1.rst
│       │   ├── 5165.feature.2.rst
│       │   ├── 5165.feature.rst
│       │   ├── 5179.change.rst
│       │   ├── 5179.feature.1.rst
│       │   ├── 5179.feature.rst
│       │   ├── 5181.feature.rst
│       │   ├── 5182.feature.rst
│       │   ├── 5205.feature.rst
│       │   ├── 5206.removal.rst
│       │   ├── 5207.change.rst
│       │   ├── 5220.feature.1.rst
│       │   ├── 5220.feature.rst
│       │   ├── 5222.feature.rst
│       │   ├── 5232.change.rst
│       │   ├── 5248.bugfix.rst
│       │   ├── 5258.change.rst
│       │   ├── 5263.change.rst
│       │   ├── 5293.feature.1.rst
│       │   ├── 5293.feature.rst
│       │   ├── 5306.bugfix.rst
│       │   ├── 5306.change.rst
│       │   ├── 5309.feature.rst
│       │   ├── 5357.feature.rst
│       │   ├── 5363.change.rst
│       │   ├── 5366.feature.rst
│       │   ├── 5380.feature.rst
│       │   ├── 5382.change.rst
│       │   ├── 5392.feature.rst
│       │   ├── 5395.removal.rst
│       │   ├── 5415.feature.rst
│       │   ├── 5439.bugfix.rst
│       │   ├── 5440.bugfix.rst
│       │   ├── 5450.feature.rst
│       │   ├── 5483.feature.rst
│       │   ├── 5506.feature.rst
│       │   ├── 5516.change.rst
│       │   ├── 5516.removal.1.rst
│       │   ├── 5516.removal.rst
│       │   └── README.rst
│       ├── platform_support.rst
│       ├── profiling.rst
│       ├── py-modindex.rst
│       ├── pytest.rst
│       ├── quickstart.rst
│       ├── refcard.rst
│       ├── regulator.rst
│       ├── release_notes.rst
│       ├── rescap.rst
│       ├── roadmap.rst
│       ├── rotating_logger.rst
│       ├── runner.rst
│       ├── simulator_support.rst
│       ├── spelling_wordlist.txt
│       ├── support.rst
│       ├── timing_model.rst
│       ├── troubleshooting.rst
│       ├── update_indexing.rst
│       ├── upgrade-2.0.rst
│       └── writing_testbenches.rst
├── examples/
│   ├── Makefile
│   ├── adder/
│   │   ├── hdl/
│   │   │   ├── adder.sv
│   │   │   └── adder.vhdl
│   │   ├── model/
│   │   │   ├── __init__.py
│   │   │   └── adder_model.py
│   │   └── tests/
│   │       ├── Makefile
│   │       └── test_adder.py
│   ├── analog_model/
│   │   ├── Makefile
│   │   ├── afe.py
│   │   ├── digital.sv
│   │   └── test_analog_model.py
│   ├── doc_examples/
│   │   └── quickstart/
│   │       ├── Makefile
│   │       ├── simple_counter.sv
│   │       ├── simple_counter_testcases.py
│   │       └── test_runner.py
│   ├── matrix_multiplier/
│   │   ├── hdl/
│   │   │   ├── matrix_multiplier.sv
│   │   │   ├── matrix_multiplier.vhd
│   │   │   └── matrix_multiplier_pkg.vhd
│   │   └── tests/
│   │       ├── Makefile
│   │       ├── matrix_multiplier_tests.py
│   │       └── test_matrix_multiplier.py
│   ├── mixed_language/
│   │   ├── hdl/
│   │   │   ├── endian_swapper.sv
│   │   │   ├── endian_swapper.vhdl
│   │   │   ├── toplevel.sv
│   │   │   └── toplevel.vhdl
│   │   └── tests/
│   │       ├── Makefile
│   │       └── test_mixed_language.py
│   ├── mixed_signal/
│   │   ├── .gitignore
│   │   ├── hdl/
│   │   │   ├── analog_probe_cadence.sv
│   │   │   ├── analog_probe_synopsys.sv
│   │   │   ├── capacitor.vams
│   │   │   ├── nettypes_pkg_cadence.sv
│   │   │   ├── nettypes_pkg_synopsys.sv
│   │   │   ├── regulator.sv
│   │   │   ├── regulator.vams
│   │   │   ├── regulator_block.vams
│   │   │   ├── rescap.sv
│   │   │   ├── resistor.vams
│   │   │   ├── tb_regulator.sv
│   │   │   └── tb_rescap.sv
│   │   └── tests/
│   │       ├── Makefile
│   │       ├── run.scs
│   │       ├── test_regulator_plot.py
│   │       ├── test_regulator_trim.py
│   │       ├── test_rescap.py
│   │       ├── test_rescap_minimalist.py
│   │       └── vcsAD.init
│   └── simple_dff/
│       ├── .gitignore
│       ├── Makefile
│       ├── dff.sv
│       ├── dff.vhdl
│       └── test_dff.py
├── noxfile.py
├── pyproject.toml
├── setup.py
├── src/
│   ├── cocotb/
│   │   ├── _ANSI.py
│   │   ├── __init__.py
│   │   ├── _base_triggers.py
│   │   ├── _bridge.py
│   │   ├── _concurrent_waiters.py
│   │   ├── _decorators.py
│   │   ├── _deprecation.py
│   │   ├── _event_loop.py
│   │   ├── _extended_awaitables.py
│   │   ├── _gpi_triggers.py
│   │   ├── _init.py
│   │   ├── _outcomes.py
│   │   ├── _profiling.py
│   │   ├── _py_compat.py
│   │   ├── _shutdown.py
│   │   ├── _task_manager.py
│   │   ├── _test_factory.py
│   │   ├── _test_manager.py
│   │   ├── _utils.py
│   │   ├── _vendor/
│   │   │   ├── README.md
│   │   │   ├── fli/
│   │   │   │   ├── acc_user.h
│   │   │   │   ├── acc_vhdl.h
│   │   │   │   └── mti.h
│   │   │   ├── tcl/
│   │   │   │   ├── license.terms
│   │   │   │   ├── tcl.h
│   │   │   │   ├── tclDecls.h
│   │   │   │   └── tclPlatDecls.h
│   │   │   ├── vhpi/
│   │   │   │   └── vhpi_user.h
│   │   │   └── vpi/
│   │   │       ├── sv_vpi_user.h
│   │   │       ├── vpi_compatibility.h
│   │   │       └── vpi_user.h
│   │   ├── _version.py
│   │   ├── _xunit_reporter.py
│   │   ├── clock.py
│   │   ├── debug.py
│   │   ├── handle.py
│   │   ├── logging.py
│   │   ├── py.typed
│   │   ├── queue.py
│   │   ├── regression.py
│   │   ├── result.py
│   │   ├── share/
│   │   │   ├── def/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── README.md
│   │   │   │   ├── aldec.def
│   │   │   │   ├── ghdl.def
│   │   │   │   ├── icarus.def
│   │   │   │   ├── modelsim.def
│   │   │   │   └── nvcvhpi.def
│   │   │   ├── include/
│   │   │   │   ├── exports.h
│   │   │   │   ├── gpi.h
│   │   │   │   ├── vhpi_user_ext.h
│   │   │   │   └── vpi_user_ext.h
│   │   │   └── lib/
│   │   │       ├── gpi/
│   │   │       │   ├── GpiCbHdl.cpp
│   │   │       │   ├── GpiCommon.cpp
│   │   │       │   ├── dynload.cpp
│   │   │       │   ├── fli/
│   │   │       │   │   ├── FliCbHdl.cpp
│   │   │       │   │   ├── FliImpl.cpp
│   │   │       │   │   ├── FliImpl.hpp
│   │   │       │   │   └── FliObjHdl.cpp
│   │   │       │   ├── gpi_priv.hpp
│   │   │       │   ├── logging.cpp
│   │   │       │   ├── logging.hpp
│   │   │       │   ├── vhpi/
│   │   │       │   │   ├── VhpiCbHdl.cpp
│   │   │       │   │   ├── VhpiImpl.cpp
│   │   │       │   │   ├── VhpiImpl.hpp
│   │   │       │   │   ├── VhpiIterator.cpp
│   │   │       │   │   ├── VhpiObj.cpp
│   │   │       │   │   └── VhpiSignal.cpp
│   │   │       │   └── vpi/
│   │   │       │       ├── VpiCbHdl.cpp
│   │   │       │       ├── VpiImpl.cpp
│   │   │       │       ├── VpiImpl.hpp
│   │   │       │       ├── VpiIterator.cpp
│   │   │       │       ├── VpiObj.cpp
│   │   │       │       └── VpiSignal.cpp
│   │   │       ├── pygpi/
│   │   │       │   ├── bind.cpp
│   │   │       │   ├── embed.cpp
│   │   │       │   ├── logging.cpp
│   │   │       │   └── pygpi_priv.hpp
│   │   │       ├── utils.hpp
│   │   │       └── verilator/
│   │   │           └── verilator.cpp
│   │   ├── simtime.py
│   │   ├── simulator.pyi
│   │   ├── task.py
│   │   ├── triggers.py
│   │   ├── types/
│   │   │   ├── __init__.py
│   │   │   ├── _abstract_array.py
│   │   │   ├── _array.py
│   │   │   ├── _indexing.py
│   │   │   ├── _logic.py
│   │   │   ├── _logic_array.py
│   │   │   ├── _range.py
│   │   │   └── _resolve.py
│   │   └── utils.py
│   ├── cocotb_tools/
│   │   ├── __init__.py
│   │   ├── _coverage.py
│   │   ├── _env.py
│   │   ├── _vendor/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   └── distutils_version.py
│   │   ├── check_results.py
│   │   ├── combine_results.py
│   │   ├── config.py
│   │   ├── ipython_support.py
│   │   ├── makefiles/
│   │   │   ├── Makefile.deprecations
│   │   │   ├── Makefile.inc
│   │   │   ├── Makefile.sim
│   │   │   └── simulators/
│   │   │       ├── Makefile.activehdl
│   │   │       ├── Makefile.cvc
│   │   │       ├── Makefile.dsim
│   │   │       ├── Makefile.ghdl
│   │   │       ├── Makefile.icarus
│   │   │       ├── Makefile.ius
│   │   │       ├── Makefile.modelsim
│   │   │       ├── Makefile.nvc
│   │   │       ├── Makefile.questa
│   │   │       ├── Makefile.questa-compat
│   │   │       ├── Makefile.questa-qisqrun
│   │   │       ├── Makefile.riviera
│   │   │       ├── Makefile.vcs
│   │   │       ├── Makefile.verilator
│   │   │       └── Makefile.xcelium
│   │   ├── py.typed
│   │   ├── pytest/
│   │   │   ├── __init__.py
│   │   │   ├── _compat.py
│   │   │   ├── _controller.py
│   │   │   ├── _fixture.py
│   │   │   ├── _handle.py
│   │   │   ├── _init.py
│   │   │   ├── _junitxml.py
│   │   │   ├── _logging.py
│   │   │   ├── _option.py
│   │   │   ├── _regression.py
│   │   │   ├── _runner.py
│   │   │   ├── _test.py
│   │   │   ├── _testbench.py
│   │   │   ├── hdl.py
│   │   │   ├── hookspecs.py
│   │   │   ├── mark.py
│   │   │   ├── plugin.py
│   │   │   └── py.typed
│   │   ├── runner.py
│   │   └── sim_versions.py
│   ├── pygpi/
│   │   ├── __init__.py
│   │   ├── entry.py
│   │   └── py.typed
│   └── pyproject.toml
└── tests/
    ├── Makefile
    ├── benchmarks/
    │   ├── test_matrix_multiplier.py
    │   └── test_parameterize_perf/
    │       ├── parametrize_perf_top.sv
    │       ├── parametrize_performance_tests.py
    │       └── test_parameterize_perf.py
    ├── designs/
    │   ├── array_module/
    │   │   ├── Makefile
    │   │   ├── array_module.sv
    │   │   ├── array_module.vhd
    │   │   └── array_module_pack.vhd
    │   ├── basic_hierarchy_module/
    │   │   ├── Makefile
    │   │   └── basic_hierarchy_module.v
    │   ├── multi_dimension_array/
    │   │   ├── Makefile
    │   │   ├── cocotb_array.sv
    │   │   └── cocotb_array_pkg.sv
    │   ├── plusargs_module/
    │   │   ├── Makefile
    │   │   ├── tb_top.v
    │   │   └── tb_top.vhd
    │   ├── runner/
    │   │   ├── runner.sv
    │   │   └── runner.vhdl
    │   ├── runner_defines/
    │   │   └── runner_defines.sv
    │   ├── sample_module/
    │   │   ├── Makefile
    │   │   ├── sample_module.sv
    │   │   ├── sample_module.vhdl
    │   │   ├── sample_module_1.sv
    │   │   ├── sample_module_1.vhdl
    │   │   └── sample_module_package.vhdl
    │   ├── uart2bus/
    │   │   ├── Makefile
    │   │   ├── README
    │   │   ├── top/
    │   │   │   ├── verilog_toplevel.sv
    │   │   │   └── vhdl_toplevel.vhdl
    │   │   ├── verilog/
    │   │   │   ├── baud_gen.v
    │   │   │   ├── uart2bus_top.v
    │   │   │   ├── uart_parser.v
    │   │   │   ├── uart_rx.v
    │   │   │   ├── uart_top.v
    │   │   │   └── uart_tx.v
    │   │   └── vhdl/
    │   │       ├── baudGen.vhd
    │   │       ├── uart2BusTop.vhd
    │   │       ├── uart2BusTop_pkg.vhd
    │   │       ├── uartParser.vhd
    │   │       ├── uartRx.vhd
    │   │       ├── uartTop.vhd
    │   │       └── uartTx.vhd
    │   ├── verilator_timing/
    │   │   ├── Makefile
    │   │   ├── README.md
    │   │   └── test_verilator_timing.sv
    │   ├── vhdl_configurations/
    │   │   ├── Makefile
    │   │   ├── configurations.vhd
    │   │   ├── dut.vhd
    │   │   ├── testbench.sv
    │   │   └── testbench.vhd
    │   └── viterbi_decoder_axi4s/
    │       ├── Makefile
    │       ├── gpl-2.0.txt
    │       ├── packages/
    │       │   ├── pkg_components.vhd
    │       │   ├── pkg_helper.vhd
    │       │   ├── pkg_param.vhd
    │       │   ├── pkg_param_derived.vhd
    │       │   ├── pkg_trellis.vhd
    │       │   └── pkg_types.vhd
    │       └── src/
    │           ├── acs.vhd
    │           ├── axi4s_buffer.vhd
    │           ├── branch_distance.vhd
    │           ├── dec_viterbi.vhd
    │           ├── generic_sp_ram.vhd
    │           ├── ram_ctrl.vhd
    │           ├── recursion.vhd
    │           ├── reorder.vhd
    │           └── traceback.vhd
    ├── pytest/
    │   ├── test_array.py
    │   ├── test_cocotb.py
    │   ├── test_env.py
    │   ├── test_logging_with_envs.py
    │   ├── test_logic.py
    │   ├── test_logic_array.py
    │   ├── test_logs.py
    │   ├── test_parallel_cocotb.py
    │   ├── test_parameterize.py
    │   ├── test_plusargs.py
    │   ├── test_range.py
    │   ├── test_runner.py
    │   ├── test_timescale.py
    │   ├── test_version.py
    │   ├── test_vhdl_libraries_multiple.py
    │   └── test_waves.py
    ├── pytest_plugin/
    │   ├── conftest.py
    │   ├── test_caplog.py
    │   ├── test_cocotb.py
    │   ├── test_cocotb_top.py
    │   ├── test_end_test.py
    │   ├── test_fixture.py
    │   ├── test_parametrize.py
    │   ├── test_sample_module.py
    │   ├── test_sample_module_1.py
    │   ├── test_sample_module_2.py
    │   ├── test_session.py
    │   ├── test_timeout.py
    │   └── test_xfail.py
    ├── sxs.ps1
    └── test_cases/
        ├── test_array/
        │   ├── Makefile
        │   └── test_array.py
        ├── test_array_simple/
        │   ├── Makefile
        │   └── test_array_simple.py
        ├── test_async_bridge/
        │   ├── Makefile
        │   └── test_async_bridge.py
        ├── test_cocotb/
        │   ├── Makefile
        │   ├── common.py
        │   ├── pytest_assertion_rewriting.py
        │   ├── test_async_coroutines.py
        │   ├── test_async_generators.py
        │   ├── test_ci.py
        │   ├── test_clock.py
        │   ├── test_deprecated.py
        │   ├── test_edge_triggers.py
        │   ├── test_first_combine.py
        │   ├── test_handle.py
        │   ├── test_logging.py
        │   ├── test_queues.py
        │   ├── test_scheduler.py
        │   ├── test_sim_time_utils.py
        │   ├── test_start_soon.py
        │   ├── test_synchronization_primitives.py
        │   ├── test_task_manager.py
        │   ├── test_testfactory.py
        │   ├── test_tests.py
        │   ├── test_timing_triggers.py
        │   └── test_waiters.py
        ├── test_compare/
        │   ├── Makefile
        │   └── test_compare.py
        ├── test_configuration/
        │   ├── Makefile
        │   └── test_configurations.py
        ├── test_custom_entry/
        │   ├── .gitignore
        │   ├── Makefile
        │   ├── custom_entry.py
        │   └── expected_results.log
        ├── test_deadlock/
        │   ├── Makefile
        │   └── test_deadlock.py
        ├── test_defaultless_parameter/
        │   ├── Makefile
        │   ├── test_defaultless_parameter.py
        │   └── test_defaultless_parameter.sv
        ├── test_discovery/
        │   ├── Makefile
        │   └── test_discovery.py
        ├── test_dumpfile_verilator/
        │   ├── Makefile
        │   ├── test_dumpfile_verilator.py
        │   └── test_dumpfile_verilator.sv
        ├── test_exit_error/
        │   ├── Makefile
        │   └── test_exit.py
        ├── test_failure/
        │   ├── Makefile
        │   └── test_failure.py
        ├── test_fatal/
        │   ├── Makefile
        │   ├── fatal.sv
        │   ├── fatal.vhd
        │   └── test_fatal.py
        ├── test_first_on_coincident_triggers/
        │   ├── Makefile
        │   ├── test.sv
        │   ├── test.vhd
        │   └── test_first_on_coincident_triggers.py
        ├── test_force_release/
        │   ├── Makefile
        │   └── test_force_release.py
        ├── test_forked_exception/
        │   ├── Makefile
        │   └── test_forked_exception.py
        ├── test_gpi_extra_bad_lib/
        │   ├── Makefile
        │   └── test_simple.py
        ├── test_gpi_users_bad_lib/
        │   ├── Makefile
        │   └── test_simple.py
        ├── test_gpi_users_notset/
        │   ├── Makefile
        │   └── test_simple.py
        ├── test_indexing_warning/
        │   ├── Makefile
        │   ├── indexing_warning_tests.py
        │   ├── test_indexing_warning.py
        │   └── top.sv
        ├── test_inertial_writes/
        │   ├── Makefile
        │   └── inertial_writes_tests.py
        ├── test_integers/
        │   ├── Makefile
        │   ├── integer_tests.py
        │   ├── integers.sv
        │   ├── integers.vhdl
        │   ├── integers_pkg.vhdl
        │   └── test_integers.py
        ├── test_iteration_mixedlang/
        │   ├── Makefile
        │   └── test_iteration.py
        ├── test_iteration_verilog/
        │   ├── Makefile
        │   ├── endian_swapper.sv
        │   └── test_iteration_es.py
        ├── test_iteration_vhdl/
        │   ├── Makefile
        │   └── test_iteration.py
        ├── test_kill_sim/
        │   ├── Makefile
        │   └── kill_sim_tests.py
        ├── test_listing/
        │   ├── .gitignore
        │   ├── Makefile
        │   ├── check_results.py
        │   ├── test_listing_1.py
        │   └── test_listing_2.py
        ├── test_log_prefix/
        │   ├── Makefile
        │   ├── log_prefix_tests.py
        │   ├── test_log_prefix.py
        │   └── top.sv
        ├── test_logic_array_indexing/
        │   ├── Makefile
        │   ├── test_logic_array_indexing.py
        │   ├── test_logic_array_indexing.v
        │   └── test_logic_array_indexing.vhdl
        ├── test_long_log_msg/
        │   ├── .gitignore
        │   ├── Makefile
        │   ├── test.sv
        │   ├── test.vhd
        │   └── test_long_log_msg.py
        ├── test_max_failures/
        │   ├── Makefile
        │   └── test_max_failures.py
        ├── test_module_var_empty/
        │   └── Makefile
        ├── test_module_var_messy/
        │   ├── Makefile
        │   └── test_nothing.py
        ├── test_module_without_tests/
        │   ├── Makefile
        │   └── test_nothing.py
        ├── test_multi_dimension_array/
        │   ├── Makefile
        │   └── test_cocotb_array.py
        ├── test_multi_level_module_path/
        │   ├── Makefile
        │   ├── __init__.py
        │   └── test_package/
        │       ├── __init__.py
        │       └── test_module_path.py
        ├── test_null_ranges/
        │   ├── Makefile
        │   ├── null_ranges.vhdl
        │   ├── null_ranges_pkg.vhdl
        │   └── test_null_ranges.py
        ├── test_one_empty_test/
        │   ├── Makefile
        │   └── test_one_empty_test.py
        ├── test_package/
        │   ├── Makefile
        │   ├── cocotb_package.sv
        │   ├── cocotb_package_pkg.sv
        │   └── test_package.py
        ├── test_packed_union/
        │   ├── Makefile
        │   ├── test_packed_union.py
        │   └── test_packed_union.sv
        ├── test_plusargs/
        │   ├── Makefile
        │   └── plusargs.py
        ├── test_random_test_order/
        │   ├── Makefile
        │   └── test_random_test_order.py
        ├── test_seed/
        │   ├── .gitignore
        │   ├── Makefile
        │   ├── test_other.py
        │   └── test_seed.py
        ├── test_select_testcase/
        │   ├── Makefile
        │   ├── x_tests.py
        │   ├── y_tests.py
        │   └── y_tests_again.py
        ├── test_select_testcase_error/
        │   ├── Makefile
        │   └── x_tests.py
        ├── test_similar_scope_name/
        │   ├── Makefile
        │   ├── test.sv
        │   ├── test.vhd
        │   └── test_similar_scope_name.py
        ├── test_skip/
        │   ├── Makefile
        │   └── test_skip.py
        ├── test_skipped_explicitly_run/
        │   ├── Makefile
        │   └── test_skipped_explicitly_run.py
        ├── test_struct/
        │   ├── Makefile
        │   └── test_struct.py
        ├── test_sv_interface/
        │   ├── Makefile
        │   ├── test_sv_if.py
        │   └── top.sv
        ├── test_test_filter/
        │   ├── Makefile
        │   └── x_tests.py
        ├── test_toplevel_architecture_same_as_entity/
        │   ├── Makefile
        │   ├── test.vhdl
        │   └── test_toplevel_architecture_same_as_entity.py
        ├── test_toplevel_library/
        │   ├── Makefile
        │   ├── mylib.vhd
        │   └── test_myentity.py
        ├── test_verilator_timing_a/
        │   ├── Makefile
        │   └── test_verilator_timing_a.py
        ├── test_verilator_timing_b/
        │   ├── Makefile
        │   └── test_verilator_timing_b.py
        ├── test_verilator_timing_c/
        │   ├── Makefile
        │   ├── check_version
        │   └── test_verilator_timing_c.py
        ├── test_verilator_timing_d/
        │   ├── Makefile
        │   └── test_verilator_timing_d.py
        ├── test_verilog_access/
        │   ├── Makefile
        │   └── test_verilog_access.py
        ├── test_verilog_include_dirs/
        │   ├── Makefile
        │   ├── common/
        │   │   ├── a.vh
        │   │   └── b.vh
        │   ├── const_stream/
        │   │   └── c.vh
        │   ├── simple_and.sv
        │   └── test_verilog_include_dirs.py
        ├── test_vhdl_access/
        │   ├── Makefile
        │   └── test_vhdl_access.py
        ├── test_vhdl_integer/
        │   ├── Makefile
        │   ├── test_vhdl_integer.py
        │   └── vhdl_integer.vhdl
        ├── test_vhdl_libraries/
        │   ├── Makefile
        │   ├── a.vhdl
        │   ├── b.vhdl
        │   └── test_ab.py
        ├── test_vhdl_libraries_multiple/
        │   ├── Makefile
        │   ├── a.vhdl
        │   ├── b.vhdl
        │   ├── c.vhdl
        │   ├── d.vhdl
        │   ├── e.vhdl
        │   └── test_abcde.py
        └── test_xfail/
            ├── Makefile
            └── test_xfail.py
Download .txt
Showing preview only (230K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2742 symbols across 235 files)

FILE: .github/generate-envs.py
  function append_str_val (line 534) | def append_str_val(listref, my_list, key) -> None:
  function main (line 540) | def main() -> int:

FILE: cocotb_build_libs.py
  function create_sxs_assembly_manifest (line 53) | def create_sxs_assembly_manifest(
  function create_sxs_appconfig (line 116) | def create_sxs_appconfig(filename):
  function create_rc_file (line 144) | def create_rc_file(rc_filename, name, filename, libraries, runtime_libra...
  function _get_lib_ext_name (line 199) | def _get_lib_ext_name():
  class build_ext (line 210) | class build_ext(_build_ext):
    method _uses_msvc (line 211) | def _uses_msvc(self):
    method run (line 219) | def run(self):
    method build_extensions (line 227) | def build_extensions(self):
    method build_extension (line 280) | def build_extension(self, ext):
    method get_export_symbols (line 336) | def get_export_symbols(self, ext):
    method get_ext_filename (line 340) | def get_ext_filename(self, ext_name):
    method finalize_options (line 367) | def finalize_options(self):
    method copy_extensions_to_source (line 375) | def copy_extensions_to_source(self):
    method _gen_import_libs (line 395) | def _gen_import_libs(self, def_dir):
  function _get_python_lib_link (line 425) | def _get_python_lib_link():
  function _get_python_lib (line 442) | def _get_python_lib():
  function _get_common_lib_ext (line 461) | def _get_common_lib_ext(include_dirs, share_lib_dir):
  function _get_vpi_lib_ext (line 524) | def _get_vpi_lib_ext(
  function _get_vhpi_lib_ext (line 549) | def _get_vhpi_lib_ext(
  function get_ext (line 574) | def get_ext():

FILE: docs/source/conf.py
  function block_gpi_links (line 445) | def block_gpi_links(app, env, node, contnode):
  function setup (line 454) | def setup(app):

FILE: examples/adder/model/adder_model.py
  function adder_model (line 6) | def adder_model(a: int, b: int) -> int:

FILE: examples/adder/tests/test_adder.py
  function adder_basic_test (line 20) | async def adder_basic_test(dut):
  function adder_randomised_test (line 37) | async def adder_randomised_test(dut):
  function test_adder_runner (line 54) | def test_adder_runner():

FILE: examples/analog_model/afe.py
  class PGA (line 18) | class PGA:
    method __init__ (line 25) | def __init__(
    method gain (line 38) | def gain(self) -> float:
    method gain (line 42) | def gain(self, val: float) -> None:
    method run (line 45) | async def run(self) -> None:
  class ADC (line 52) | class ADC:
    method __init__ (line 59) | def __init__(
    method run (line 74) | async def run(self) -> None:
  class AFE (line 86) | class AFE:
    method __init__ (line 93) | def __init__(

FILE: examples/analog_model/test_analog_model.py
  function gain_select (line 22) | async def gain_select(digital, afe) -> None:
  function test_analog_model (line 34) | async def test_analog_model(digital) -> None:

FILE: examples/doc_examples/quickstart/simple_counter_testcases.py
  function quickstart_1 (line 18) | async def quickstart_1(dut):
  function reset_and_start_clock (line 63) | async def reset_and_start_clock(reset, clock, cycles=10):
  function enable_counter (line 82) | async def enable_counter(dut, cycles=10):
  function check_counter (line 100) | async def check_counter(dut, start_value):
  function quickstart_2 (line 123) | async def quickstart_2(dut):
  function quickstart_3 (line 162) | async def quickstart_3(dut):

FILE: examples/doc_examples/quickstart/test_runner.py
  function test_simple_counter (line 15) | def test_simple_counter():

FILE: examples/matrix_multiplier/tests/matrix_multiplier_tests.py
  class Mailbox (line 29) | class Mailbox(Generic[T]):
    method __init__ (line 32) | def __init__(self) -> None:
    method put (line 36) | def put(self, item: T) -> None:
    method get (line 41) | def get(self) -> T:
    method wait (line 48) | def wait(self) -> Trigger:
    method empty (line 54) | def empty(self) -> bool:
  class DataValidMonitor (line 59) | class DataValidMonitor(Generic[T]):
    method __init__ (line 74) | def __init__(
    method add_callback (line 91) | def add_callback(self, callback: Callable[[dict], Any]) -> None:
    method start (line 95) | def start(self) -> None:
    method stop (line 101) | def stop(self) -> None:
    method _run (line 108) | async def _run(self) -> None:
    method _sample (line 128) | def _sample(self) -> dict[str, T]:
  class DataValidDriver (line 133) | class DataValidDriver(Generic[T]):
    method __init__ (line 136) | def __init__(
    method send (line 155) | def send(self, data: dict[str, T]) -> Trigger:
    method start (line 169) | def start(self) -> None:
    method stop (line 175) | def stop(self) -> None:
    method _run (line 182) | async def _run(self) -> None:
    method _apply (line 210) | def _apply(self, data: dict[str, T]) -> None:
  class MatrixMultiplierModel (line 216) | class MatrixMultiplierModel:
    method __init__ (line 219) | def __init__(
    method add_output_callback (line 242) | def add_output_callback(self, callback: Callable[[list[LogicArray]], N...
    method send_input (line 246) | def send_input(
  class CompareFunc (line 273) | class CompareFunc(Protocol[T_contra]):
    method __call__ (line 279) | def __call__(self, *, expected: T_contra, actual: T_contra) -> bool:
  class InOrderChecker (line 283) | class InOrderChecker(Generic[T]):
    method __init__ (line 291) | def __init__(
    method addExpected (line 304) | def addExpected(self, expected: T) -> None:
    method addActual (line 309) | def addActual(self, actual: T) -> None:
  class MatrixMultiplierTestbench (line 324) | class MatrixMultiplierTestbench:
    method __init__ (line 332) | def __init__(self, dut: Any, name: str | None = None) -> None:
    method create_a_matrix (line 394) | def create_a_matrix(self, func: Callable[[], int]) -> list[LogicArray]:
    method create_b_matrix (line 405) | def create_b_matrix(self, func: Callable[[], int]) -> list[LogicArray]:
    method start (line 416) | def start(self) -> None:
    method stop (line 423) | def stop(self) -> None:
    method reset (line 430) | async def reset(self, cycles: int = 3) -> None:
  function test_random (line 439) | async def test_random(dut: Any) -> None:

FILE: examples/matrix_multiplier/tests/test_matrix_multiplier.py
  function test_matrix_multiplier_runner (line 18) | def test_matrix_multiplier_runner():

FILE: examples/mixed_language/tests/test_mixed_language.py
  function mixed_language_accessing_test (line 30) | async def mixed_language_accessing_test(dut):
  function mixed_language_functional_test (line 67) | async def mixed_language_functional_test(dut):
  function test_mixed_language_runner (line 131) | def test_mixed_language_runner():

FILE: examples/mixed_signal/tests/test_regulator_plot.py
  function test_trim_vals (line 14) | async def test_trim_vals(tb_hdl):
  function get_voltage (line 37) | async def get_voltage(tb_hdl, node):
  function plot_data (line 51) | def plot_data(tb_hdl, datasets, graphfile="cocotb_plot.png"):

FILE: examples/mixed_signal/tests/test_regulator_trim.py
  class Regulator_TB (line 11) | class Regulator_TB:
    method __init__ (line 20) | def __init__(self, tb_hdl, settling_time_ns=1):
    method get_voltage (line 30) | async def get_voltage(self, node):
    method find_trim_val (line 47) | async def find_trim_val(self, probed_node, target_volt, trim_val_node):
  function run_test (line 91) | async def run_test(tb_hdl):

FILE: examples/mixed_signal/tests/test_rescap.py
  class ResCap_TB (line 17) | class ResCap_TB:
    method __init__ (line 20) | def __init__(self, tb_hdl):
    method _get_single_sample (line 27) | async def _get_single_sample(self, node):
    method get_sample_data (line 49) | async def get_sample_data(self, nodes, num=1, delay_ns=1):
    method plot_data (line 68) | def plot_data(self, datasets, nodes, graphfile="cocotb_plot.png"):
  function run_test (line 127) | async def run_test(tb_hdl):
  function mpl_align_yaxis (line 155) | def mpl_align_yaxis(ax1, v1, ax2, v2):
  function mpl_adjust_yaxis (line 163) | def mpl_adjust_yaxis(ax, ydif, v):

FILE: examples/mixed_signal/tests/test_rescap_minimalist.py
  function rescap_minimalist_test (line 10) | async def rescap_minimalist_test(tb_hdl):

FILE: examples/simple_dff/test_dff.py
  function dff_simple_test (line 18) | async def dff_simple_test(dut):
  function test_simple_dff_runner (line 45) | def test_simple_dff_runner():

FILE: noxfile.py
  function simulator_support_matrix (line 26) | def simulator_support_matrix() -> list[tuple[str, str, str]]:
  function env_vars_for_sim_test (line 52) | def env_vars_for_sim_test(
  function configure_test_env (line 68) | def configure_test_env(session: nox.Session) -> None:
  function stringify_dict (line 82) | def stringify_dict(d: dict[str, str]) -> str:
  function build_cocotb_for_dev_test (line 99) | def build_cocotb_for_dev_test(session: nox.Session) -> None:
  function dev_test (line 137) | def dev_test(
  function dev_test_sim (line 153) | def dev_test_sim(
  function dev_test_nosim (line 270) | def dev_test_nosim(session: nox.Session) -> None:
  function dev_coverage_combine (line 302) | def dev_coverage_combine(session: nox.Session) -> None:
  function dev_coverage_report (line 317) | def dev_coverage_report(session: nox.Session) -> None:
  function release_clean (line 386) | def release_clean(session: nox.Session) -> None:
  function release_build_wheel (line 396) | def release_build_wheel(session: nox.Session) -> None:
  function release_build_sdist (line 414) | def release_build_sdist(session: nox.Session) -> None:
  function release_build (line 428) | def release_build(session: nox.Session) -> None:
  function release_install_from_sdist (line 434) | def release_install_from_sdist(session: nox.Session) -> None:
  function release_test (line 462) | def release_test(
  function release_install_from_wheel (line 478) | def release_install_from_wheel(session: nox.Session) -> None:
  function release_test_sim (line 502) | def release_test_sim(
  function release_test_nosim (line 522) | def release_test_nosim(session: nox.Session) -> None:
  function docs (line 545) | def docs(session: nox.Session) -> None:
  function docs_preview (line 565) | def docs_preview(session: nox.Session) -> None:
  function docs_linkcheck (line 598) | def docs_linkcheck(session: nox.Session) -> None:
  function docs_spelling (line 616) | def docs_spelling(session: nox.Session) -> None:

FILE: setup.py
  function package_files (line 40) | def package_files(directory):

FILE: src/cocotb/_ANSI.py
  class ANSI (line 13) | class ANSI(StrEnum):

FILE: src/cocotb/_base_triggers.py
  class TriggerCallback (line 28) | class TriggerCallback:
    method __init__ (line 33) | def __init__(
    method cancel (line 41) | def cancel(self) -> None:
    method _run (line 44) | def _run(self) -> None:
    method __repr__ (line 47) | def __repr__(self) -> str:
  class Trigger (line 51) | class Trigger:
    method __init__ (line 54) | def __init__(self) -> None:
    method _log (line 58) | def _log(self) -> logging.Logger:
    method _register (line 61) | def _register(self, func: Callable[[], object]) -> TriggerCallback:
    method _deregister (line 75) | def _deregister(self, callback: TriggerCallback) -> None:
    method _do_callbacks (line 83) | def _do_callbacks(self) -> None:
    method _react (line 90) | def _react(self) -> None:
    method _prime (line 101) | def _prime(self) -> None:
    method _unprime (line 108) | def _unprime(self) -> None:
    method __await__ (line 111) | def __await__(self) -> Generator[Self, None, Self]:
  class _Event (line 116) | class _Event(Trigger):
    method __init__ (line 125) | def __init__(self, parent: Event) -> None:
    method _prime (line 129) | def _prime(self) -> None:
    method _unprime (line 135) | def _unprime(self) -> None:
    method __repr__ (line 138) | def __repr__(self) -> str:
  class Event (line 142) | class Event:
    method __init__ (line 174) | def __init__(self, name: str | None = None) -> None:
    method name (line 189) | def name(self) -> str | None:
    method name (line 199) | def name(self, new_name: str | None) -> None:
    method data (line 204) | def data(self) -> object:
    method data (line 215) | def data(self, new_data: object) -> None:
    method set (line 218) | def set(self, data: object | None = None) -> None:
    method wait (line 230) | def wait(self) -> Trigger:
    method clear (line 241) | def clear(self) -> None:
    method is_set (line 249) | def is_set(self) -> bool:
    method __repr__ (line 253) | def __repr__(self) -> str:
  class _InternalEvent (line 261) | class _InternalEvent(Trigger):
    method __init__ (line 270) | def __init__(self, parent: object) -> None:
    method _prime (line 276) | def _prime(self) -> None:
    method _unprime (line 282) | def _unprime(self) -> None:
    method set (line 285) | def set(self) -> None:
    method is_set (line 290) | def is_set(self) -> bool:
    method __await__ (line 294) | def __await__(
    method __repr__ (line 302) | def __repr__(self) -> str:
  class _Lock (line 306) | class _Lock(Trigger):
    method __init__ (line 313) | def __init__(self, parent: Lock) -> None:
    method _prime (line 317) | def _prime(self) -> None:
    method _unprime (line 320) | def _unprime(self) -> None:
    method __await__ (line 323) | def __await__(self) -> Generator[Self, None, Self]:
    method __repr__ (line 330) | def __repr__(self) -> str:
  class Lock (line 334) | class Lock(AbstractAsyncContextManager[None]):
    method __init__ (line 368) | def __init__(self, name: str | None = None) -> None:
    method name (line 382) | def name(self) -> str | None:
    method name (line 392) | def name(self, new_name: str | None) -> None:
    method locked (line 395) | def locked(self) -> bool:
    method _acquire_and_fire (line 403) | def _acquire_and_fire(self, lock: _Lock) -> None:
    method _prime_lock (line 407) | def _prime_lock(self, lock: _Lock) -> None:
    method _unprime_lock (line 413) | def _unprime_lock(self, lock: _Lock) -> None:
    method _is_used (line 417) | def _is_used(self, lock: _Lock) -> bool:
    method acquire (line 420) | def acquire(self) -> Trigger:
    method release (line 424) | def release(self) -> None:
    method __repr__ (line 438) | def __repr__(self) -> str:
    method __aenter__ (line 450) | async def __aenter__(self) -> None:
    method __aexit__ (line 453) | async def __aexit__(self, *args: object) -> None:
  class NullTrigger (line 457) | class NullTrigger(Trigger):
    method __init__ (line 525) | def __init__(self, name: str | None = None) -> None:
    method _prime (line 529) | def _prime(self) -> None:
    method _unprime (line 532) | def _unprime(self) -> None:
    method __repr__ (line 535) | def __repr__(self) -> str:

FILE: src/cocotb/_bridge.py
  function resume (line 33) | def resume(
  function bridge (line 71) | def bridge(
  class external_state (line 111) | class external_state(IntEnum):
  class external_waiter (line 118) | class external_waiter(Generic[Result]):
    method __init__ (line 119) | def __init__(self) -> None:
    method result (line 128) | def result(self) -> Result:
    method _propagate_state (line 133) | def _propagate_state(self, new_state: external_state) -> None:
    method thread_done (line 142) | def thread_done(self) -> None:
    method thread_suspend (line 147) | def thread_suspend(self) -> None:
    method thread_start (line 150) | def thread_start(self) -> None:
    method thread_resume (line 158) | def thread_resume(self) -> None:
    method thread_wait (line 161) | def thread_wait(self) -> external_state:
  function queue_function (line 192) | def queue_function(task: Coroutine[Trigger, None, Result]) -> Result:
  function run_in_executor (line 240) | def run_in_executor(
  function run_bridge_threads (line 273) | def run_bridge_threads() -> None:

FILE: src/cocotb/_concurrent_waiters.py
  function wait (line 32) | async def wait(
  function wait (line 41) | async def wait(
  function wait (line 51) | async def wait(
  function wait (line 62) | async def wait(
  function wait (line 74) | async def wait(
  function wait (line 79) | async def wait(
  function select (line 177) | async def select(
  function select (line 183) | async def select(
  function select (line 188) | async def select(
  function gather (line 232) | async def gather(
  function gather (line 241) | async def gather(
  function gather (line 251) | async def gather(
  function gather (line 262) | async def gather(
  function gather (line 274) | async def gather(
  function gather (line 280) | async def gather(
  function gather (line 285) | async def gather(

FILE: src/cocotb/_decorators.py
  class Test (line 24) | class Test:
    method __init__ (line 70) | def __init__(
    method fullname (line 102) | def fullname(self) -> str:
  class TestGenerator (line 109) | class TestGenerator:
    method __init__ (line 110) | def __init__(
    method generate_tests (line 133) | def generate_tests(self) -> Iterable[Test]:
  function _reprs (line 192) | def _reprs(values: Sequence[object]) -> list[str]:
  function _repr (line 204) | def _repr(v: object) -> str | None:
  function test (line 223) | def test(obj: TestFuncType | TestGenerator) -> TestGenerator: ...
  function test (line 227) | def test(
  function test (line 239) | def test(
  function parametrize (line 391) | def parametrize(
  function parametrize (line 398) | def parametrize(
  function parametrize (line 403) | def parametrize(
  function skipif (line 510) | def skipif(
  function xfail (line 558) | def xfail(

FILE: src/cocotb/_deprecation.py
  function deprecated (line 22) | def deprecated(

FILE: src/cocotb/_event_loop.py
  class ScheduledCallback (line 15) | class ScheduledCallback:
    method __init__ (line 18) | def __init__(
    method _run (line 25) | def _run(self) -> None:
    method cancel (line 28) | def cancel(self) -> None:
    method __repr__ (line 31) | def __repr__(self) -> str:
  class EventLoop (line 35) | class EventLoop:
    method __init__ (line 36) | def __init__(self) -> None:
    method log (line 41) | def log(self) -> logging.Logger:
    method run (line 44) | def run(self) -> None:
    method schedule (line 66) | def schedule(self, func: Callable[[], object]) -> ScheduledCallback:

FILE: src/cocotb/_extended_awaitables.py
  class Waitable (line 28) | class Waitable(Awaitable[T]):
    method _wait (line 35) | async def _wait(self) -> T:
    method __await__ (line 38) | def __await__(self) -> Generator[Trigger, None, T]:
  function _wait_callback (line 42) | async def _wait_callback(trigger: Awaitable[T]) -> T:
  class Combine (line 46) | class Combine(Waitable["Combine"]):
    method __init__ (line 70) | def __init__(self, *triggers: Trigger | Waitable[Any]) -> None: ...
    method __init__ (line 74) | def __init__(self, *triggers: Trigger | Waitable[Any] | Task[Any]) -> ...
    method __init__ (line 76) | def __init__(self, *triggers: Trigger | Waitable[Any] | Task[Any]) -> ...
    method _wait (line 91) | async def _wait(self) -> Combine:
    method __repr__ (line 141) | def __repr__(self) -> str:
  class First (line 150) | class First(Waitable[object]):
    method __init__ (line 190) | def __init__(
    method __init__ (line 196) | def __init__(
    method __init__ (line 203) | def __init__(self, *triggers: Trigger | Waitable[Any] | Task[Any]) -> ...
    method _wait (line 221) | async def _wait(self) -> object:
    method __repr__ (line 250) | def __repr__(self) -> str:
  class ClockCycles (line 259) | class ClockCycles(Waitable["ClockCycles"]):
    method __init__ (line 280) | def __init__(
    method __init__ (line 287) | def __init__(
    method __init__ (line 298) | def __init__(
    method __init__ (line 302) | def __init__(
    method signal (line 332) | def signal(self) -> cocotb.handle.LogicObject:
    method num_cycles (line 337) | def num_cycles(self) -> int:
    method edge_type (line 342) | def edge_type(
    method _wait (line 348) | async def _wait(self) -> ClockCycles:
    method __repr__ (line 354) | def __repr__(self) -> str:
  class SimTimeoutError (line 358) | class SimTimeoutError(TimeoutError):
  function with_timeout (line 362) | async def with_timeout(

FILE: src/cocotb/_gpi_triggers.py
  class GPITrigger (line 33) | class GPITrigger(Trigger):
    method __init__ (line 36) | def __init__(self) -> None:
    method _react (line 40) | def _react(self) -> None:
    method _unprime (line 51) | def _unprime(self) -> None:
  class Timer (line 57) | class Timer(GPITrigger):
    method __init__ (line 133) | def __init__(
    method _prime (line 159) | def _prime(self) -> None:
    method __repr__ (line 164) | def __repr__(self) -> str:
  class ReadOnly (line 173) | class ReadOnly(GPITrigger):
    method _prime (line 182) | def _prime(self) -> None:
    method __await__ (line 187) | def __await__(self) -> Generator[Self, None, Self]:
    method __repr__ (line 194) | def __repr__(self) -> str:
  class ReadWrite (line 199) | class ReadWrite(GPITrigger):
    method _prime (line 202) | def _prime(self) -> None:
    method _do_callbacks (line 207) | def _do_callbacks(self) -> None:
    method __await__ (line 213) | def __await__(self) -> Generator[Self, None, Self]:
    method __repr__ (line 220) | def __repr__(self) -> str:
  class NextTimeStep (line 225) | class NextTimeStep(GPITrigger):
    method _prime (line 228) | def _prime(self) -> None:
    method __repr__ (line 233) | def __repr__(self) -> str:
  class _EdgeBase (line 240) | class _EdgeBase(GPITrigger, Generic[_SignalType]):
    method _make (line 247) | def _make(cls, signal: _SignalType) -> Self:
    method __init__ (line 253) | def __init__(self, _: _SignalType) -> None:
    method _prime (line 256) | def _prime(self) -> None:
    method __repr__ (line 263) | def __repr__(self) -> str:
  class RisingEdge (line 267) | class RisingEdge(
    method __new__ (line 290) | def __new__(cls, signal: cocotb.handle.LogicObject) -> RisingEdge:
  class FallingEdge (line 300) | class FallingEdge(
    method __new__ (line 323) | def __new__(cls, signal: cocotb.handle.LogicObject) -> FallingEdge:
  class ValueChange (line 333) | class ValueChange(_EdgeBase["cocotb.handle._NonIndexableValueObjectBase[...
    method __new__ (line 350) | def __new__(
  class Edge (line 361) | class Edge(ValueChange):
    method __new__ (line 376) | def __new__(
  function current_gpi_trigger (line 391) | def current_gpi_trigger() -> GPITrigger:

FILE: src/cocotb/_init.py
  function init_package_from_simulation (line 30) | def init_package_from_simulation() -> None:
  function _process_plusargs (line 65) | def _process_plusargs() -> None:
  function _process_packages (line 77) | def _process_packages() -> None:
  function _get_package_path (line 103) | def _get_package_path(pkg: str) -> Path:
  function _start_user_coverage (line 111) | def _start_user_coverage() -> None:
  function _setup_random_seed (line 167) | def _setup_random_seed() -> None:
  function _setup_root_handle (line 201) | def _setup_root_handle() -> None:

FILE: src/cocotb/_outcomes.py
  function capture (line 24) | def capture(fn: Callable[P, T], *args: P.args, **kwargs: P.kwargs) -> Ou...
  class Outcome (line 33) | class Outcome(Generic[T]):
    method get (line 35) | def get(self) -> T:
  class Value (line 39) | class Value(Outcome[T]):
    method __init__ (line 40) | def __init__(self, value: T):
    method get (line 43) | def get(self) -> T:
    method __repr__ (line 46) | def __repr__(self) -> str:
  class Error (line 50) | class Error(Outcome[T]):
    method __init__ (line 51) | def __init__(self, error: BaseException) -> None:
    method get (line 54) | def get(self) -> T:
    method __repr__ (line 57) | def __repr__(self) -> str:

FILE: src/cocotb/_profiling.py
  function _init (line 22) | def _init() -> None:
  class _profiling_context (line 32) | class _profiling_context(AbstractContextManager[None, None]):
    method __enter__ (line 35) | def __enter__(self) -> None:
    method __exit__ (line 38) | def __exit__(self, *excinfo: object) -> None:
  function _init (line 45) | def _init() -> None:

FILE: src/cocotb/_py_compat.py
  class StrEnum (line 22) | class StrEnum(str, Enum):
    method __str__ (line 23) | def __str__(self) -> str:

FILE: src/cocotb/_shutdown.py
  function register (line 12) | def register(cb: Callable[[], None]) -> None:
  function _shutdown (line 17) | def _shutdown() -> None:
  function _init (line 24) | def _init() -> None:

FILE: src/cocotb/_task_manager.py
  function _waiter (line 34) | async def _waiter(aw: Awaitable[T]) -> T:
  class TaskManager (line 38) | class TaskManager:
    method __init__ (line 52) | def __init__(
    method _ensure_can_add (line 78) | def _ensure_can_add(self) -> None:
    method start_soon (line 90) | def start_soon(
    method fork (line 125) | def fork(
    method fork (line 132) | def fork(
    method fork (line 136) | def fork(
    method _add_task (line 194) | def _add_task(
    method _done_callback (line 210) | def _done_callback(self, task: Task[Any]) -> None:
    method _cancel (line 222) | def _cancel(self) -> None:
    method __aenter__ (line 237) | async def __aenter__(self) -> Self:
    method __aexit__ (line 244) | async def __aexit__(

FILE: src/cocotb/_test_factory.py
  class TestFactory (line 19) | class TestFactory:
    method __init__ (line 83) | def __init__(
    method add_option (line 104) | def add_option(self, name: str, optionlist: Sequence[object]) -> None:...
    method add_option (line 107) | def add_option(
    method add_option (line 111) | def add_option(
    method generate_tests (line 140) | def generate_tests(

FILE: src/cocotb/_test_manager.py
  class TestManager (line 32) | class TestManager:
    method __init__ (line 44) | def __init__(
    method _test_done_callback (line 64) | def _test_done_callback(self, task: Task[None]) -> None:
    method start (line 82) | def start(self) -> None:
    method _on_timeout (line 98) | def _on_timeout(self) -> None:
    method exception (line 102) | def exception(self) -> BaseException | None:
    method result (line 110) | def result(self) -> None:
    method done (line 115) | def done(self) -> bool:
    method cancel (line 119) | def cancel(self, msg: str | None = None) -> None:
    method _abort (line 127) | def _abort(self, exc: BaseException | None = None) -> None:
    method _on_complete (line 158) | def _on_complete(self) -> None:
    method add_task (line 168) | def add_task(self, task: Task[Any]) -> None:
    method remove_task (line 173) | def remove_task(self, task: Task[Any]) -> None:
    method _task_done_callback (line 178) | def _task_done_callback(self, task: Task[Any]) -> None:
  function start_soon (line 198) | def start_soon(
  function start (line 227) | async def start(
  function create_task (line 274) | def create_task(
  class TestSuccess (line 312) | class TestSuccess(BaseException):
    method __init__ (line 318) | def __init__(self, msg: str | None) -> None:
  function pass_test (line 326) | def pass_test(msg: str | None = None) -> NoReturn:
  class EndTest (line 347) | class EndTest(BaseException):
    method __init__ (line 353) | def __init__(self, msg: str | None) -> None:
  function end_test (line 358) | def end_test(msg: str | None = None) -> NoReturn:

FILE: src/cocotb/_utils.py
  function remove_traceback_frames (line 32) | def remove_traceback_frames(
  function remove_traceback_frames (line 38) | def remove_traceback_frames(
  function remove_traceback_frames (line 44) | def remove_traceback_frames(
  function remove_traceback_frames (line 49) | def remove_traceback_frames(
  function walk_coro_stack (line 90) | def walk_coro_stack(
  function extract_coro_stack (line 113) | def extract_coro_stack(
  class DocEnum (line 141) | class DocEnum(Enum):
    method __new__ (line 160) | def __new__(cls: type[EnumT], value: object, doc: str | None = None) -...
  class DocIntEnum (line 173) | class DocIntEnum(IntEnum):
    method __new__ (line 176) | def __new__(cls: type[IntEnumT], value: int, doc: str | None = None) -...
  function singleton (line 187) | def singleton(orig_cls: type[T]) -> type[T]:
  function pointer_str (line 212) | def pointer_str(obj: object) -> str:
  function safe_divide (line 222) | def safe_divide(a: float, b: float) -> float:

FILE: src/cocotb/_vendor/fli/acc_user.h
  type PLI_INT32 (line 27) | typedef int             PLI_INT32;
  type PLI_UINT32 (line 28) | typedef unsigned int    PLI_UINT32;
  type PLI_INT16 (line 29) | typedef short           PLI_INT16;
  type PLI_UINT16 (line 30) | typedef unsigned short  PLI_UINT16;
  type PLI_BYTE8 (line 31) | typedef char            PLI_BYTE8;
  type PLI_UBYTE8 (line 32) | typedef unsigned char   PLI_UBYTE8;
  type t_vc_record (line 378) | struct t_vc_record
  type PLI_INT32 (line 380) | typedef PLI_INT32 (*consumer_function)(p_vc_record);
  type s_acc_time (line 383) | typedef struct t_acc_time
  type s_setval_delay (line 392) | typedef struct t_setval_delay
  type s_acc_vecval (line 399) | typedef struct t_acc_vecval
  type s_setval_value (line 406) | typedef struct t_setval_value
  type s_strengths (line 420) | typedef struct t_strengths
  type s_vc_record (line 428) | typedef struct t_vc_record
  type s_location (line 444) | typedef struct t_location
  type s_timescale_info (line 451) | typedef struct t_timescale_info

FILE: src/cocotb/_vendor/fli/mti.h
  type __int64 (line 74) | typedef __int64 mtiLongT;
  type mtiUlongT (line 75) | typedef unsigned __int64 mtiUlongT;
  type mtiLongT (line 77) | typedef long mtiLongT;
  type mtiUlongT (line 78) | typedef unsigned long mtiUlongT;
  type mtiDriverIdTag (line 83) | struct mtiDriverIdTag
  type mtiProcessIdTag (line 84) | struct mtiProcessIdTag
  type mtiRegionIdTag (line 85) | struct mtiRegionIdTag
  type mtiObjIdTag (line 86) | struct mtiObjIdTag
  type mtiSignalIdTag (line 87) | struct mtiSignalIdTag
  type mtiTypeIdTag (line 88) | struct mtiTypeIdTag
  type mtiVariableIdTag (line 89) | struct mtiVariableIdTag
  type mtiValueIdTag (line 90) | struct mtiValueIdTag
  type mtiCompValueIdTag (line 91) | struct mtiCompValueIdTag
  type mtiAMSTerminalIdTag (line 92) | struct mtiAMSTerminalIdTag
  type mtiAMSQuantityIdTag (line 93) | struct mtiAMSQuantityIdTag
  type mtiInt32T (line 97) | typedef int          mtiInt32T;
  type mtiUInt32T (line 98) | typedef unsigned int mtiUInt32T;
  type mtiInt32T (line 100) | typedef mtiInt32T    mtiDelayT;
  type mtiTypeKindT (line 112) | typedef enum mtiTypeKindEnum_ {
  type mtiDirectionT (line 134) | typedef enum mtiDirectionEnum_ {
  type mtiProcessTriggerT (line 143) | typedef enum mtiProcessTriggerEnum_ {
  type mtiDriverModeT (line 150) | typedef enum mtiDriverModeEnum_ {
  type mtiForceTypeT (line 157) | typedef enum mtiForceTypeEnum_ {
  type mtiCntrlObsrvCompatT (line 166) | typedef enum mtiCntrlObsrvCompatEnum_ {
  type mtiProcessPriorityT (line 175) | typedef enum mtiProcessPriorityEnum_ {
  type mtiTimeFlagT (line 215) | typedef enum mtiTimeFlagEnum_ {
  type mtiLongT (line 228) | typedef mtiLongT mtiTime64T;
  type int64 (line 239) | typedef int64 mtiTime64T;
  type mtiInt64TimeVal_ (line 247) | struct mtiInt64TimeVal_ {
  type mtiTime64T (line 261) | typedef union mtiTime64Union_ {
  type mtiUniversalValueT (line 279) | typedef union {
  type mtiUniversalValueT (line 287) | typedef mtiUniversalValueT mtiRealT;
  type mtiPhysicalDataT (line 294) | typedef struct mtiPhysicalDataStruct_ mtiPhysicalDataT;
  type mtiPhysicalDataStruct_ (line 295) | struct mtiPhysicalDataStruct_ {
  type mtiInterfaceListT (line 322) | typedef struct mtiInterfaceListStruct_ mtiInterfaceListT;
  type mtiInterfaceListStruct_ (line 323) | struct mtiInterfaceListStruct_ {

FILE: src/cocotb/_vendor/tcl/tcl.h
  type CHAR (line 320) | typedef char CHAR;
  type SHORT (line 321) | typedef short SHORT;
  type LONG (line 322) | typedef long LONG;
  type TCL_WIDE_INT_TYPE (line 420) | typedef TCL_WIDE_INT_TYPE		Tcl_WideInt;
  type Tcl_WideUInt (line 421) | typedef unsigned TCL_WIDE_INT_TYPE	Tcl_WideUInt;
  type Tcl_StatBuf (line 447) | typedef struct stati64 Tcl_StatBuf;
  type Tcl_StatBuf (line 449) | typedef struct __stat64 Tcl_StatBuf;
  type Tcl_StatBuf (line 451) | typedef struct _stati64	Tcl_StatBuf;
  type Tcl_StatBuf (line 453) | typedef struct _stat32i64 Tcl_StatBuf;
  type Tcl_StatBuf (line 456) | typedef struct {
  type Tcl_StatBuf (line 473) | typedef struct stat64 Tcl_StatBuf;
  type Tcl_StatBuf (line 475) | typedef struct stat Tcl_StatBuf;
  type Tcl_Interp (line 498) | struct Tcl_Interp
  type Tcl_AsyncHandler_ (line 532) | struct Tcl_AsyncHandler_
  type Tcl_Channel_ (line 533) | struct Tcl_Channel_
  type Tcl_ChannelTypeVersion_ (line 534) | struct Tcl_ChannelTypeVersion_
  type Tcl_Command_ (line 535) | struct Tcl_Command_
  type Tcl_Condition_ (line 536) | struct Tcl_Condition_
  type Tcl_Dict_ (line 537) | struct Tcl_Dict_
  type Tcl_EncodingState_ (line 538) | struct Tcl_EncodingState_
  type Tcl_Encoding_ (line 539) | struct Tcl_Encoding_
  type Tcl_Event (line 540) | typedef struct Tcl_Event Tcl_Event;
  type Tcl_InterpState_ (line 541) | struct Tcl_InterpState_
  type Tcl_LoadHandle_ (line 542) | struct Tcl_LoadHandle_
  type Tcl_Mutex_ (line 543) | struct Tcl_Mutex_
  type Tcl_Pid_ (line 544) | struct Tcl_Pid_
  type Tcl_RegExp_ (line 545) | struct Tcl_RegExp_
  type Tcl_ThreadDataKey_ (line 546) | struct Tcl_ThreadDataKey_
  type Tcl_ThreadId_ (line 547) | struct Tcl_ThreadId_
  type Tcl_TimerToken_ (line 548) | struct Tcl_TimerToken_
  type Tcl_Trace_ (line 549) | struct Tcl_Trace_
  type Tcl_Var_ (line 550) | struct Tcl_Var_
  type Tcl_ZLibStream_ (line 551) | struct Tcl_ZLibStream_
  type Tcl_RegExpIndices (line 628) | typedef struct Tcl_RegExpIndices {
  type Tcl_RegExpInfo (line 635) | typedef struct Tcl_RegExpInfo {
  type Tcl_StatBuf (line 649) | typedef Tcl_StatBuf *Tcl_Stat_;
  type stat (line 650) | struct stat
  type Tcl_ValueType (line 695) | typedef enum {
  type Tcl_Value (line 699) | typedef struct Tcl_Value {
  type Tcl_Obj (line 712) | struct Tcl_Obj
  type Tcl_Obj (line 732) | struct Tcl_Obj
  type Tcl_Obj (line 734) | struct Tcl_Obj
  type Tcl_Obj (line 735) | struct Tcl_Obj
  type Tcl_Obj (line 747) | struct Tcl_Obj
  type Tcl_Obj (line 756) | struct Tcl_Obj
  type Tcl_Obj (line 763) | struct Tcl_Obj
  type Tcl_Obj (line 764) | struct Tcl_Obj
  type ClientData (line 774) | typedef ClientData (Tcl_InitNotifierProc) (void);
  type Tcl_ObjType (line 785) | typedef struct Tcl_ObjType {
  type Tcl_Obj (line 809) | typedef struct Tcl_Obj {
  type Tcl_SavedResult (line 869) | typedef struct Tcl_SavedResult {
  type Tcl_Namespace (line 886) | typedef struct Tcl_Namespace {
  type Tcl_CallFrame (line 927) | typedef struct Tcl_CallFrame {
  type Tcl_CmdInfo (line 959) | typedef struct Tcl_CmdInfo {
  type Tcl_DString (line 988) | typedef struct Tcl_DString {
  type Tcl_HashKeyType (line 1157) | typedef struct Tcl_HashKeyType Tcl_HashKeyType;
  type Tcl_HashTable (line 1158) | typedef struct Tcl_HashTable Tcl_HashTable;
  type Tcl_HashEntry (line 1159) | typedef struct Tcl_HashEntry Tcl_HashEntry;
  type Tcl_HashEntry (line 1163) | typedef Tcl_HashEntry * (Tcl_AllocHashEntryProc) (Tcl_HashTable *tablePtr,
  type Tcl_HashEntry (line 1184) | struct Tcl_HashEntry {
  type Tcl_HashKeyType (line 1233) | struct Tcl_HashKeyType {
  type Tcl_HashTable (line 1278) | struct Tcl_HashTable {
  type Tcl_HashSearch (line 1313) | typedef struct Tcl_HashSearch {
  type Tcl_DictSearch (line 1353) | typedef struct {
  type Tcl_Event (line 1383) | struct Tcl_Event {
  type Tcl_QueuePosition (line 1392) | typedef enum {
  type Tcl_Time (line 1410) | typedef struct Tcl_Time {
  type Tcl_WideInt (line 1505) | typedef Tcl_WideInt (Tcl_DriverWideSeekProc) (ClientData instanceData,
  type Tcl_ChannelType (line 1529) | typedef struct Tcl_ChannelType {
  type Tcl_PathType (line 1614) | typedef enum Tcl_PathType {
  type Tcl_GlobTypeData (line 1625) | typedef struct Tcl_GlobTypeData {
  type Tcl_Channel (line 1664) | typedef Tcl_Channel (Tcl_FSOpenFileChannelProc) (Tcl_Interp *interp,
  type Tcl_Obj (line 1668) | typedef Tcl_Obj * (Tcl_FSGetCwdProc) (Tcl_Interp *interp);
  type Tcl_Obj (line 1680) | typedef Tcl_Obj * (Tcl_FSListVolumesProc) (void);
  type utimbuf (line 1682) | struct utimbuf
  type utimbuf (line 1683) | struct utimbuf
  type Tcl_Obj (line 1692) | typedef Tcl_Obj * (Tcl_FSLinkProc) (Tcl_Obj *pathPtr, Tcl_Obj *toPtr,
  type Tcl_Obj (line 1698) | typedef Tcl_Obj * (Tcl_FSFilesystemPathTypeProc) (Tcl_Obj *pathPtr);
  type Tcl_Obj (line 1699) | typedef Tcl_Obj * (Tcl_FSFilesystemSeparatorProc) (Tcl_Obj *pathPtr);
  type ClientData (line 1701) | typedef ClientData (Tcl_FSDupInternalRepProc) (ClientData clientData);
  type Tcl_Obj (line 1702) | typedef Tcl_Obj * (Tcl_FSInternalToNormalizedProc) (ClientData clientData);
  type ClientData (line 1703) | typedef ClientData (Tcl_FSCreateInternalRepProc) (Tcl_Obj *pathPtr);
  type Tcl_FSVersion_ (line 1705) | struct Tcl_FSVersion_
  type Tcl_Filesystem (line 1731) | typedef struct Tcl_Filesystem {
  type Tcl_NotifierProcs (line 1899) | typedef struct Tcl_NotifierProcs {
  type Tcl_Token (line 1919) | typedef struct Tcl_Token {
  type Tcl_Parse (line 2035) | typedef struct Tcl_Parse {
  type Tcl_EncodingType (line 2096) | typedef struct Tcl_EncodingType {
  type Tcl_UniChar (line 2231) | typedef unsigned int Tcl_UniChar;
  type Tcl_UniChar (line 2233) | typedef unsigned short Tcl_UniChar;
  type Tcl_Config (line 2242) | typedef struct Tcl_Config {
  type mp_int (line 2271) | typedef struct mp_int mp_int;
  type mp_digit (line 2273) | typedef unsigned int mp_digit;
  type Tcl_ArgvInfo (line 2283) | typedef struct {

FILE: src/cocotb/_vendor/tcl/tclDecls.h
  type stat (line 1077) | struct stat
  type utimbuf (line 1311) | struct utimbuf
  type TclStubHooks (line 1820) | typedef struct {
  type TclStubs (line 1826) | typedef struct TclStubs {
  function TclExprLong (line 3883) | static inline int TclExprLong(Tcl_Interp *interp, const char *string, lo...
  function TclExprLongObj (line 3890) | static inline int TclExprLongObj(Tcl_Interp *interp, Tcl_Obj *obj, long ...

FILE: src/cocotb/_vendor/tcl/tclPlatDecls.h
  type wchar_t (line 36) | typedef wchar_t TCHAR;
  type TCHAR (line 38) | typedef char TCHAR;
  type TclPlatStubs (line 74) | typedef struct TclPlatStubs {

FILE: src/cocotb/_vendor/vhpi/vhpi_user.h
  type vhpiEnumT (line 90) | typedef uint32_t vhpiEnumT;
  type vhpiSmallEnumT (line 91) | typedef uint8_t vhpiSmallEnumT;
  type vhpiIntT (line 92) | typedef uint32_t vhpiIntT;
  type vhpiLongIntT (line 93) | typedef uint64_t vhpiLongIntT;
  type vhpiCharT (line 94) | typedef char vhpiCharT;
  type vhpiRealT (line 95) | typedef double vhpiRealT;
  type vhpiSmallPhysT (line 96) | typedef uint32_t vhpiSmallPhysT;
  type vhpiPhysT (line 98) | typedef struct vhpiPhysS
  type PLI_INT32 (line 107) | typedef int PLI_INT32;
  type PLI_UINT32 (line 108) | typedef unsigned int PLI_UINT32;
  type PLI_INT16 (line 109) | typedef short PLI_INT16;
  type PLI_UINT16 (line 110) | typedef unsigned short PLI_UINT16;
  type PLI_BYTE8 (line 111) | typedef char PLI_BYTE8;
  type PLI_UBYTE8 (line 112) | typedef unsigned char PLI_UBYTE8;
  type PLI_VOID (line 113) | typedef void PLI_VOID;
  type vhpiTimeT (line 117) | typedef struct vhpiTimeS
  type vhpiFormatT (line 126) | typedef enum
  type vhpiValueT (line 163) | typedef struct vhpiValueS
  type vhpiClassKindT (line 216) | typedef enum
  type vhpiOneToOneT (line 351) | typedef enum
  type vhpiOneToManyT (line 445) | typedef enum
  type vhpiIntPropertyT (line 523) | typedef enum
  type vhpiStrPropertyT (line 609) | typedef enum
  type vhpiRealPropertyT (line 642) | typedef enum
  type vhpiPhysPropertyT (line 654) | typedef enum
  type vhpiCapabibilityT (line 672) | typedef enum
  type vhpiOpenModeT (line 689) | typedef enum
  type vhpiModeT (line 699) | typedef enum
  type vhpiSigKindT (line 709) | typedef enum
  type vhpiStaticnessT (line 717) | typedef enum
  type vhpiPredefAttrT (line 725) | typedef enum
  type vhpiAttrKindT (line 761) | typedef enum
  type vhpiEntityClassT (line 775) | typedef enum
  type vhpiAccessT (line 797) | typedef enum
  type vhpiStateT (line 806) | typedef enum
  type vhpiCompInstKindT (line 814) | typedef enum
  type vhpiPhaseT (line 856) | typedef enum
  type vhpiSeverityT (line 871) | typedef enum
  type vhpiErrorInfoT (line 881) | typedef struct vhpiErrorInfoS
  type vhpiCbDataT (line 893) | typedef struct vhpiCbDataS
  type vhpiAutomaticRestoreT (line 975) | typedef enum
  type vhpiPutValueModeT (line 1070) | typedef enum
  type vhpiDelayModeT (line 1080) | typedef enum
  type vhpiSimControlT (line 1114) | typedef enum
  type vhpiForeignT (line 1160) | typedef enum
  type vhpiForeignDataT (line 1172) | typedef struct vhpiForeignDataS

FILE: src/cocotb/_vendor/vpi/sv_vpi_user.h
  type s_vpi_assertion_step_info (line 540) | typedef struct t_vpi_assertion_step_info {
  type s_vpi_attempt_info (line 546) | typedef struct t_vpi_attempt_info {
  type PLI_INT32 (line 555) | typedef PLI_INT32(vpi_assertion_callback_func)(

FILE: src/cocotb/_vendor/vpi/vpi_user.h
  type PLI_INT64 (line 39) | typedef int64_t PLI_INT64;
  type PLI_UINT64 (line 40) | typedef uint64_t PLI_UINT64;
  type PLI_INT32 (line 45) | typedef int             PLI_INT32;
  type PLI_UINT32 (line 46) | typedef unsigned int    PLI_UINT32;
  type PLI_INT16 (line 47) | typedef short           PLI_INT16;
  type PLI_UINT16 (line 48) | typedef unsigned short  PLI_UINT16;
  type PLI_BYTE8 (line 49) | typedef char            PLI_BYTE8;
  type PLI_UBYTE8 (line 50) | typedef unsigned char   PLI_UBYTE8;
  type PLI_UINT32 (line 102) | typedef PLI_UINT32 *vpiHandle;
  type s_vpi_time (line 561) | typedef struct t_vpi_time
  type s_vpi_delay (line 579) | typedef struct t_vpi_delay
  type s_vpi_vecval (line 598) | typedef struct t_vpi_vecval
  type s_vpi_strengthval (line 608) | typedef struct t_vpi_strengthval
  type s_vpi_value (line 627) | typedef struct t_vpi_value
  type s_vpi_arrayvalue (line 644) | typedef struct t_vpi_arrayvalue
  type s_vpi_systf_data (line 727) | typedef struct t_vpi_systf_data
  type s_vpi_vlog_info (line 746) | typedef struct t_vpi_vlog_info
  type s_vpi_error_info (line 756) | typedef struct t_vpi_error_info
  type s_cb_data (line 785) | typedef struct t_cb_data

FILE: src/cocotb/_xunit_reporter.py
  function bin_xml_escape (line 15) | def bin_xml_escape(arg: object) -> str:
  class XUnitReporter (line 42) | class XUnitReporter:
    method __init__ (line 46) | def __init__(self, filename: str = "results.xml") -> None:
    method add_testsuite (line 50) | def add_testsuite(self, **kwargs: str) -> Element:
    method add_testcase (line 54) | def add_testcase(self, testsuite: Element | None = None, **kwargs: str...
    method add_property (line 60) | def add_property(self, testsuite: Element | None = None, **kwargs: str...
    method add_failure (line 66) | def add_failure(self, testcase: Element | None = None, **kwargs: str) ...
    method add_skipped (line 71) | def add_skipped(self, testcase: Element | None = None, **kwargs: str) ...
    method write (line 76) | def write(self) -> None:

FILE: src/cocotb/clock.py
  class Clock (line 53) | class Clock:
    method __init__ (line 161) | def __init__(
    method signal (line 227) | def signal(self) -> LogicObject:
    method period (line 232) | def period(self) -> float | Fraction | Decimal:
    method period_high (line 240) | def period_high(self) -> float | Fraction | Decimal:
    method unit (line 250) | def unit(self) -> TimeUnit:
    method impl (line 258) | def impl(self) -> Impl:
    method set_action (line 269) | def set_action(self) -> type[Immediate] | type[Deposit] | type[Force]:
    method start (line 276) | def start(self, start_high: bool = True) -> Task[None]:
    method stop (line 346) | def stop(self) -> None:
    method cycles (line 361) | async def cycles(
    method __repr__ (line 407) | def __repr__(self) -> str:
    method _log (line 414) | def _log(self) -> Logger:

FILE: src/cocotb/handle.py
  class SimHandleBase (line 64) | class SimHandleBase(ABC):
    method __init__ (line 80) | def __init__(self, handle: cocotb.simulator.sim_obj, path: str | None)...
    method _name (line 89) | def _name(self) -> str:
    method _type (line 97) | def _type(self) -> str:
    method _log (line 105) | def _log(self) -> Logger:
    method _def_name (line 109) | def _def_name(self) -> str:
    method _def_file (line 121) | def _def_file(self) -> str:
    method __hash__ (line 132) | def __hash__(self) -> int:
    method __eq__ (line 135) | def __eq__(self, other: object) -> bool:
    method __repr__ (line 140) | def __repr__(self) -> str:
    method __bool__ (line 150) | def __bool__(self) -> NoReturn:
    method __getstate__ (line 155) | def __getstate__(self) -> NoReturn:
  class _RangeableObjectMixin (line 159) | class _RangeableObjectMixin(SimHandleBase):
    method range (line 163) | def range(self) -> Range:
    method left (line 173) | def left(self) -> int:
    method direction (line 178) | def direction(self) -> str:
    method right (line 183) | def right(self) -> int:
    method __len__ (line 187) | def __len__(self) -> int:
  class GPIDiscovery (line 198) | class GPIDiscovery(DocIntEnum):
  class _HierarchyObjectBase (line 205) | class _HierarchyObjectBase(SimHandleBase, Generic[KeyType]):
    method __init__ (line 223) | def __init__(self, handle: cocotb.simulator.sim_obj, path: str | None)...
    method _keys (line 228) | def _keys(self) -> Iterable[KeyType]:
    method _values (line 236) | def _values(self) -> Iterable[SimHandleBase]:
    method _items (line 244) | def _items(self) -> Iterable[tuple[KeyType, SimHandleBase]]:
    method _discover_all (line 252) | def _discover_all(self) -> None:
    method _get (line 291) | def _get(
    method _get_handle_by_key (line 329) | def _get_handle_by_key(
    method _child_path (line 343) | def _child_path(self, key: KeyType) -> str:
    method _sub_handle_key (line 354) | def _sub_handle_key(self, name: str) -> KeyType:
    method __iter__ (line 367) | def __iter__(self) -> Iterator[SimHandleBase]:
    method __len__ (line 370) | def __len__(self) -> int:
    method __dir__ (line 374) | def __dir__(self) -> Iterable[str]:
  class HierarchyObject (line 380) | class HierarchyObject(_HierarchyObjectBase[str]):
    method __init__ (line 435) | def __init__(self, handle: cocotb.simulator.sim_obj, path: str | None)...
    method __setattr__ (line 438) | def __setattr__(self, name: str, value: object) -> None:
    method __getattr__ (line 454) | def __getattr__(self, name: str) -> SimHandleBase:
    method __getitem__ (line 463) | def __getitem__(self, key: str) -> SimHandleBase:
    method _id (line 472) | def _id(self, name: str, extended: bool = True) -> SimHandleBase:
    method _child_path (line 503) | def _child_path(self, key: str) -> str:
    method _sub_handle_key (line 507) | def _sub_handle_key(self, name: str) -> str:
    method _get_handle_by_key (line 510) | def _get_handle_by_key(
  class HierarchyArrayObject (line 516) | class HierarchyArrayObject(
    method __init__ (line 556) | def __init__(self, handle: cocotb.simulator.sim_obj, path: str | None)...
    method _sub_handle_key (line 559) | def _sub_handle_key(self, name: str) -> int:
    method _child_path (line 579) | def _child_path(self, key: int) -> str:
    method _get_handle_by_key (line 582) | def _get_handle_by_key(
    method __getitem__ (line 591) | def __getitem__(self, key: int) -> HierarchyChildObjectT:
    method __iter__ (line 602) | def __iter__(self) -> Iterator[HierarchyChildObjectT]:
  class _GPISetAction (line 608) | class _GPISetAction(enum.Enum):
  class _Action (line 620) | class _Action(Generic[_ValueT]):
    method _dispatch (line 622) | def _dispatch(self, obj: ValueObjectBase[Any, _ValueT]) -> None: ...
  class Deposit (line 625) | class Deposit(_Action[_ValueT]):
    method __init__ (line 639) | def __init__(self, value: _ValueT) -> None:
    method _dispatch (line 642) | def _dispatch(self, obj: ValueObjectBase[Any, _ValueT]) -> None:
  class Force (line 646) | class Force(_Action[_ValueT]):
    method __init__ (line 667) | def __init__(self, value: _ValueT) -> None:
    method _dispatch (line 670) | def _dispatch(self, obj: ValueObjectBase[Any, _ValueT]) -> None:
  class Freeze (line 674) | class Freeze(_Action[_ValueT]):
    method _dispatch (line 695) | def _dispatch(self, obj: ValueObjectBase[Any, _ValueT]) -> None:
  class Release (line 699) | class Release(_Action[_ValueT]):
    method _dispatch (line 725) | def _dispatch(self, obj: ValueObjectBase[Any, _ValueT]) -> None:
  class Immediate (line 729) | class Immediate(_Action[_ValueT]):
    method __init__ (line 747) | def __init__(self, value: _ValueT) -> None:
    method _dispatch (line 750) | def _dispatch(self, obj: ValueObjectBase[Any, _ValueT]) -> None:
  class _OldImmediate (line 754) | class _OldImmediate(_Action[_ValueT]):
    method __init__ (line 755) | def __init__(self, value: _ValueT) -> None:
    method _dispatch (line 758) | def _dispatch(self, obj: ValueObjectBase[Any, _ValueT]) -> None:
  function _apply_scheduled_writes (line 768) | def _apply_scheduled_writes() -> None:
  function _schedule_write (line 771) | def _schedule_write(
  function _apply_scheduled_writes (line 788) | def _apply_scheduled_writes() -> None:
  function _schedule_write (line 798) | def _schedule_write(
  class ValueObjectBase (line 834) | class ValueObjectBase(SimHandleBase, Generic[ValueGetT, ValueSetT]):
    method value (line 841) | def value(self) -> ValueGetT:
    method value (line 865) | def value(
    method get (line 885) | def get(self) -> ValueGetT:
    method set (line 889) | def set(
    method setimmediatevalue (line 915) | def setimmediatevalue(
    method is_const (line 942) | def is_const(self) -> bool:
    method _set_value (line 947) | def _set_value(
  class ArrayObject (line 972) | class ArrayObject(
    method __init__ (line 1005) | def __init__(self, handle: cocotb.simulator.sim_obj, path: str | None)...
    method get (line 1009) | def get(self) -> Array[ElemValueT]:
    method set (line 1029) | def set(
    method _set_value (line 1062) | def _set_value(
    method __getitem__ (line 1074) | def __getitem__(self, index: int) -> ChildObjectT:
    method __iter__ (line 1088) | def __iter__(self) -> Iterable[ChildObjectT]:
  class _NonIndexableValueObjectBase (line 1093) | class _NonIndexableValueObjectBase(ValueObjectBase[ValueGetT, ValueSetT]):
    method value_change (line 1100) | def value_change(self) -> ValueChange:
    method _edge (line 1107) | def _edge(self) -> Edge:
  class LogicObject (line 1113) | class LogicObject(
    method __init__ (line 1132) | def __init__(self, handle: cocotb.simulator.sim_obj, path: str | None)...
    method _set_value (line 1135) | def _set_value(
    method get (line 1161) | def get(self) -> Logic:
    method set (line 1166) | def set(
    method rising_edge (line 1190) | def rising_edge(self) -> RisingEdge:
    method falling_edge (line 1197) | def falling_edge(self) -> FallingEdge:
    method __len__ (line 1203) | def __len__(self) -> int:
    method __int__ (line 1209) | def __int__(self) -> int:
    method __str__ (line 1215) | def __str__(self) -> str:
  class _SignednessObjectMixin (line 1219) | class _SignednessObjectMixin(SimHandleBase):
    method __len__ (line 1221) | def __len__(self) -> int: ...
    method is_signed (line 1224) | def is_signed(self) -> bool:
    method _min_val (line 1231) | def _min_val(self) -> int:
    method _max_val (line 1239) | def _max_val(self) -> int:
  class LogicArrayObject (line 1247) | class LogicArrayObject(
    method __init__ (line 1272) | def __init__(self, handle: cocotb.simulator.sim_obj, path: str | None)...
    method _set_value (line 1275) | def _set_value(
    method get (line 1320) | def get(self) -> LogicArray:
    method set (line 1330) | def set(
    method __int__ (line 1369) | def __int__(self) -> int:
    method __str__ (line 1375) | def __str__(self) -> str:
    method __len__ (line 1378) | def __len__(self) -> int:
    method __getitem__ (line 1383) | def __getitem__(self, index: int) -> LogicObject:
    method _min_val (line 1391) | def _min_val(self) -> int:
    method _max_val (line 1396) | def _max_val(self) -> int:
    method rising_edge (line 1401) | def rising_edge(self) -> RisingEdge:
    method falling_edge (line 1410) | def falling_edge(self) -> FallingEdge:
  class PackedObject (line 1419) | class PackedObject(LogicArrayObject):
    method __getitem__ (line 1430) | def __getitem__(self, _: object) -> NoReturn:
  class RealObject (line 1439) | class RealObject(_NonIndexableValueObjectBase[float, float]):
    method __init__ (line 1447) | def __init__(self, handle: cocotb.simulator.sim_obj, path: str | None)...
    method _set_value (line 1450) | def _set_value(
    method get (line 1462) | def get(self) -> float:
    method set (line 1466) | def set(
    method __float__ (line 1488) | def __float__(self) -> float:
  class EnumObject (line 1492) | class EnumObject(
    method __init__ (line 1510) | def __init__(self, handle: cocotb.simulator.sim_obj, path: str | None)...
    method _set_value (line 1513) | def _set_value(
    method get (line 1539) | def get(self) -> int:
    method set (line 1554) | def set(
    method __int__ (line 1577) | def __int__(self) -> int:
    method __len__ (line 1580) | def __len__(self) -> int:
  class IntegerObject (line 1584) | class IntegerObject(_NonIndexableValueObjectBase[int, int], _SignednessO...
    method __init__ (line 1607) | def __init__(self, handle: cocotb.simulator.sim_obj, path: str | None)...
    method _set_value (line 1610) | def _set_value(
    method get (line 1640) | def get(self) -> int:
    method set (line 1652) | def set(
    method __int__ (line 1673) | def __int__(self) -> int:
    method __len__ (line 1676) | def __len__(self) -> int:
  class StringObject (line 1680) | class StringObject(
    method __init__ (line 1691) | def __init__(self, handle: cocotb.simulator.sim_obj, path: str | None)...
    method _set_value (line 1694) | def _set_value(
    method get (line 1705) | def get(self) -> bytes:
    method set (line 1709) | def set(
    method __str__ (line 1755) | def __str__(self) -> str:
  function _make_sim_object (line 1795) | def _make_sim_object(

FILE: src/cocotb/logging.py
  function default_config (line 54) | def default_config(
  function _init (line 136) | def _init() -> None:
  function _setup_gpi_logger (line 178) | def _setup_gpi_logger() -> None:
  function _configure (line 196) | def _configure() -> None:
  function SimLog (line 204) | def SimLog(name: str, ident: int | None = None) -> logging.Logger:
  class SimTimeContextFilter (line 223) | class SimTimeContextFilter(logging.Filter):
    method filter (line 233) | def filter(self, record: logging.LogRecord) -> bool:
  function _ljust (line 244) | def _ljust(string: str, chars: int) -> str:
  function _rjust (line 250) | def _rjust(string: str, chars: int) -> str:
  function _simtime_fmt (line 257) | def _simtime_fmt(record: logging.LogRecord, unit: TimeUnit) -> str:
  class SimLogFormatter (line 265) | class SimLogFormatter(logging.Formatter):
    method __init__ (line 293) | def __init__(
    method strip_ansi (line 350) | def strip_ansi(self) -> bool:
    method ljust (line 355) | def ljust(string: str, chars: int) -> str:
    method rjust (line 359) | def rjust(string: str, chars: int) -> str:
    method formatExcInfo (line 362) | def formatExcInfo(self, record: logging.LogRecord) -> str:
    method format (line 380) | def format(self, record: logging.LogRecord) -> str:
  class SimColourLogFormatter (line 427) | class SimColourLogFormatter(SimLogFormatter):
    method __init__ (line 434) | def __init__(
  function _log_from_c (line 454) | def _log_from_c(

FILE: src/cocotb/queue.py
  class QueueFull (line 32) | class QueueFull(asyncio.queues.QueueFull):
  class QueueEmpty (line 36) | class QueueEmpty(asyncio.queues.QueueEmpty):
  class AbstractQueue (line 43) | class AbstractQueue(Generic[T]):
    method __init__ (line 51) | def __init__(self, maxsize: int = 0) -> None:
    method _get (line 61) | def _get(self) -> T:
    method _put (line 65) | def _put(self, item: T) -> None:
    method _size (line 69) | def _size(self) -> int:
    method _repr (line 73) | def _repr(self) -> str:
    method _wakeup_next (line 76) | def _wakeup_next(
    method __repr__ (line 85) | def __repr__(self) -> str:
    method __str__ (line 88) | def __str__(self) -> str:
    method _format (line 91) | def _format(self) -> str:
    method qsize (line 101) | def qsize(self) -> int:
    method maxsize (line 106) | def maxsize(self) -> int:
    method empty (line 110) | def empty(self) -> bool:
    method full (line 114) | def full(self) -> bool:
    method put (line 126) | async def put(self, item: T) -> None:
    method put_nowait (line 138) | def put_nowait(self, item: T) -> None:
    method get (line 148) | async def get(self) -> T:
    method get_nowait (line 159) | def get_nowait(self) -> T:
  class Queue (line 172) | class Queue(AbstractQueue[T]):
    method __init__ (line 175) | def __init__(self, maxsize: int = 0) -> None:
    method _put (line 179) | def _put(self, item: T) -> None:
    method _get (line 182) | def _get(self) -> T:
    method _size (line 185) | def _size(self) -> int:
    method _repr (line 188) | def _repr(self) -> str:
  class SupportsRichComparison (line 192) | class SupportsRichComparison(Protocol):
    method __eq__ (line 193) | def __eq__(self, other: object) -> bool: ...
    method __lt__ (line 194) | def __lt__(self, other: Self) -> bool: ...
    method __le__ (line 195) | def __le__(self, other: Self) -> bool: ...
    method __gt__ (line 196) | def __gt__(self, other: Self) -> bool: ...
    method __ge__ (line 197) | def __ge__(self, other: Self) -> bool: ...
  class PriorityQueue (line 205) | class PriorityQueue(AbstractQueue[SupportsRichComparisonT]):
    method __init__ (line 211) | def __init__(self, maxsize: int = 0) -> None:
    method _put (line 215) | def _put(self, item: SupportsRichComparisonT) -> None:
    method _get (line 218) | def _get(self) -> SupportsRichComparisonT:
    method _size (line 221) | def _size(self) -> int:
    method _repr (line 224) | def _repr(self) -> str:
  class LifoQueue (line 228) | class LifoQueue(AbstractQueue[T]):
    method __init__ (line 231) | def __init__(self, maxsize: int = 0) -> None:
    method _put (line 235) | def _put(self, item: T) -> None:
    method _get (line 238) | def _get(self) -> T:
    method _size (line 241) | def _size(self) -> int:
    method _repr (line 244) | def _repr(self) -> str:

FILE: src/cocotb/regression.py
  function handle_pytest_exception_matchers (line 65) | def handle_pytest_exception_matchers(
  function handle_pytest_exception_matchers (line 100) | def handle_pytest_exception_matchers(
  class SimFailure (line 109) | class SimFailure(BaseException):
  class RegressionTerminated (line 118) | class RegressionTerminated(BaseException):
  function _format_doc (line 133) | def _format_doc(docstring: str | None) -> str:
  class RegressionMode (line 141) | class RegressionMode(DocEnum):
  class _TestOutcome (line 155) | class _TestOutcome(Enum):
  class _TestResults (line 162) | class _TestResults:
    method __init__ (line 163) | def __init__(
    method ratio (line 176) | def ratio(self) -> float:
  class RegressionManager (line 180) | class RegressionManager:
    method __init__ (line 206) | def __init__(self) -> None:
    method discover_tests (line 247) | def discover_tests(self, *modules: str) -> None:
    method add_filters (line 285) | def add_filters(self, *filters: str) -> None:
    method set_mode (line 301) | def set_mode(self, mode: RegressionMode) -> None:
    method register_test (line 312) | def register_test(self, test: Test) -> None:
    method setup_pytest_assertion_rewriting (line 324) | def setup_pytest_assertion_rewriting(cls) -> None:
    method start_regression (line 345) | def start_regression(self) -> None:
    method _execute (line 382) | def _execute(self) -> None:
    method _init_test (line 428) | def _init_test(self) -> TestManager:
    method _schedule_next_test (line 437) | def _schedule_next_test(self) -> None:
    method _tear_down (line 457) | def _tear_down(self) -> None:
    method _test_complete (line 482) | def _test_complete(self) -> None:
    method _score_test (line 511) | def _score_test(
    method _get_lineno (line 634) | def _get_lineno(self, test: Test) -> int:
    method _log_test_start (line 643) | def _log_test_start(self) -> None:
    method _record_test_excluded (line 657) | def _record_test_excluded(self) -> None:
    method _record_test_skipped (line 675) | def _record_test_skipped(
    method _record_test_init_failed (line 725) | def _record_test_init_failed(self) -> None:
    method _record_test_xfail (line 768) | def _record_test_xfail(
    method _record_test_passed (line 822) | def _record_test_passed(
    method _record_test_failed (line 863) | def _record_test_failed(
    method _log_test_summary (line 926) | def _log_test_summary(self) -> None:
    method _on_sim_end (line 1055) | def _on_sim_end(self) -> None:
    method list_tests (line 1074) | def list_tests(self) -> None:
  function _setup_regression_manager (line 1088) | def _setup_regression_manager() -> None:
  function _run_regression (line 1121) | def _run_regression() -> None:

FILE: src/cocotb/result.py
  function __getattr__ (line 9) | def __getattr__(name: str) -> object:

FILE: src/cocotb/share/include/gpi.h
  type GpiObjHdl (line 60) | typedef GpiObjHdl *gpi_sim_hdl;
  type GpiCbHdl (line 61) | typedef GpiCbHdl *gpi_cb_hdl;
  type GpiIterator (line 62) | typedef GpiIterator *gpi_iterator_hdl;
  type GpiObjHdl (line 68) | struct GpiObjHdl
  type GpiCbHdl (line 69) | struct GpiCbHdl
  type GpiIterator (line 70) | struct GpiIterator
  type GpiObjHdl (line 73) | struct GpiObjHdl
  type GpiCbHdl (line 76) | struct GpiCbHdl
  type GpiIterator (line 82) | struct GpiIterator
  type gpi_discovery (line 152) | typedef enum gpi_discovery_e {
  type gpi_objtype (line 196) | typedef enum gpi_objtype_e {
  type gpi_range_dir (line 218) | typedef enum gpi_range_dir_e {
  type gpi_set_action (line 274) | typedef enum gpi_set_action_e {
  type gpi_iterator_sel (line 364) | typedef enum gpi_iterator_sel_e {
  type gpi_edge (line 398) | typedef enum gpi_edge_e {
  type gpi_log_level (line 526) | enum gpi_log_level {
  type gpi_log_level (line 556) | enum gpi_log_level
  type gpi_log_level (line 582) | enum gpi_log_level

FILE: src/cocotb/share/include/vhpi_user_ext.h
  type vhpiDiagT (line 15) | typedef enum

FILE: src/cocotb/share/lib/gpi/GpiCommon.cpp
  class GpiHandleStore (line 26) | class GpiHandleStore {
    method GpiObjHdl (line 28) | GpiObjHdl *check_and_store(GpiObjHdl *hdl) {
    method handle_count (line 47) | uint64_t handle_count() { return handle_map.size(); }
    method clear (line 49) | void clear() {
  function gpi_print_registered_impl (line 70) | static size_t gpi_print_registered_impl() {
  function gpi_register_impl (line 79) | int gpi_register_impl(GpiImplInterface *func_tbl) {
  function gpi_has_registered_impl (line 93) | bool gpi_has_registered_impl() { return registered_impls.size() > 0; }
  function gpi_start_of_sim_time (line 95) | void gpi_start_of_sim_time() {
  function gpi_end_of_sim_time (line 108) | void gpi_end_of_sim_time() {
  function gpi_finish (line 118) | void gpi_finish() {
  function gpi_finalize (line 125) | void gpi_finalize(void) {
  function gpi_check_cleanup (line 134) | void gpi_check_cleanup(void) {
  function gpi_is_finalizing (line 140) | bool gpi_is_finalizing(void) { return gpi_finalizing; }
  function gpi_load_libs (line 142) | static void gpi_load_libs(std::vector<std::string> to_load) {
  function gpi_load_users (line 185) | static int gpi_load_users() {
  function gpi_entry_point (line 249) | void gpi_entry_point() {
  function GPI_EXPORT (line 284) | GPI_EXPORT void gpi_init_logging_and_debug() {
  function gpi_get_sim_time (line 312) | void gpi_get_sim_time(uint32_t *high, uint32_t *low) {
  function gpi_get_sim_precision (line 316) | void gpi_get_sim_precision(int32_t *precision) {
  function gpi_sim_hdl (line 335) | gpi_sim_hdl gpi_get_root_handle(const char *name) {
  function GpiObjHdl (line 362) | static GpiObjHdl *gpi_get_child_by_name(GpiObjHdl *parent,
  function GpiObjHdl (line 410) | static GpiObjHdl *gpi_get_child_from_handle(GpiObjHdl *parent, void *raw...
  function gpi_sim_hdl (line 440) | gpi_sim_hdl gpi_get_handle_by_name(gpi_sim_hdl base, const char *name,
  function gpi_sim_hdl (line 467) | gpi_sim_hdl gpi_get_handle_by_index(gpi_sim_hdl base, int32_t index) {
  function gpi_iterator_hdl (line 492) | gpi_iterator_hdl gpi_iterate(gpi_sim_hdl obj_hdl, gpi_iterator_sel type) {
  function gpi_sim_hdl (line 520) | gpi_sim_hdl gpi_next(gpi_iterator_hdl iter) {
  function gpi_get_signal_value_real (line 588) | double gpi_get_signal_value_real(gpi_sim_hdl sig_hdl) {
  function gpi_get_signal_value_long (line 593) | long gpi_get_signal_value_long(gpi_sim_hdl sig_hdl) {
  function gpi_objtype (line 607) | gpi_objtype gpi_get_object_type(gpi_sim_hdl obj_hdl) {
  function gpi_is_constant (line 611) | int gpi_is_constant(gpi_sim_hdl obj_hdl) {
  function gpi_is_indexable (line 616) | int gpi_is_indexable(gpi_sim_hdl obj_hdl) {
  function gpi_is_signed (line 621) | int gpi_is_signed(gpi_sim_hdl obj_hdl) { return obj_hdl->get_signed(); }
  function gpi_set_signal_value_int (line 623) | void gpi_set_signal_value_int(gpi_sim_hdl sig_hdl, int32_t value,
  function gpi_set_signal_value_binstr (line 630) | void gpi_set_signal_value_binstr(gpi_sim_hdl sig_hdl, const char *binstr,
  function gpi_set_signal_value_str (line 637) | void gpi_set_signal_value_str(gpi_sim_hdl sig_hdl, const char *str,
  function gpi_set_signal_value_real (line 644) | void gpi_set_signal_value_real(gpi_sim_hdl sig_hdl, double value,
  function gpi_get_num_elems (line 650) | int gpi_get_num_elems(gpi_sim_hdl obj_hdl) { return obj_hdl->get_num_ele...
  function gpi_get_range_left (line 652) | int gpi_get_range_left(gpi_sim_hdl obj_hdl) {
  function gpi_get_range_right (line 656) | int gpi_get_range_right(gpi_sim_hdl obj_hdl) {
  function gpi_range_dir (line 660) | gpi_range_dir gpi_get_range_dir(gpi_sim_hdl obj_hdl) {
  function gpi_cb_hdl (line 664) | gpi_cb_hdl gpi_register_value_change_callback(int (*gpi_function)(void *),
  function gpi_cb_hdl (line 681) | gpi_cb_hdl gpi_register_timed_callback(int (*gpi_function)(void *),
  function gpi_cb_hdl (line 695) | gpi_cb_hdl gpi_register_readonly_callback(int (*gpi_function)(void *),
  function gpi_cb_hdl (line 709) | gpi_cb_hdl gpi_register_nexttime_callback(int (*gpi_function)(void *),
  function gpi_cb_hdl (line 723) | gpi_cb_hdl gpi_register_readwrite_callback(int (*gpi_function)(void *),
  function gpi_remove_cb (line 737) | int gpi_remove_cb(gpi_cb_hdl cb_hdl) { return cb_hdl->remove(); }
  function gpi_get_cb_info (line 739) | void gpi_get_cb_info(gpi_cb_hdl cb_hdl, int (**cb_func)(void *),
  function string (line 746) | const string &GpiImplInterface::get_name_s() { return m_name; }
  function gpi_register_start_of_sim_time_callback (line 748) | int gpi_register_start_of_sim_time_callback(int (*cb)(void *), void *cb_...
  function gpi_register_end_of_sim_time_callback (line 753) | int gpi_register_end_of_sim_time_callback(void (*cb)(void *), void *cb_d...
  function gpi_register_finalize_callback (line 758) | int gpi_register_finalize_callback(void (*cb)(void *), void *cb_data) {
  function gpi_get_simulator_args (line 763) | int gpi_get_simulator_args(int *argc, char const *const **argv) {

FILE: src/cocotb/share/lib/gpi/fli/FliCbHdl.cpp
  function handle_fli_callback (line 13) | void handle_fli_callback(void *data) {

FILE: src/cocotb/share/lib/gpi/fli/FliImpl.cpp
  function GpiObjHdl (line 89) | GpiObjHdl *FliImpl::create_gpi_obj_from_handle(void *hdl,
  function GpiObjHdl (line 221) | GpiObjHdl *FliImpl::get_child_from_handle(void *raw_hdl, GpiObjHdl *) {
  function GpiObjHdl (line 247) | GpiObjHdl *FliImpl::get_child_by_name(const std::string &name,
  function GpiObjHdl (line 363) | GpiObjHdl *FliImpl::get_child_by_index(int32_t index, GpiObjHdl *parent) {
  function GpiObjHdl (line 549) | GpiObjHdl *FliImpl::get_root_handle(const char *name) {
  function GpiCbHdl (line 595) | GpiCbHdl *FliImpl::register_timed_callback(uint64_t time,
  function GpiCbHdl (line 612) | GpiCbHdl *FliImpl::register_readonly_callback(int (*cb_func)(void *),
  function GpiCbHdl (line 626) | GpiCbHdl *FliImpl::register_readwrite_callback(int (*cb_func)(void *),
  function GpiCbHdl (line 640) | GpiCbHdl *FliImpl::register_nexttime_callback(int (*cb_func)(void *),
  function GpiIterator (line 654) | GpiIterator *FliImpl::iterate_handle(GpiObjHdl *obj_hdl,
  function startup_callback (line 1108) | static int startup_callback(void *) {
  function shutdown_callback (line 1115) | static int shutdown_callback(void *) {
  function register_impl (line 1154) | static void register_impl() {
  function COCOTBFLI_EXPORT (line 1163) | COCOTBFLI_EXPORT void cocotb_init() {

FILE: src/cocotb/share/lib/gpi/fli/FliImpl.hpp
  class FliImpl (line 24) | class FliImpl
    method FliImpl (line 418) | FliImpl(const std::string &name)
  class FliSignalObjHdl (line 25) | class FliSignalObjHdl
    method FliSignalObjHdl (line 201) | FliSignalObjHdl(GpiImplInterface *impl, void *hdl, gpi_objtype objtype,
    method is_variable (line 213) | bool is_variable() { return m_is_var; }
  class FliCbHdl (line 27) | class FliCbHdl : public GpiCbHdl {
  class FliProcessCbHdl (line 34) | class FliProcessCbHdl : public FliCbHdl {
    method FliProcessCbHdl (line 36) | FliProcessCbHdl(GpiImplInterface *impl) : FliCbHdl(impl) {}
    method set_mti_proc (line 38) | void set_mti_proc(mtiProcessIdT mti_proc) noexcept {
  class FliProcessCbHdlCache (line 57) | class FliProcessCbHdlCache {
    method FliProcessCbHdlCache (line 59) | FliProcessCbHdlCache(FliImpl *impl) : m_impl(impl) {}
    method FliProcessCbHdlType (line 61) | FliProcessCbHdlType *acquire() {
    method release (line 77) | void release(FliProcessCbHdlType *cb_hdl) { free_list.push_back(cb_hdl...
  class FliSignalCbHdl (line 84) | class FliSignalCbHdl : public FliProcessCbHdl {
    method set_signal_and_edge (line 92) | void set_signal_and_edge(FliSignalObjHdl *signal, gpi_edge edge) noexc...
  class FliSimPhaseCbHdl (line 106) | class FliSimPhaseCbHdl : public FliProcessCbHdl {
  class FliReadWriteCbHdl (line 117) | class FliReadWriteCbHdl : public FliSimPhaseCbHdl {
  class FliNextPhaseCbHdl (line 123) | class FliNextPhaseCbHdl : public FliSimPhaseCbHdl {
  class FliReadOnlyCbHdl (line 129) | class FliReadOnlyCbHdl : public FliSimPhaseCbHdl {
  class FliStartupCbHdl (line 135) | class FliStartupCbHdl : public FliCbHdl {
    method FliStartupCbHdl (line 137) | FliStartupCbHdl(GpiImplInterface *impl) : FliCbHdl(impl) {}
  class FliShutdownCbHdl (line 144) | class FliShutdownCbHdl : public FliCbHdl {
    method FliShutdownCbHdl (line 146) | FliShutdownCbHdl(GpiImplInterface *impl) : FliCbHdl(impl) {}
  class FliTimedCbHdl (line 153) | class FliTimedCbHdl : public FliProcessCbHdl {
    method set_time (line 161) | void set_time(uint64_t time) noexcept { m_time = time; }
  class FliObj (line 173) | class FliObj {
    method FliObj (line 175) | FliObj(int acc_type, int acc_full_type)
    method get_acc_type (line 180) | int get_acc_type() { return m_acc_type; }
    method get_acc_full_type (line 181) | int get_acc_full_type() { return m_acc_full_type; }
  class FliObjHdl (line 188) | class FliObjHdl : public GpiObjHdl, public FliObj {
    method FliObjHdl (line 190) | FliObjHdl(GpiImplInterface *impl, void *hdl, gpi_objtype objtype,
  class FliSignalObjHdl (line 199) | class FliSignalObjHdl : public GpiSignalObjHdl, public FliObj {
    method FliSignalObjHdl (line 201) | FliSignalObjHdl(GpiImplInterface *impl, void *hdl, gpi_objtype objtype,
    method is_variable (line 213) | bool is_variable() { return m_is_var; }
  class FliValueObjHdl (line 219) | class FliValueObjHdl : public FliSignalObjHdl {
    method FliValueObjHdl (line 221) | FliValueObjHdl(GpiImplInterface *impl, void *hdl, gpi_objtype objtype,
    method mtiTypeKindT (line 251) | mtiTypeKindT get_fli_typekind() { return m_fli_type; }
    method mtiTypeIdT (line 252) | mtiTypeIdT get_fli_typeid() { return m_val_type; }
  class FliEnumObjHdl (line 261) | class FliEnumObjHdl : public FliValueObjHdl {
    method FliEnumObjHdl (line 263) | FliEnumObjHdl(GpiImplInterface *impl, void *hdl, gpi_objtype objtype,
  class FliLogicObjHdl (line 283) | class FliLogicObjHdl : public FliValueObjHdl {
    method FliLogicObjHdl (line 285) | FliLogicObjHdl(GpiImplInterface *impl, void *hdl, gpi_objtype objtype,
  class FliIntObjHdl (line 312) | class FliIntObjHdl : public FliValueObjHdl {
    method FliIntObjHdl (line 314) | FliIntObjHdl(GpiImplInterface *impl, void *hdl, gpi_objtype objtype,
    method get_signed (line 322) | int get_signed() override {
  class FliRealObjHdl (line 336) | class FliRealObjHdl : public FliValueObjHdl {
    method FliRealObjHdl (line 338) | FliRealObjHdl(GpiImplInterface *impl, void *hdl, gpi_objtype objtype,
  class FliStringObjHdl (line 360) | class FliStringObjHdl : public FliValueObjHdl {
    method FliStringObjHdl (line 362) | FliStringObjHdl(GpiImplInterface *impl, void *hdl, gpi_objtype objtype,
  class FliIterator (line 385) | class FliIterator : public GpiIterator {
    type OneToMany (line 387) | enum OneToMany {
  class FliImpl (line 416) | class FliImpl : public GpiImplInterface {
    method FliImpl (line 418) | FliImpl(const std::string &name)

FILE: src/cocotb/share/lib/gpi/fli/FliObjHdl.cpp
  function GpiCbHdl (line 20) | GpiCbHdl *FliSignalObjHdl::register_value_change_callback(

FILE: src/cocotb/share/lib/gpi/gpi_priv.hpp
  class GpiCbHdl (line 22) | class GpiCbHdl
  class GpiImplInterface (line 23) | class GpiImplInterface
  class GpiIterator (line 24) | class GpiIterator
  class GpiCbHdl (line 25) | class GpiCbHdl
  function GpiHdl (line 28) | class GPI_EXPORT GpiHdl {
  function GpiObjHdl (line 58) | class GPI_EXPORT GpiObjHdl : public GpiHdl {
  function GpiSignalObjHdl (line 114) | class GPI_EXPORT GpiSignalObjHdl : public GpiObjHdl {
  function GpiCbHdl (line 145) | class GPI_EXPORT GpiCbHdl : public GpiHdl {
  function GpiIterator (line 198) | class GPI_EXPORT GpiIterator : public GpiHdl {
  function GpiImplInterface (line 224) | class GPI_EXPORT GpiImplInterface {

FILE: src/cocotb/share/lib/gpi/logging.cpp
  function gpi_native_logger_vlog (line 27) | static void gpi_native_logger_vlog(void *, const char *name,
  function gpi_log_ (line 101) | void gpi_log_(const char *name, enum gpi_log_level level, const char *pa...
  function gpi_vlog_ (line 109) | void gpi_vlog_(const char *name, enum gpi_log_level level, const char *p...
  type gpi_log_level (line 123) | enum gpi_log_level
  function gpi_native_logger_set_level (line 136) | int gpi_native_logger_set_level(enum gpi_log_level level) {
  function gpi_get_log_handler (line 142) | void gpi_get_log_handler(gpi_log_handler_ftype *handler,
  function gpi_set_log_handler (line 148) | void gpi_set_log_handler(gpi_log_handler_ftype handler,

FILE: src/cocotb/share/lib/gpi/logging.hpp
  type gpi_log_level (line 33) | enum gpi_log_level
  type gpi_log_level (line 103) | enum gpi_log_level
  type gpi_log_level (line 124) | enum gpi_log_level

FILE: src/cocotb/share/lib/gpi/vhpi/VhpiCbHdl.cpp
  function handle_vhpi_callback (line 14) | void handle_vhpi_callback(const vhpiCbDataT *cb_data) {

FILE: src/cocotb/share/lib/gpi/vhpi/VhpiImpl.cpp
  function log10int (line 79) | static int32_t log10int(uint64_t v) {
  function is_const (line 146) | bool is_const(vhpiHandleT hdl) {
  function is_enum_logic (line 161) | bool is_enum_logic(vhpiHandleT hdl) {
  function is_enum_char (line 224) | bool is_enum_char(vhpiHandleT hdl) {
  function is_enum_boolean (line 236) | bool is_enum_boolean(vhpiHandleT hdl) {
  function compare_names (line 274) | static bool compare_names(const std::string &a, const std::string &b) {
  function GpiObjHdl (line 287) | GpiObjHdl *VhpiImpl::create_gpi_obj_from_handle(vhpiHandleT new_hdl,
  function fully_qualified_name (line 508) | static std::string fully_qualified_name(const std::string &name,
  function GpiObjHdl (line 523) | GpiObjHdl *VhpiImpl::get_child_from_handle(void *raw_hdl, GpiObjHdl *par...
  function GpiObjHdl (line 547) | GpiObjHdl *VhpiImpl::get_child_by_name(const std::string &name,
  function GpiObjHdl (line 884) | GpiObjHdl *VhpiImpl::get_root_handle(const char *name) {
  function GpiIterator (line 984) | GpiIterator *VhpiImpl::iterate_handle(GpiObjHdl *obj_hdl,
  function GpiCbHdl (line 1005) | GpiCbHdl *VhpiImpl::register_timed_callback(uint64_t time,
  function GpiCbHdl (line 1021) | GpiCbHdl *VhpiImpl::register_readwrite_callback(int (*cb_func)(void *),
  function GpiCbHdl (line 1036) | GpiCbHdl *VhpiImpl::register_readonly_callback(int (*cb_func)(void *),
  function GpiCbHdl (line 1051) | GpiCbHdl *VhpiImpl::register_nexttime_callback(int (*cb_func)(void *),
  function startup_callback (line 1085) | static int startup_callback(void *) {
  function shutdown_callback (line 1092) | static int shutdown_callback(void *) {
  function vhpi_main (line 1135) | static void vhpi_main() {
  function register_impl (line 1145) | static void register_impl() {
  function COCOTBVHPI_EXPORT (line 1158) | COCOTBVHPI_EXPORT void vhpi_startup_routines_bootstrap() {

FILE: src/cocotb/share/lib/gpi/vhpi/VhpiImpl.hpp
  function __check_vhpi_error (line 40) | static inline void __check_vhpi_error(const char *file, const char *func,
  class VhpiCbHdl (line 83) | class VhpiCbHdl : public GpiCbHdl {
  class VhpiSignalObjHdl (line 97) | class VhpiSignalObjHdl
    method VhpiSignalObjHdl (line 201) | VhpiSignalObjHdl(GpiImplInterface *impl, vhpiHandleT hdl,
  class VhpiValueCbHdl (line 99) | class VhpiValueCbHdl : public VhpiCbHdl {
  class VhpiTimedCbHdl (line 110) | class VhpiTimedCbHdl : public VhpiCbHdl {
  class VhpiReadOnlyCbHdl (line 115) | class VhpiReadOnlyCbHdl : public VhpiCbHdl {
  class VhpiNextPhaseCbHdl (line 120) | class VhpiNextPhaseCbHdl : public VhpiCbHdl {
  class VhpiStartupCbHdl (line 125) | class VhpiStartupCbHdl : public VhpiCbHdl {
    method run (line 132) | int run() override {
    method remove (line 143) | int remove() override {
  class VhpiShutdownCbHdl (line 149) | class VhpiShutdownCbHdl : public VhpiCbHdl {
    method run (line 156) | int run() override {
    method remove (line 167) | int remove() override {
  class VhpiReadWriteCbHdl (line 173) | class VhpiReadWriteCbHdl : public VhpiCbHdl {
  class VhpiArrayObjHdl (line 178) | class VhpiArrayObjHdl : public GpiObjHdl {
    method VhpiArrayObjHdl (line 180) | VhpiArrayObjHdl(GpiImplInterface *impl, vhpiHandleT hdl,
  class VhpiObjHdl (line 189) | class VhpiObjHdl : public GpiObjHdl {
    method VhpiObjHdl (line 191) | VhpiObjHdl(GpiImplInterface *impl, vhpiHandleT hdl, gpi_objtype objtype)
  class VhpiSignalObjHdl (line 199) | class VhpiSignalObjHdl : public GpiSignalObjHdl {
    method VhpiSignalObjHdl (line 201) | VhpiSignalObjHdl(GpiImplInterface *impl, vhpiHandleT hdl,
  class VhpiLogicSignalObjHdl (line 234) | class VhpiLogicSignalObjHdl : public VhpiSignalObjHdl {
    method VhpiLogicSignalObjHdl (line 236) | VhpiLogicSignalObjHdl(GpiImplInterface *impl, vhpiHandleT hdl,
  class VhpiIterator (line 249) | class VhpiIterator : public GpiIterator {
  class VhpiImpl (line 267) | class VhpiImpl : public GpiImplInterface {
    method VhpiImpl (line 269) | VhpiImpl(const std::string &name) : GpiImplInterface(name) {}

FILE: src/cocotb/share/lib/gpi/vhpi/VhpiSignal.cpp
  function vhpiPutValueModeT (line 35) | vhpiPutValueModeT map_put_value_mode(gpi_set_action action) {
  function vhpiEnumT (line 188) | vhpiEnumT VhpiSignalObjHdl::chr2vhpi(const char value) {
  function GpiCbHdl (line 544) | GpiCbHdl *VhpiSignalObjHdl::register_value_change_callback(

FILE: src/cocotb/share/lib/gpi/vpi/VpiCbHdl.cpp
  function handle_vpi_callback_ (line 18) | static int32_t handle_vpi_callback_(VpiCbHdl *cb_hdl) {
  function handle_vpi_callback (line 40) | int32_t handle_vpi_callback(p_cb_data cb_data) {

FILE: src/cocotb/share/lib/gpi/vpi/VpiImpl.cpp
  function gpi_objtype (line 81) | static gpi_objtype to_gpi_objtype(int32_t vpitype, int num_elements = 0,
  function gpi_objtype (line 153) | static gpi_objtype const_type_to_gpi_objtype(int32_t const_type) {
  function GpiObjHdl (line 183) | GpiObjHdl *VpiImpl::create_gpi_obj_from_handle(vpiHandle new_hdl,
  function GpiObjHdl (line 338) | GpiObjHdl *VpiImpl::get_child_from_handle(void *raw_hdl, GpiObjHdl *pare...
  function GpiObjHdl (line 362) | GpiObjHdl *VpiImpl::get_child_by_name(const std::string &name,
  function GpiObjHdl (line 472) | GpiObjHdl *VpiImpl::get_child_by_index(int32_t index, GpiObjHdl *parent) {
  function GpiObjHdl (line 603) | GpiObjHdl *VpiImpl::get_root_handle(const char *name) {
  function GpiIterator (line 661) | GpiIterator *VpiImpl::iterate_handle(GpiObjHdl *obj_hdl,
  function GpiCbHdl (line 684) | GpiCbHdl *VpiImpl::register_timed_callback(uint64_t time,
  function GpiCbHdl (line 699) | GpiCbHdl *VpiImpl::register_readwrite_callback(int (*cb_func)(void *),
  function GpiCbHdl (line 713) | GpiCbHdl *VpiImpl::register_readonly_callback(int (*cb_func)(void *),
  function GpiCbHdl (line 727) | GpiCbHdl *VpiImpl::register_nexttime_callback(int (*cb_func)(void *),
  function startup_callback (line 772) | static int startup_callback(void *) {
  function shutdown_callback (line 779) | static int shutdown_callback(void *) {
  function vpi_main (line 822) | static void vpi_main() {
  function register_impl (line 842) | static void register_impl() {
  function COCOTBVPI_EXPORT (line 855) | COCOTBVPI_EXPORT void vlog_startup_routines_bootstrap() {

FILE: src/cocotb/share/lib/gpi/vpi/VpiImpl.hpp
  function __check_vpi_error (line 29) | static inline void __check_vpi_error(const char *file, const char *func,
  class VpiCbHdl (line 73) | class VpiCbHdl : public GpiCbHdl {
  class VpiSignalObjHdl (line 87) | class VpiSignalObjHdl
    method VpiSignalObjHdl (line 188) | VpiSignalObjHdl(GpiImplInterface *impl, vpiHandle hdl, gpi_objtype obj...
  class VpiValueCbHdl (line 89) | class VpiValueCbHdl : public VpiCbHdl {
  class VpiTimedCbHdl (line 100) | class VpiTimedCbHdl : public VpiCbHdl {
  class VpiReadOnlyCbHdl (line 105) | class VpiReadOnlyCbHdl : public VpiCbHdl {
  class VpiNextPhaseCbHdl (line 110) | class VpiNextPhaseCbHdl : public VpiCbHdl {
  class VpiReadWriteCbHdl (line 115) | class VpiReadWriteCbHdl : public VpiCbHdl {
  class VpiStartupCbHdl (line 120) | class VpiStartupCbHdl : public VpiCbHdl {
    method run (line 127) | int run() override {
    method remove (line 138) | int remove() override {
  class VpiShutdownCbHdl (line 144) | class VpiShutdownCbHdl : public VpiCbHdl {
    method run (line 151) | int run() override {
    method remove (line 162) | int remove() override {
  class VpiArrayObjHdl (line 168) | class VpiArrayObjHdl : public GpiObjHdl {
    method VpiArrayObjHdl (line 170) | VpiArrayObjHdl(GpiImplInterface *impl, vpiHandle hdl, gpi_objtype objt...
  class VpiObjHdl (line 177) | class VpiObjHdl : public GpiObjHdl {
    method VpiObjHdl (line 179) | VpiObjHdl(GpiImplInterface *impl, vpiHandle hdl, gpi_objtype objtype)
  class VpiSignalObjHdl (line 186) | class VpiSignalObjHdl : public GpiSignalObjHdl {
    method VpiSignalObjHdl (line 188) | VpiSignalObjHdl(GpiImplInterface *impl, vpiHandle hdl, gpi_objtype obj...
  class VpiIterator (line 216) | class VpiIterator : public GpiIterator {
  class VpiSingleIterator (line 234) | class VpiSingleIterator : public GpiIterator {
    method VpiSingleIterator (line 236) | VpiSingleIterator(GpiImplInterface *impl, GpiObjHdl *hdl, int32_t vpit...
  class VpiPackageIterator (line 257) | class VpiPackageIterator : public GpiIterator {
    method VpiPackageIterator (line 259) | VpiPackageIterator(GpiImplInterface *impl)
  class VpiImpl (line 281) | class VpiImpl : public GpiImplInterface {
    method VpiImpl (line 283) | VpiImpl(const std::string &name) : GpiImplInterface(name) {}

FILE: src/cocotb/share/lib/gpi/vpi/VpiSignal.cpp
  function GpiCbHdl (line 235) | GpiCbHdl *VpiSignalObjHdl::register_value_change_callback(

FILE: src/cocotb/share/lib/pygpi/bind.cpp
  type PythonCallback (line 28) | struct PythonCallback {
    method PythonCallback (line 29) | PythonCallback(PyObject *func, PyObject *_args, PyObject *_kwargs)
  class GpiClock (line 46) | class GpiClock
    method GpiClock (line 847) | GpiClock(GpiObjHdl *clk_sig) : clk_signal(clk_sig) {}
  type gpi_hdl_Object (line 52) | struct gpi_hdl_Object {
  function PyObject (line 61) | static PyObject *gpi_hdl_repr(gpi_hdl_Object<gpi_hdl_type> *self) {
  function Py_hash_t (line 68) | static Py_hash_t gpi_hdl_hash(gpi_hdl_Object<gpi_hdl_type> *self) {
  function PyObject (line 82) | static PyObject *gpi_hdl_New(gpi_hdl_type hdl) {
  function PyObject (line 97) | static PyObject *gpi_hdl_richcompare(PyObject *self, PyObject *other, in...
  function PyTypeObject (line 119) | PyTypeObject fill_common_slots() {
  type sim_time (line 143) | struct sim_time {
  function handle_gpi_callback (line 163) | int handle_gpi_callback(void *user_data) {
  function PyObject (line 201) | static PyObject *register_readonly_callback(PyObject *, PyObject *args) {
  function PyObject (line 242) | static PyObject *register_rwsynch_callback(PyObject *, PyObject *args) {
  function PyObject (line 283) | static PyObject *register_nextstep_callback(PyObject *, PyObject *args) {
  function PyObject (line 328) | static PyObject *register_timed_callback(PyObject *, PyObject *args) {
  function PyObject (line 389) | static PyObject *register_value_change_callback(
  function PyObject (line 443) | static PyObject *iterate(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *ar...
  function PyObject (line 455) | static PyObject *package_iterate(PyObject *, PyObject *) {
  function PyObject (line 461) | static PyObject *iterator_next(gpi_hdl_Object<gpi_iterator_hdl> *self) {
  function PyObject (line 476) | static PyObject *get_signal_val_binstr(gpi_hdl_Object<gpi_sim_hdl> *self,
  function PyObject (line 489) | static PyObject *get_signal_val_str(gpi_hdl_Object<gpi_sim_hdl> *self,
  function PyObject (line 502) | static PyObject *get_signal_val_real(gpi_hdl_Object<gpi_sim_hdl> *self,
  function PyObject (line 508) | static PyObject *get_signal_val_long(gpi_hdl_Object<gpi_sim_hdl> *self,
  function PyObject (line 514) | static PyObject *set_signal_val_binstr(gpi_hdl_Object<gpi_sim_hdl> *self,
  function PyObject (line 527) | static PyObject *set_signal_val_str(gpi_hdl_Object<gpi_sim_hdl> *self,
  function PyObject (line 540) | static PyObject *set_signal_val_real(gpi_hdl_Object<gpi_sim_hdl> *self,
  function PyObject (line 553) | static PyObject *set_signal_val_int(gpi_hdl_Object<gpi_sim_hdl> *self,
  function PyObject (line 566) | static PyObject *get_definition_name(gpi_hdl_Object<gpi_sim_hdl> *self,
  function PyObject (line 572) | static PyObject *get_definition_file(gpi_hdl_Object<gpi_sim_hdl> *self,
  function PyObject (line 578) | static PyObject *get_handle_by_name(gpi_hdl_Object<gpi_sim_hdl> *self,
  function PyObject (line 604) | static PyObject *get_handle_by_index(gpi_hdl_Object<gpi_sim_hdl> *self,
  function PyObject (line 617) | static PyObject *get_root_handle(PyObject *, PyObject *args) {
  function PyObject (line 637) | static PyObject *get_name_string(gpi_hdl_Object<gpi_sim_hdl> *self,
  function PyObject (line 643) | static PyObject *get_type(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *) {
  function PyObject (line 648) | static PyObject *get_const(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *) {
  function PyObject (line 653) | static PyObject *get_type_string(gpi_hdl_Object<gpi_sim_hdl> *self,
  function PyObject (line 659) | static PyObject *get_signed(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject ...
  function PyObject (line 664) | static PyObject *is_running(PyObject *, PyObject *) {
  function PyObject (line 671) | static PyObject *get_sim_time(PyObject *, PyObject *) {
  function PyObject (line 695) | static PyObject *get_precision(PyObject *, PyObject *) {
  function PyObject (line 712) | static PyObject *get_simulator_product(PyObject *, PyObject *) {
  function PyObject (line 721) | static PyObject *get_simulator_version(PyObject *, PyObject *) {
  function PyObject (line 730) | static PyObject *get_argv(PyObject *, PyObject *) {
  function PyObject (line 763) | static PyObject *get_num_elems(gpi_hdl_Object<gpi_sim_hdl> *self, PyObje...
  function PyObject (line 768) | static PyObject *get_range(gpi_hdl_Object<gpi_sim_hdl> *self, PyObject *) {
  function PyObject (line 776) | static PyObject *get_indexable(gpi_hdl_Object<gpi_sim_hdl> *self, PyObje...
  function PyObject (line 782) | static PyObject *stop_simulator(PyObject *, PyObject *) {
  function PyObject (line 792) | static PyObject *deregister(gpi_hdl_Object<gpi_cb_hdl> *self, PyObject *) {
  function PyObject (line 805) | static PyObject *set_gpi_log_level(PyObject *, PyObject *args) {
  function PyObject (line 817) | static PyObject *initialize_logger(PyObject *, PyObject *args) {
  function PyObject (line 828) | static PyObject *set_sim_event_callback(PyObject *, PyObject *args) {
  class GpiClock (line 845) | class GpiClock {
    method GpiClock (line 847) | GpiClock(GpiObjHdl *clk_sig) : clk_signal(clk_sig) {}
  function PyObject (line 936) | static PyObject *clock_create(PyObject *, PyObject *args) {
  function clock_dealloc (line 964) | static void clock_dealloc(PyObject *self) {
  function PyObject (line 986) | static PyObject *clock_start(gpi_hdl_Object<gpi_clk_hdl> *self,
  function PyObject (line 1018) | static PyObject *clk_stop(gpi_hdl_Object<gpi_clk_hdl> *self, PyObject *) {
  function add_module_constants (line 1024) | static int add_module_constants(PyObject *simulator) {
  function add_module_types (line 1063) | static int add_module_types(PyObject *simulator) {
  type PyModuleDef (line 1227) | struct PyModuleDef
  function PyMODINIT_FUNC (line 1244) | PyMODINIT_FUNC PyInit_simulator(void) {

FILE: src/cocotb/share/lib/pygpi/embed.cpp
  function get_interpreter_path (line 37) | static int get_interpreter_path(wchar_t *path, size_t path_size) {
  function pygpi_init_debug (line 73) | static void pygpi_init_debug() {
  function PYGPI_EXPORT (line 89) | PYGPI_EXPORT void initialize(void) {
  function finalize (line 208) | static void finalize(void *) {
  function start_of_sim_time (line 225) | static int start_of_sim_time(void *) {
  function end_of_sim_time (line 270) | static void end_of_sim_time(void *) {

FILE: src/cocotb/share/lib/pygpi/logging.cpp
  function fallback_handler (line 26) | static void fallback_handler(const char *name, enum gpi_log_level level,
  function pygpi_log_handler (line 46) | static void pygpi_log_handler(void *, const char *name,
  function pygpi_log (line 187) | void pygpi_log(enum gpi_log_level level, const char *pathname,
  function pygpi_logging_set_level (line 196) | void pygpi_logging_set_level(enum gpi_log_level level) {
  function pygpi_logging_initialize (line 201) | void pygpi_logging_initialize() {
  function pygpi_logging_configure (line 207) | void pygpi_logging_configure(PyObject *log_func, PyObject *get_logger) {
  function pygpi_logging_finalize (line 214) | void pygpi_logging_finalize() {

FILE: src/cocotb/share/lib/pygpi/pygpi_priv.hpp
  type gpi_log_level (line 20) | enum gpi_log_level
  type gpi_log_level (line 27) | enum gpi_log_level

FILE: src/cocotb/share/lib/utils.hpp
  class Deferable (line 14) | class Deferable {
    method Deferable (line 16) | constexpr Deferable(F f) : f_(f) {}
  function make_deferable (line 24) | constexpr Deferable<F> make_deferable(F f) {

FILE: src/cocotb/share/lib/verilator/verilator.cpp
  function sc_time_stamp (line 37) | double sc_time_stamp() {  // Called by $time in Verilog
  function settle_value_callbacks (line 46) | static inline bool settle_value_callbacks() {
  function wrap_up (line 60) | void wrap_up() {
  function main (line 78) | int main(int argc, char **argv) {

FILE: src/cocotb/simtime.py
  function convert (line 57) | def convert(
  function convert (line 67) | def convert(
  function convert (line 76) | def convert(
  function get_sim_time (line 117) | def get_sim_time(unit: Literal["step"] = "step", *, units: None = None) ...
  function get_sim_time (line 121) | def get_sim_time(
  function get_sim_time (line 126) | def get_sim_time(unit: TimeUnit = "step", *, units: None = None) -> float:
  function _ldexp10 (line 165) | def _ldexp10(frac: float, exp: int) -> float: ...
  function _ldexp10 (line 169) | def _ldexp10(frac: Fraction, exp: int) -> Fraction: ...
  function _ldexp10 (line 173) | def _ldexp10(frac: Decimal, exp: int) -> Decimal: ...
  function _ldexp10 (line 176) | def _ldexp10(frac: float | Fraction | Decimal, exp: int) -> float | Frac...
  function _get_time_from_sim_steps (line 186) | def _get_time_from_sim_steps(
  function _get_sim_steps (line 195) | def _get_sim_steps(
  function _get_log_time_scale (line 226) | def _get_log_time_scale(unit: Literal["fs", "ps", "ns", "us", "ms", "sec...
  function _init (line 261) | def _init() -> None:

FILE: src/cocotb/simulator.pyi
  class sim_callback (line 37) | class sim_callback:
    method deregister (line 38) | def deregister(self) -> None: ...
    method __eq__ (line 39) | def __eq__(self, other: object) -> bool: ...
    method __ne__ (line 40) | def __ne__(self, other: object) -> bool: ...
    method __hash__ (line 41) | def __hash__(self) -> int: ...
  class sim_obj_iterator (line 43) | class sim_obj_iterator:
    method __eq__ (line 44) | def __eq__(self, other: object) -> bool: ...
    method __ne__ (line 45) | def __ne__(self, other: object) -> bool: ...
    method __hash__ (line 46) | def __hash__(self) -> int: ...
    method __iter__ (line 47) | def __iter__(self) -> sim_obj_iterator: ...
    method __next__ (line 48) | def __next__(self) -> sim_obj: ...
  class sim_obj (line 50) | class sim_obj:
    method get_const (line 51) | def get_const(self) -> bool: ...
    method get_definition_file (line 52) | def get_definition_file(self) -> str: ...
    method get_definition_name (line 53) | def get_definition_name(self) -> str: ...
    method get_handle_by_index (line 54) | def get_handle_by_index(self, index: int) -> sim_obj | None: ...
    method get_handle_by_name (line 55) | def get_handle_by_name(
    method get_indexable (line 58) | def get_indexable(self) -> bool: ...
    method get_name_string (line 59) | def get_name_string(self) -> str: ...
    method get_num_elems (line 60) | def get_num_elems(self) -> int: ...
    method get_range (line 61) | def get_range(self) -> tuple[int, int, int]: ...
    method get_signal_val_binstr (line 62) | def get_signal_val_binstr(self) -> str: ...
    method get_signal_val_long (line 63) | def get_signal_val_long(self) -> int: ...
    method get_signal_val_real (line 64) | def get_signal_val_real(self) -> float: ...
    method get_signal_val_str (line 65) | def get_signal_val_str(self) -> bytes: ...
    method get_signed (line 66) | def get_signed(self) -> int: ...
    method get_type (line 67) | def get_type(self) -> int: ...
    method get_type_string (line 68) | def get_type_string(self) -> str: ...
    method iterate (line 69) | def iterate(self, mode: int) -> sim_obj_iterator: ...
    method set_signal_val_binstr (line 70) | def set_signal_val_binstr(self, action: int, value: str) -> None: ...
    method set_signal_val_int (line 71) | def set_signal_val_int(self, action: int, value: int) -> None: ...
    method set_signal_val_real (line 72) | def set_signal_val_real(self, action: int, value: float) -> None: ...
    method set_signal_val_str (line 73) | def set_signal_val_str(self, action: int, value: bytes) -> None: ...
    method __eq__ (line 74) | def __eq__(self, other: object) -> bool: ...
    method __ne__ (line 75) | def __ne__(self, other: object) -> bool: ...
    method __hash__ (line 76) | def __hash__(self) -> int: ...
  function get_precision (line 78) | def get_precision() -> int: ...
  function get_root_handle (line 79) | def get_root_handle(name: str | None) -> sim_obj | None: ...
  function get_sim_time (line 80) | def get_sim_time() -> tuple[int, int]: ...
  function get_simulator_product (line 81) | def get_simulator_product() -> str: ...
  function get_simulator_version (line 82) | def get_simulator_version() -> str: ...
  function get_simulator_args (line 83) | def get_simulator_args() -> list[str]: ...
  function is_running (line 84) | def is_running() -> bool: ...
  function set_gpi_log_level (line 85) | def set_gpi_log_level(level: int) -> None: ...
  function package_iterate (line 86) | def package_iterate() -> sim_obj_iterator: ...
  function register_nextstep_callback (line 87) | def register_nextstep_callback(
  function register_readonly_callback (line 90) | def register_readonly_callback(
  function register_rwsynch_callback (line 93) | def register_rwsynch_callback(func: Callable[..., Any], *args: Any) -> s...
  function register_timed_callback (line 94) | def register_timed_callback(
  function register_value_change_callback (line 97) | def register_value_change_callback(
  function stop_simulator (line 100) | def stop_simulator() -> None: ...
  class cpp_clock (line 102) | class cpp_clock:
    method start (line 103) | def start(
    method stop (line 106) | def stop(self) -> None: ...
  function clock_create (line 108) | def clock_create(hdl: sim_obj) -> cpp_clock: ...
  function initialize_logger (line 109) | def initialize_logger(
  function set_sim_event_callback (line 113) | def set_sim_event_callback(sim_event_callback: Callable[[], object]) -> ...

FILE: src/cocotb/task.py
  class _TaskState (line 53) | class _TaskState(DocEnum):
  class Task (line 65) | class Task(Generic[ResultType]):
    method __init__ (line 82) | def __init__(
    method locals (line 118) | def locals(self) -> SimpleNamespace:
    method get_name (line 146) | def get_name(self) -> str:
    method set_name (line 154) | def set_name(self, value: object) -> None:
    method _log (line 165) | def _log(self) -> logging.Logger:
    method __str__ (line 168) | def __str__(self) -> str:
    method _get_coro_stack (line 172) | def _get_coro_stack(self) -> traceback.StackSummary:
    method __repr__ (line 195) | def __repr__(self) -> str:
    method _ensure_started (line 233) | def _ensure_started(self) -> None:
    method _set_outcome (line 247) | def _set_outcome(
    method _schedule_resume (line 263) | def _schedule_resume(self, exc: BaseException | None = None) -> None:
    method _resume (line 268) | def _resume(self) -> None:
    method kill (line 381) | def kill(self) -> None:
    method complete (line 415) | def complete(self) -> TaskComplete[ResultType]:
    method join (line 436) | def join(self) -> Join[ResultType]:
    method _join (line 462) | def _join(self) -> Join[ResultType]:
    method cancel (line 465) | def cancel(self, msg: str | None = None) -> bool:
    method _cancel_now (line 508) | def _cancel_now(self, msg: str | None = None) -> bool:
    method _uncancel (line 544) | def _uncancel(self) -> None:
    method cancelled (line 552) | def cancelled(self) -> bool:
    method done (line 556) | def done(self) -> bool:
    method result (line 564) | def result(self) -> ResultType:
    method exception (line 582) | def exception(self) -> BaseException | None:
    method _add_done_callback (line 600) | def _add_done_callback(self, callback: Callable[[Task[ResultType]], No...
    method __await__ (line 613) | def __await__(self) -> Generator[Trigger, None, ResultType]:
  function current_task (line 623) | def current_task() -> Task[object]:
  class TaskComplete (line 634) | class TaskComplete(Trigger, Generic[ResultType]):
    method __new__ (line 649) | def __new__(cls, task: Task[ResultType]) -> TaskComplete[ResultType]:
    method _make (line 655) | def _make(cls, task: Task[ResultType]) -> Self:
    method _prime (line 661) | def _prime(self) -> None:
    method __repr__ (line 665) | def __repr__(self) -> str:
    method task (line 669) | def task(self) -> Task[ResultType]:
  class Join (line 674) | class Join(TaskComplete[ResultType]):
    method __new__ (line 704) | def __new__(cls, task: Task[ResultType]) -> Join[ResultType]:
    method __init__ (line 707) | def __init__(self, task: Task[ResultType]) -> None:
    method __await__ (line 710) | def __await__(self) -> Generator[Self, None, ResultType]:  # type: ign...

FILE: src/cocotb/triggers.py
  function __getattr__ (line 65) | def __getattr__(name: str) -> object:

FILE: src/cocotb/types/_abstract_array.py
  class AbstractArray (line 16) | class AbstractArray(Generic[T_co]):
    method left (line 39) | def left(self) -> int:
    method direction (line 44) | def direction(self) -> str:
    method right (line 49) | def right(self) -> int:
    method range (line 55) | def range(self) -> Range:
    method range (line 60) | def range(self, new_range: Range) -> None:
    method __len__ (line 66) | def __len__(self) -> int:
    method __iter__ (line 69) | def __iter__(self) -> Iterator[T_co]:
    method __reversed__ (line 73) | def __reversed__(self) -> Iterator[T_co]:
    method __contains__ (line 77) | def __contains__(self, item: object) -> bool:
    method __getitem__ (line 81) | def __getitem__(self, item: int) -> T_co: ...
    method __getitem__ (line 84) | def __getitem__(self, item: slice) -> AbstractArray[T_co]: ...
    method __getitem__ (line 87) | def __getitem__(self, item: int | slice) -> T_co | AbstractArray[T_co]...
    method index (line 89) | def index(
    method count (line 117) | def count(self, value: object) -> int:
  class AbstractMutableArray (line 133) | class AbstractMutableArray(AbstractArray[T]):
    method __setitem__ (line 144) | def __setitem__(self, item: int, value: T) -> None: ...
    method __setitem__ (line 147) | def __setitem__(self, item: slice, value: Iterable[T]) -> None: ...
    method __setitem__ (line 150) | def __setitem__(self, item: int | slice, value: T | Iterable[T]) -> No...

FILE: src/cocotb/types/_array.py
  class Array (line 18) | class Array(AbstractMutableArray[T]):
    method __init__ (line 142) | def __init__(self, value: Iterable[T], range: Range | int | None = Non...
    method _from_handle (line 163) | def _from_handle(
    method range (line 173) | def range(self) -> Range:
    method range (line 178) | def range(self, new_range: Range) -> None:
    method __iter__ (line 188) | def __iter__(self) -> Iterator[T]:
    method __reversed__ (line 191) | def __reversed__(self) -> Iterator[T]:
    method __contains__ (line 194) | def __contains__(self, item: object) -> bool:
    method __eq__ (line 197) | def __eq__(self, other: object) -> bool:
    method __getitem__ (line 208) | def __getitem__(self, item: int) -> T: ...
    method __getitem__ (line 211) | def __getitem__(self, item: slice) -> Array[T]: ...
    method __getitem__ (line 213) | def __getitem__(self, item: int | slice) -> T | Array[T]:
    method __setitem__ (line 248) | def __setitem__(self, item: int, value: T) -> None: ...
    method __setitem__ (line 251) | def __setitem__(self, item: slice, value: Iterable[T]) -> None: ...
    method __setitem__ (line 253) | def __setitem__(self, item: int | slice, value: T | Iterable[T]) -> None:
    method __repr__ (line 279) | def __repr__(self) -> str:
    method _translate_index (line 282) | def _translate_index(self, item: int) -> int:
    method __copy__ (line 288) | def __copy__(self) -> Array:
    method __deepcopy__ (line 291) | def __deepcopy__(self, memo: dict[int, Any]) -> Array:

FILE: src/cocotb/types/_indexing.py
  function indexing_changed (line 12) | def indexing_changed(range: Range) -> bool:
  class IndexingChangedWarning (line 16) | class IndexingChangedWarning(UserWarning):

FILE: src/cocotb/types/_logic.py
  class Logic (line 62) | class Logic:
    method _singleton (line 120) | def _singleton(cls, _repr: int) -> Self:
    method __new__ (line 126) | def __new__(
    method __and__ (line 149) | def __and__(self, other: Self) -> Self:
    method __rand__ (line 169) | def __rand__(self, other: Self) -> Self:
    method __or__ (line 172) | def __or__(self, other: Self) -> Self:
    method __ror__ (line 192) | def __ror__(self, other: Self) -> Self:
    method __xor__ (line 195) | def __xor__(self, other: Self) -> Self:
    method __rxor__ (line 215) | def __rxor__(self, other: Self) -> Self:
    method __invert__ (line 218) | def __invert__(self) -> Self:
    method __eq__ (line 221) | def __eq__(self, other: object) -> bool:
    method __repr__ (line 235) | def __repr__(self) -> str:
    method __str__ (line 238) | def __str__(self) -> str:
    method __bool__ (line 243) | def __bool__(self) -> bool:
    method __int__ (line 250) | def __int__(self) -> int:
    method __bool__ (line 259) | def __bool__(self) -> bool:
    method __int__ (line 262) | def __int__(self) -> int:
    method __index__ (line 267) | def __index__(self) -> int:
    method resolve (line 270) | def resolve(self, resolver: ResolverLiteral) -> Self:
    method __len__ (line 302) | def __len__(self) -> int:
    method is_resolvable (line 306) | def is_resolvable(self) -> bool:
    method __copy__ (line 313) | def __copy__(self) -> Logic:
    method __deepcopy__ (line 316) | def __deepcopy__(self, memo: dict[int, object]) -> Logic:
  class Bit (line 320) | class Bit(Logic):

FILE: src/cocotb/types/_logic_array.py
  class LogicArray (line 35) | class LogicArray(AbstractMutableArray[Logic]):
    method __init__ (line 241) | def __init__(
    method _get_array (line 319) | def _get_array(self) -> list[Logic]:
    method _get_str (line 325) | def _get_str(self) -> str:
    method _get_int (line 335) | def _get_int(self) -> int:
    method from_unsigned (line 357) | def from_unsigned(
    method from_signed (line 435) | def from_signed(
    method from_bytes (line 516) | def from_bytes(
    method _from_handle (line 552) | def _from_handle(cls, value: str, warn_indexing: bool) -> LogicArray:
    method range (line 565) | def range(self) -> Range:
    method range (line 570) | def range(self, new_range: Range) -> None:
    method __iter__ (line 580) | def __iter__(self) -> Iterator[Logic]:
    method __reversed__ (line 583) | def __reversed__(self) -> Iterator[Logic]:
    method __contains__ (line 586) | def __contains__(self, item: object) -> bool:
    method __eq__ (line 589) | def __eq__(
    method binstr (line 650) | def binstr(self) -> str:
    method binstr (line 671) | def binstr(self, value: str) -> None:
    method is_resolvable (line 675) | def is_resolvable(self) -> bool:
    method integer (line 683) | def integer(self) -> int:
    method integer (line 708) | def integer(self, value: int) -> None:
    method signed_integer (line 715) | def signed_integer(self) -> int:
    method signed_integer (line 741) | def signed_integer(self, value: int) -> None:
    method buff (line 749) | def buff(self) -> bytes:
    method buff (line 775) | def buff(self, value: bytes) -> None:
    method to_unsigned (line 778) | def to_unsigned(self) -> int:
    method to_signed (line 792) | def to_signed(self) -> int:
    method to_bytes (line 810) | def to_bytes(
    method __getitem__ (line 830) | def __getitem__(self, item: int) -> Logic: ...
    method __getitem__ (line 833) | def __getitem__(self, item: slice) -> LogicArray: ...
    method __getitem__ (line 835) | def __getitem__(self, item: int | slice) -> Logic | LogicArray:
    method __setitem__ (line 871) | def __setitem__(self, item: int, value: LogicConstructibleT) -> None: ...
    method __setitem__ (line 874) | def __setitem__(
    method __setitem__ (line 878) | def __setitem__(
    method _translate_index (line 909) | def _translate_index(self, item: int) -> int:
    method __repr__ (line 915) | def __repr__(self) -> str:
    method __str__ (line 918) | def __str__(self) -> str:
    method __int__ (line 921) | def __int__(self) -> int:
    method __index__ (line 924) | def __index__(self) -> int:
    method __and__ (line 927) | def __and__(self, other: LogicArray) -> LogicArray:
    method __or__ (line 938) | def __or__(self, other: LogicArray) -> LogicArray:
    method __xor__ (line 949) | def __xor__(self, other: LogicArray) -> LogicArray:
    method __invert__ (line 960) | def __invert__(self) -> LogicArray:
    method __bool__ (line 965) | def __bool__(self) -> bool:
    method __bool__ (line 972) | def __bool__(self) -> bool:
    method resolve (line 977) | def resolve(self, resolver: ResolverLiteral) -> LogicArray:
    method __copy__ (line 1009) | def __copy__(self) -> LogicArray:
    method __deepcopy__ (line 1012) | def __deepcopy__(self, memo: dict[int, Any]) -> LogicArray:
    method __format__ (line 1021) | def __format__(self, spec: str, /) -> str:

FILE: src/cocotb/types/_range.py
  class Range (line 12) | class Range(Sequence[int]):
    method __init__ (line 72) | def __init__(self, left: int, direction: int) -> None: ...
    method __init__ (line 75) | def __init__(self, left: int, direction: str, right: int) -> None: ...
    method __init__ (line 78) | def __init__(self, left: int, *, right: int) -> None: ...
    method __init__ (line 80) | def __init__(
    method from_range (line 103) | def from_range(cls, range: range) -> Range:
    method to_range (line 111) | def to_range(self) -> range:
    method left (line 116) | def left(self) -> int:
    method direction (line 121) | def direction(self) -> str:
    method right (line 126) | def right(self) -> int:
    method __len__ (line 130) | def __len__(self) -> int:
    method __getitem__ (line 134) | def __getitem__(self, item: int) -> int: ...
    method __getitem__ (line 137) | def __getitem__(self, item: slice) -> Range: ...
    method __getitem__ (line 139) | def __getitem__(self, item: int | slice) -> int | Range:
    method __contains__ (line 148) | def __contains__(self, item: object) -> bool:
    method __iter__ (line 151) | def __iter__(self) -> Iterator[int]:
    method __reversed__ (line 154) | def __reversed__(self) -> Iterator[int]:
    method __eq__ (line 157) | def __eq__(self, other: object) -> bool:
    method __hash__ (line 162) | def __hash__(self) -> int:
    method __repr__ (line 165) | def __repr__(self) -> str:
    method index (line 168) | def index(
    method __copy__ (line 179) | def __copy__(self) -> Range:
    method __deepcopy__ (line 182) | def __deepcopy__(self, memo: dict[int, Any]) -> Range:
  function _guess_step (line 186) | def _guess_step(left: int, right: int) -> int:
  function _direction_to_step (line 193) | def _direction_to_step(direction: str) -> int:
  function _step_to_direction (line 202) | def _step_to_direction(step: int) -> str:

FILE: src/cocotb/types/_resolve.py
  class _random_resolve_table (line 24) | class _random_resolve_table(dict[str, str]):
    method __init__ (line 25) | def __init__(self) -> None:
    method __missing__ (line 31) | def __missing__(self, _: str) -> str:
  function get_str_resolver (line 52) | def get_str_resolver(resolver: ResolverLiteral) -> Callable[[str], str]:
  function _init (line 71) | def _init() -> Callable[[str], str] | None:

FILE: src/cocotb/utils.py
  function get_time_from_sim_steps (line 30) | def get_time_from_sim_steps(
  function get_sim_steps (line 65) | def get_sim_steps(

FILE: src/cocotb_tools/_coverage.py
  function start_cocotb_library_coverage (line 9) | def start_cocotb_library_coverage() -> None:  # pragma: no cover

FILE: src/cocotb_tools/_env.py
  function exists (line 21) | def exists(name: str) -> bool:
  function as_str (line 33) | def as_str(name: str, default: str | None = None) -> str:
  function as_bool (line 46) | def as_bool(name: str, default: bool | None = None) -> bool:
  function as_list (line 81) | def as_list(
  function as_int (line 101) | def as_int(name: str, default: int | None = None) -> int:
  function as_path (line 114) | def as_path(name: str, default: Path | str | None = None) -> Path:
  function as_args (line 127) | def as_args(name: str, default: str | None = None) -> list[str]:

FILE: src/cocotb_tools/_vendor/distutils_version.py
  class Version (line 37) | class Version:
    method __init__ (line 44) | def __init__ (self, vstring=None):
    method __repr__ (line 48) | def __repr__ (self):
    method __eq__ (line 51) | def __eq__(self, other):
    method __lt__ (line 57) | def __lt__(self, other):
    method __le__ (line 63) | def __le__(self, other):
    method __gt__ (line 69) | def __gt__(self, other):
    method __ge__ (line 75) | def __ge__(self, other):
  class StrictVersion (line 99) | class StrictVersion (Version):
    method parse (line 135) | def parse (self, vstring):
    method __str__ (line 154) | def __str__ (self):
    method _cmp (line 167) | def _cmp (self, other):
  class LooseVersion (line 270) | class LooseVersion (Version):
    method __init__ (line 303) | def __init__ (self, vstring=None):
    method parse (line 308) | def parse (self, vstring):
    method __str__ (line 324) | def __str__ (self):
    method __repr__ (line 328) | def __repr__ (self):
    method _cmp (line 332) | def _cmp (self, other):

FILE: src/cocotb_tools/check_results.py
  function get_results (line 14) | def get_results(results_xml_file: Path) -> tuple[int, int]:
  function _get_parser (line 55) | def _get_parser() -> argparse.ArgumentParser:
  function main (line 64) | def main() -> int:

FILE: src/cocotb_tools/combine_results.py
  function _find_all (line 21) | def _find_all(name: Pattern, path: Path) -> Iterable[Path]:
  function _existing_path (line 29) | def _existing_path(path_str: str) -> Path:
  function _get_parser (line 36) | def _get_parser() -> argparse.ArgumentParser:
  function main (line 78) | def main() -> int:

FILE: src/cocotb_tools/config.py
  function _get_version (line 44) | def _get_version() -> str:
  function _help_vars_text (line 50) | def _help_vars_text() -> str:
  function pygpi_entry_point (line 112) | def pygpi_entry_point() -> str:
  function lib_name_path (line 118) | def lib_name_path(interface: str, simulator: str) -> Path:
  function _get_parser (line 175) | def _get_parser() -> argparse.ArgumentParser:
  function main (line 229) | def main() -> None:

FILE: src/cocotb_tools/ipython_support.py
  class SimTimePrompt (line 21) | class SimTimePrompt(Prompts):
    method in_prompt_tokens (line 26) | def in_prompt_tokens(self):
  function embed (line 37) | async def embed(user_ns: dict[str, Any] = {}) -> None:
  function run_ipython (line 95) | async def run_ipython(dut: Any) -> None:

FILE: src/cocotb_tools/pytest/_compat.py
  function is_cocotb_decorator (line 19) | def is_cocotb_decorator(obj: object) -> bool:
  function cocotb_decorator_as_pytest_marks (line 24) | def cocotb_decorator_as_pytest_marks(
  function _as_pytest_marks (line 65) | def _as_pytest_marks(

FILE: src/cocotb_tools/pytest/_controller.py
  class Controller (line 53) | class Controller:
    method __init__ (line 56) | def __init__(self, config: Config) -> None:
    method pytest_configure (line 92) | def pytest_configure(self, config: Config) -> None:
    method pytest_pycollect_makeitem (line 144) | def pytest_pycollect_makeitem(
    method pytest_runtest_setup (line 173) | def pytest_runtest_setup(self, item: Item) -> None:
    method _get_mangled_nodeid (line 185) | def _get_mangled_nodeid(self, report: TestReport) -> str:
    method pytest_sessionstart (line 225) | def pytest_sessionstart(self, session: Session) -> None:
    method pytest_sessionfinish (line 233) | def pytest_sessionfinish(
    method _collect (line 244) | def _collect(
    method pytest_fixture_setup (line 331) | def pytest_fixture_setup(
    method pytest_runtest_logreport (line 356) | def pytest_runtest_logreport(
    method _handle_test_reports (line 362) | def _handle_test_reports(self) -> None:
    method _notify_exception (line 386) | def _notify_exception(self, excinfo: ExceptionInfo) -> None:

FILE: src/cocotb_tools/pytest/_fixture.py
  class AsyncFixtureCachedResult (line 15) | class AsyncFixtureCachedResult(
    method __getitem__ (line 37) | def __getitem__(self, index: Any) -> Any:
  function resolve_fixture_arg (line 55) | def resolve_fixture_arg(arg: Any) -> Any:

FILE: src/cocotb_tools/pytest/_handle.py
  class MockSimHandle (line 15) | class MockSimHandle:
    method __getitem__ (line 18) | def __getitem__(self, key: str) -> MockSimHandle:
    method __getattr__ (line 22) | def __getattr__(self, key: str) -> MockSimHandle:
    method __call__ (line 26) | def __call__(self, *args: object, **kwargs: object) -> MockSimHandle:
    method __int__ (line 30) | def __int__(self) -> int:
    method __eq__ (line 34) | def __eq__(self, other: object) -> bool:
    method __nq__ (line 38) | def __nq__(self, other: object) -> bool:
    method __le__ (line 42) | def __le__(self, other: object) -> bool:
    method __lt__ (line 46) | def __lt__(self, other: object) -> bool:
    method __ge__ (line 50) | def __ge__(self, other: object) -> bool:
    method __gt__ (line 54) | def __gt__(self, other: object) -> bool:
    method __len__ (line 58) | def __len__(self) -> int:

FILE: src/cocotb_tools/pytest/_init.py
  function run_regression (line 16) | def run_regression() -> None:

FILE: src/cocotb_tools/pytest/_junitxml.py
  class JUnitXML (line 13) | class JUnitXML:
    method __init__ (line 14) | def __init__(self, log_xml: LogXML) -> None:
    method register (line 23) | def register(config: Config) -> None:
    method pytest_runtest_logreport (line 31) | def pytest_runtest_logreport(self, report: TestReport) -> None:

FILE: src/cocotb_tools/pytest/_logging.py
  function get_level (line 30) | def get_level(name: str) -> int:
  class SimContextFilter (line 42) | class SimContextFilter(Filter):
    method __init__ (line 45) | def __init__(self, config: Config) -> None:
    method filter (line 54) | def filter(self, record: LogRecord) -> bool:
    method _get_sim_time (line 69) | def _get_sim_time(self) -> int | float | None:
  class Logging (line 79) | class Logging:
    method __init__ (line 82) | def __init__(self, config: Config) -> None:
    method pytest_sessionstart (line 108) | def pytest_sessionstart(self, session: Session) -> None:

FILE: src/cocotb_tools/pytest/_option.py
  class Option (line 33) | class Option:
    method __init__ (line 37) | def __init__(
    method argument (line 64) | def argument(self) -> str:
    method add_to_parser (line 68) | def add_to_parser(self, parser: Parser, group: OptionGroup) -> None:
  function add_options_to_parser (line 134) | def add_options_to_parser(parser: Parser, name: str, options: Iterable[O...
  function populate_ini_to_options (line 148) | def populate_ini_to_options(config: Config, options: Iterable[Option]) -...
  function is_cocotb_option (line 162) | def is_cocotb_option(name: str) -> bool:

FILE: src/cocotb_tools/pytest/_regression.py
  class SimFailure (line 67) | class SimFailure(BaseException):
  function finish_on_exception (line 71) | def finish_on_exception(method: Callable[..., Any]) -> Callable[..., Any]:
  class RegressionManager (line 86) | class RegressionManager:
    method __init__ (line 91) | def __init__(
    method start_regression (line 205) | def start_regression(self) -> None:
    method pytest_sessionstart (line 212) | def pytest_sessionstart(self, session: Session) -> None:
    method pytest_report_header (line 222) | def pytest_report_header(self, config: Config, start_path: Path) -> st...
    method pytest_pycollect_makeitem (line 240) | def pytest_pycollect_makeitem(
    method pytest_runtestloop (line 259) | def pytest_runtestloop(self, session: Session) -> bool:
    method pytest_runtest_protocol (line 277) | def pytest_runtest_protocol(self, item: Item, nextitem: Item | None) -...
    method _item (line 290) | def _item(self) -> Item:
    method _nextitem (line 295) | def _nextitem(self) -> Item | None:
    method _collect (line 301) | def _collect(
    method _call_and_report (line 315) | def _call_and_report(
    method _completed (line 365) | def _completed(self, item: Item, when: When) -> TestReport:
    method _setup_completed (line 382) | def _setup_completed(self) -> None:
    method _setup (line 390) | def _setup(
    method _call_completed (line 425) | def _call_completed(self) -> None:
    method _teardown_completed (line 435) | def _teardown_completed(self) -> None:
    method _teardown (line 443) | def _teardown(
    method _get_item (line 472) | def _get_item(self) -> tuple[Item, Item | None]:
    method _pop_item (line 475) | def _pop_item(self) -> tuple[Item, Item | None]:
    method _notify_exception (line 480) | def _notify_exception(self, excinfo: ExceptionInfo) -> None:
    method _finish (line 484) | def _finish(self) -> None:
    method pytest_runtest_setup (line 499) | def pytest_runtest_setup(self, item: Item) -> None:
    method pytest_runtest_call (line 522) | def pytest_runtest_call(self, item: Item) -> None:
    method pytest_runtest_teardown (line 531) | def pytest_runtest_teardown(self, item: Item, nextitem: Item | None = ...
    method pytest_fixture_setup (line 546) | def pytest_fixture_setup(
    method _setup_async_generator (line 591) | def _setup_async_generator(
    method _setup_async_function (line 617) | def _setup_async_function(
    method pytest_pyfunc_call (line 635) | def pytest_pyfunc_call(self, pyfuncitem: Function) -> object | None:
    method pytest_runtest_makereport (line 666) | def pytest_runtest_makereport(
    method pytest_runtest_logreport (line 718) | def pytest_runtest_logreport(self, report: TestReport) -> None:
    method _add_teardown (line 737) | def _add_teardown(
    method _save_logging_state (line 777) | def _save_logging_state(self) -> None:
    method _restore_logging_state (line 782) | def _restore_logging_state(self) -> None:
    method _update_report_section (line 798) | def _update_report_section(
    method _on_sim_end (line 822) | def _on_sim_end(self) -> None:
    method _start (line 834) | def _start(self, running_test: TestManager) -> None:
    method _shutdown (line 848) | def _shutdown(self) -> None:
  function _check_interactive_exception (line 855) | def _check_interactive_exception(call: CallInfo, report: TestReport) -> ...
  function _interactive_exception (line 867) | def _interactive_exception(item: Item, call: CallInfo, report: TestRepor...
  function _to_timeout (line 875) | def _to_timeout(duration: float, unit: TimeUnit) -> tuple[float, TimeUnit]:
  function _get_timeout (line 880) | def _get_timeout(function: Function) -> tuple[float, TimeUnit] | None:
  function _wrap_with_timeout (line 887) | def _wrap_with_timeout(

FILE: src/cocotb_tools/pytest/_runner.py
  class Runner (line 20) | class Runner(Collector):
    method __init__ (line 23) | def __init__(
    method collect (line 41) | def collect(self) -> Iterable[Item | Collector]:

FILE: src/cocotb_tools/pytest/_test.py
  class RunningTestSetup (line 17) | class RunningTestSetup(TestManager):
    method __init__ (line 20) | def __init__(
    method add_task (line 33) | def add_task(self, task: Task[Any]) -> None:

FILE: src/cocotb_tools/pytest/_testbench.py
  class Testbench (line 12) | class Testbench(Module):

FILE: src/cocotb_tools/pytest/hdl.py
  function _get_simulator (line 44) | def _get_simulator(config: Config) -> str:
  class HDL (line 63) | class HDL:
    method __init__ (line 66) | def __init__(self, request: FixtureRequest) -> None:
    method simulator (line 206) | def simulator(self) -> str:
    method __setitem__ (line 210) | def __setitem__(self, key: str, value: object) -> None:
    method __getitem__ (line 214) | def __getitem__(self, key: str) -> object:
    method build (line 218) | def build(
    method test (line 316) | def test(
    method _apply_markers (line 438) | def _apply_markers(self, node: Any) -> None:
    method _mark_cocotb_runner (line 459) | def _mark_cocotb_runner(self, test_module: str = "", *args: str) -> None:
    method _mark_cocotb_sources (line 462) | def _mark_cocotb_sources(
    method _mark_cocotb_defines (line 467) | def _mark_cocotb_defines(self, **kwargs: object) -> None:
    method _mark_cocotb_parameters (line 470) | def _mark_cocotb_parameters(self, **kwargs: object) -> None:
    method _mark_cocotb_env (line 473) | def _mark_cocotb_env(self, **kwargs: str) -> None:
    method _mark_cocotb_includes (line 476) | def _mark_cocotb_includes(self, *args: PathLike) -> None:
    method _mark_cocotb_plusargs (line 479) | def _mark_cocotb_plusargs(self, *args: str) -> None:
    method _mark_cocotb_timescale (line 482) | def _mark_cocotb_timescale(self, unit: str, precision: str | None = No...
    method _mark_cocotb_seed (line 485) | def _mark_cocotb_seed(self, value: str | int) -> None:
    method _mark_cocotb_build_args (line 488) | def _mark_cocotb_build_args(self, *args: str | VHDL | Verilog) -> None:
    method _mark_cocotb_elab_args (line 491) | def _mark_cocotb_elab_args(self, *args: str) -> None:
    method _mark_cocotb_test_args (line 494) | def _mark_cocotb_test_args(self, *args: str) -> None:
    method _mark_cocotb_pre_cmd (line 497) | def _mark_cocotb_pre_cmd(self, *args: str) -> None:
    method _mark_cocotb_library (line 500) | def _mark_cocotb_library(self, name: str) -> None:
    method _mark_cocotb_waves (line 503) | def _mark_cocotb_waves(self, condition: bool = True) -> None:
    method _mark_cocotb_verbose (line 506) | def _mark_cocotb_verbose(self, condition: bool = True) -> None:
    method _mark_cocotb_always (line 509) | def _mark_cocotb_always(self, condition: bool = True) -> None:
    method _mark_cocotb_clean (line 512) | def _mark_cocotb_clean(self, condition: bool = True) -> None:

FILE: src/cocotb_tools/pytest/hookspecs.py
  function pytest_cocotb_make_hdl (line 16) | def pytest_cocotb_make_hdl(request: FixtureRequest) -> HDL | None:
  function pytest_cocotb_make_runner (line 32) | def pytest_cocotb_make_runner(simulator_name: str) -> Runner | None:

FILE: src/cocotb_tools/pytest/mark.py
  function cocotb_runner (line 23) | def cocotb_runner(test_module: str = "", *extra_test_module: str) -> Mar...
  function cocotb_test (line 57) | def cocotb_test() -> MarkDecorator:
  function cocotb_timeout (line 80) | def cocotb_timeout(duration: float, unit: TimeUnit) -> MarkDecorator:
  function cocotb_sources (line 105) | def cocotb_sources(
  function cocotb_defines (line 112) | def cocotb_defines(**define: object) -> MarkDecorator:
  function cocotb_parameters (line 117) | def cocotb_parameters(**parameter: object) -> MarkDecorator:
  function cocotb_env (line 122) | def cocotb_env(**env: str) -> MarkDecorator:
  function cocotb_includes (line 127) | def cocotb_includes(*include: PathLike) -> MarkDecorator:
  function cocotb_plusargs (line 132) | def cocotb_plusargs(*plusarg: str) -> MarkDecorator:
  function cocotb_timescale (line 137) | def cocotb_timescale(unit: str, precision: str | None = None) -> MarkDec...
  function cocotb_seed (line 142) | def cocotb_seed(value: str | int) -> MarkDecorator:
  function cocotb_build_args (line 147) | def cocotb_build_args(*arg: str | VHDL | Verilog) -> MarkDecorator:
  function cocotb_elab_args (line 152) | def cocotb_elab_args(*arg: str) -> MarkDecorator:
  function cocotb_test_args (line 157) | def cocotb_test_args(*arg: str) -> MarkDecorator:
  function cocotb_pre_cmd (line 162) | def cocotb_pre_cmd(*arg: str) -> MarkDecorator:
  function cocotb_library (line 167) | def cocotb_library(name: str) -> MarkDecorator:
  function cocotb_waves (line 172) | def cocotb_waves(condition: bool = True) -> MarkDecorator:
  function cocotb_verbose (line 177) | def cocotb_verbose(condition: bool = True) -> MarkDecorator:
  function cocotb_always (line 182) | def cocotb_always(condition: bool = True) -> MarkDecorator:
  function cocotb_clean (line 187) | def cocotb_clean(condition: bool = True) -> MarkDecorator:
  function _marker_description (line 192) | def _marker_description(marker: Callable[..., MarkDecorator]) -> str:
  function _register_markers (line 228) | def _register_markers(config: Config) -> None:

FILE: src/cocotb_tools/pytest/plugin.py
  function _to_timescale (line 74) | def _to_timescale(value: str) -> tuple[str, str]:
  function _to_dict (line 91) | def _to_dict(items: Iterable[str]) -> dict[str, object]:
  function _options_for_documentation (line 393) | def _options_for_documentation() -> ArgumentParser:
  function dut (line 423) | def dut() -> SimHandleBase:
  function hdl_session (line 446) | def hdl_session(request: FixtureRequest) -> HDL:
  function hdl (line 530) | def hdl(request: FixtureRequest, hdl_session: HDL) -> HDL:
  function pytest_addoption (line 603) | def pytest_addoption(parser: Parser, pluginmanager: PytestPluginManager)...
  function pytest_addhooks (line 607) | def pytest_addhooks(pluginmanager: PytestPluginManager) -> None:
  function pytest_cocotb_make_hdl (line 617) | def pytest_cocotb_make_hdl(request: FixtureRequest) -> HDL:
  function pytest_cocotb_make_runner (line 630) | def pytest_cocotb_make_runner(simulator_name: str) -> Runner:
  function pytest_configure (line 643) | def pytest_configure(config: Config) -> None:
  function pytest_pycollect_makeitem (line 671) | def pytest_pycollect_makeitem(
  function _is_cocotb_test_report (line 703) | def _is_cocotb_test_report(item: Any) -> bool:
  function pytest_report_teststatus (line 716) | def pytest_report_teststatus(
  function pytest_terminal_summary (line 739) | def pytest_terminal_summary(

FILE: src/cocotb_tools/runner.py
  function _get_max_parallel_build_jobs (line 63) | def _get_max_parallel_build_jobs() -> int:
  function _as_tcl_value (line 67) | def _as_tcl_value(value: str) -> str:
  function _as_sv_literal (line 94) | def _as_sv_literal(value: object) -> str:
  function _shlex_join (line 103) | def _shlex_join(split_command: Iterable[str]) -> str:
  class _Tag (line 114) | class _Tag(Generic[_T]):
    method __init__ (line 115) | def __init__(self, value: _T) -> None:
    method __repr__ (line 118) | def __repr__(self) -> str:
  class _ValueAndTag (line 122) | class _ValueAndTag(Generic[_T]):
    method __init__ (line 123) | def __init__(self, value: _T, tag: type[_Tag]) -> None:
  class _ValueAndOptionalTag (line 128) | class _ValueAndOptionalTag(Generic[_T]):
    method __init__ (line 129) | def __init__(self, value: _T, tag: type[_Tag] | None) -> None:
  class VHDL (line 134) | class VHDL(_Tag):
  class Verilog (line 138) | class Verilog(_Tag):
  class VerilatorControlFile (line 142) | class VerilatorControlFile(_Tag):
  function _determine_file_type (line 150) | def _determine_file_type(
  class Runner (line 166) | class Runner(ABC):
    method __init__ (line 169) | def __init__(self) -> None:
    method _simulator_in_path (line 182) | def _simulator_in_path(self) -> None:
    method _check_hdl_toplevel_lang (line 189) | def _check_hdl_toplevel_lang(self, hdl_toplevel_lang: str | None) -> str:
    method _set_env_common (line 229) | def _set_env_common(self) -> None:
    method _set_env_build (line 258) | def _set_env_build(self) -> None:
    method _set_env_test (line 261) | def _set_env_test(self) -> None:
    method _build_command (line 273) | def _build_command(self) -> Sequence[_Command]:
    method _test_command (line 277) | def _test_command(self) -> Sequence[_Command]:
    method _use_external_viewer (line 280) | def _use_external_viewer(self) -> bool:
    method _waves_file (line 284) | def _waves_file(self) -> str | None:
    method build (line 288) | def build(
    method test (line 412) | def test(
    method _get_include_options (line 631) | def _get_include_options(self, includes: Sequence[PathLike]) -> _Command:
    method _get_define_options (line 635) | def _get_define_options(self, defines: Mapping[str, object]) -> _Command:
    method _get_parameter_options (line 639) | def _get_parameter_options(self, parameters: Mapping[str, object]) -> ...
    method _execute (line 642) | def _execute(self, cmds: Sequence[_Command], cwd: PathLike) -> None:
    method _execute_cmds (line 651) | def _execute_cmds(
    method rm_build_folder (line 667) | def rm_build_folder(self, build_dir: Path) -> None:
    method verilog_sources (line 673) | def verilog_sources(self) -> list[Path]:
    method verilog_sources (line 677) | def verilog_sources(self, value: list[Path]) -> None:
    method _set_verilog_sources (line 680) | def _set_verilog_sources(
    method vhdl_sources (line 698) | def vhdl_sources(self) -> list[Path]:
    method vhdl_sources (line 702) | def vhdl_sources(self, value: list[Path]) -> None:
    method _set_vhdl_sources (line 705) | def _set_vhdl_sources(self, sources: Sequence[PathLike | VHDL]) -> None:
    method sources (line 721) | def sources(self) -> list[Path]:
    method sources (line 725) | def sources(self, value: list[Path]) -> None:
    method _set_sources (line 728) | def _set_sources(
    method build_args (line 746) | def build_args(self) -> list[str]:
    method build_args (line 750) | def build_args(self, value: list[str]) -> None:
    method _set_build_args (line 753) | def _set_build_args(self, build_args: Sequence[str | Verilog | VHDL]) ...
    method _get_sim_cmd_prefix (line 767) | def _get_sim_cmd_prefix(self) -> list[str]:
    method _get_sim_cmd_suffix (line 774) | def _get_sim_cmd_suffix(self) -> list[str]:
  function outdated (line 782) | def outdated(output: Path, dependencies: Iterable[Path]) -> bool:
  function get_abs_path (line 802) | def get_abs_path(path: PathLike) -> Path:
  class Icarus (line 812) | class Icarus(Runner):
    method _simulator_in_path (line 825) | def _simulator_in_path(self) -> None:
    method _get_include_options (line 829) | def _get_include_options(self, includes: Sequence[PathLike]) -> _Command:
    method _get_define_options (line 832) | def _get_define_options(self, defines: Mapping[str, object]) -> _Command:
    method _get_parameter_options (line 835) | def _get_parameter_options(self, parameters: Mapping[str, object]) -> ...
    method _use_external_viewer (line 841) | def _use_external_viewer(self) -> bool:
    method _waves_file (line 844) | def _waves_file(self) -> str | None:
    method _create_cmd_file (line 847) | def _create_cmd_file(self) -> None:
    method _create_iverilog_dump_file (line 852) | def _create_iverilog_dump_file(self) -> None:
    method sim_file (line 870) | def sim_file(self) -> Path:
    method iverilog_dump_file (line 874) | def iverilog_dump_file(self) -> Path:
    method cmds_file (line 878) | def cmds_file(self) -> Path:
    method _build_command (line 881) | def _build_command(self) -> list[_Command]:
    method _test_command (line 936) | def _test_command(self) -> list[_Command]:
  class Questa (line 961) | class Questa(Runner):
    method _simulator_in_path (line 971) | def _simulator_in_path(self) -> None:
    method _get_include_options (line 975) | def _get_include_options(self, includes: Sequence[PathLike]) -> _Command:
    method _get_define_options (line 978) | def _get_define_options(self, defines: Mapping[str, object]) -> _Command:
    method _get_parameter_options (line 983) | def _get_parameter_options(self, parameters: Mapping[str, object]) -> ...
    method _build_command (line 986) | def _build_command(self) -> list[_Command]:
    method _test_command (line 1041) | def _test_command(self) -> list[_Command]:
  class Ghdl (line 1116) | class Ghdl(Runner):
    method _set_env_test (line 1126) | def _set_env_test(self) -> None:
    method _simulator_in_path (line 1131) | def _simulator_in_path(self) -> None:
    method _is_mcode_backend (line 1135) | def _is_mcode_backend(self) -> bool:
    method _use_external_viewer (line 1146) | def _use_external_viewer(self) -> bool:
    method _waves_file (line 1149) | def _waves_file(self) -> str | None:
    method _get_include_options (line 1152) | def _get_include_options(self, includes: Sequence[PathLike]) -> _Command:
    method _get_define_options (line 1155) | def _get_define_options(self, defines: Mapping[str, object]) -> _Command:
    method _get_parameter_options (line 1158) | def _get_parameter_options(self, parameters: Mapping[str, object]) -> ...
    method _build_command (line 1161) | def _build_command(self) -> list[_Command]:
    method _test_command (line 1196) | def _test_command(self) -> list[_Command]:
  class Nvc (line 1245) | class Nvc(Runner):
    method __init__ (line 1257) | def __init__(self) -> None:
    method _set_env_test (line 1272) | def _set_env_test(self) -> None:
    method _simulator_in_path (line 1277) | def _simulator_in_path(self) -> None:
    method _get_include_options (line 1281) | def _get_include_options(self, includes: Sequence[PathLike]) -> _Command:
    method _get_define_options (line 1284) | def _get_define_options(self, defines: Mapping[str, object]) -> _Command:
    method _get_parameter_options (line 1287) | def _get_parameter_options(self, parameters: Mapping[str, object]) -> ...
    method _use_external_viewer (line 1290) | def _use_external_viewer(self) -> bool:
    method _waves_file (line 1293) | def _waves_file(self) -> str | None:
    method _build_command (line 1296) | def _build_command(self) -> list[_Command]:
    method _test_command (line 1326) | def _test_command(self) -> list[_Command]:
  class AldecBase (line 1351) | class AldecBase(Runner):
    method _simulator_in_path (line 1361) | def _simulator_in_path(self) -> None:
    method _get_include_options (line 1365) | def _get_include_options(self, includes: Sequence[PathLike]) -> _Command:
    method _get_define_options (line 1368) | def _get_define_options(self, defines: Mapping[str, object]) -> _Command:
    method _as_define_value (line 1374) | def _as_define_value(self, value: object) -> str:
    method _get_parameter_options (line 1389) | def _get_parameter_options(self, parameters: Mapping[str, object]) -> ...
    method _build_command (line 1392) | def _build_command(self) -> list[_Command]:
    method _test_command (line 1441) | def _test_command(self) -> list[_Command]:
    method _append_onerror_command (line 1502) | def _append_onerror_command(self, do_script: str) -> str:
    method _append_run_commands (line 1505) | def _append_run_commands(self, do_script: str) -> str:
    method _simulator_command (line 1509) | def _simulator_command(self, do_file: Any) -> list[_Command]:
    method _append_pre_cmd (line 1521) | def _append_pre_cmd(self, do_script: str) -> str:
  class Riviera (line 1528) | class Riviera(AldecBase):
    method _append_onerror_command (line 1535) | def _append_onerror_command(self, do_script: str) -> str:
    method _append_run_commands (line 1541) | def _append_run_commands(self, do_script: str) -> str:
    method _simulator_command (line 1547) | def _simulator_command(self, do_file: Any) -> list[_Command]:
    method _append_pre_cmd (line 1569) | def _append_pre_cmd(self, do_script: str) -> str:
  class ActiveHDL (line 1583) | class ActiveHDL(AldecBase):
    method _append_pre_cmd (line 1592) | def _append_pre_cmd(self, do_script: str) -> str:
  class Verilator (line 1598) | class Verilator(Runner):
    method _set_env_test (line 1609) | def _set_env_test(self) -> None:
    method _simulator_in_path (line 1614) | def _simulator_in_path(self) -> None:
    method _use_external_viewer (line 1618) | def _use_external_viewer(self) -> bool:
    method _waves_file (line 1621) | def _waves_file(self) -> str | None:
    method _simulator_in_path_build_only (line 1624) | def _simulator_in_path_build_only(self) -> None:
    method _get_include_options (line 1630) | def _get_include_options(self, includes: Sequence[PathLike]) -> _Command:
    method _get_define_options (line 1633) | def _get_define_options(self, defines: Mapping[str, object]) -> _Command:
    method _get_parameter_options (line 1636) | def _get_parameter_options(self, parameters: Mapping[str, object]) -> ...
    method _build_command (line 1639) | def _build_command(self) -> list[_Command]:
    method _test_command (line 1716) | def _test_command(self) -> list[_Command]:
  class Xcelium (line 1731) | class Xcelium(Runner):
    method _simulator_in_path (line 1743) | def _simulator_in_path(self) -> None:
    method _get_include_options (line 1747) | def _get_include_options(self, includes: Sequence[PathLike]) -> _Command:
    method _get_define_options (line 1750) | def _get_define_options(self, defines: Mapping[str, object]) -> _Command:
    method _as_define_value (line 1756) | def _as_define_value(self, value: object) -> str:
    method _get_parameter_options (line 1771) | def _get_parameter_options(self, parameters: Mapping[str, object]) -> ...
    method _build_command (line 1774) | def _build_command(self) -> list[_Command]:
    method _test_command (line 1834) | def _test_command(self) -> list[_Command]:
  class Vcs (line 1919) | class Vcs(Runner):
    method _simulator_in_path (line 1931) | def _simulator_in_path(self) -> None:
    method _get_include_options (line 1935) | def _get_include_options(self, includes: Sequence[PathLike]) -> _Command:
    method _get_define_options (line 1938) | def _get_define_options(self, defines: Mapping[str, object]) -> _Command:
    method _get_parameter_options (line 1943) | def _get_parameter_options(self, parameters: Mapping[str, object]) -> ...
    method sim_file (line 1952) | def sim_file(self) -> Path:
    method _build_opts (line 1956) | def _build_opts(self) -> list[str]:
    method _build_command (line 1973) | def _build_command(self) -> list[_Command]:
    method _test_command (line 1999) | def _test_command(self) -> list[_Command]:
  class Dsim (line 2023) | class Dsim(Runner):
    method _simulator_in_path (line 2033) | def _simulator_in_path(self) -> None:
    method _get_include_options (line 2037) | def _get_include_options(self, includes: Sequence[PathLike]) -> _Command:
    method _get_define_options (line 2040) | def _get_define_options(self, defines: Mapping[str, object]) -> _Command:
    method _get_parameter_options (line 2045) | def _get_parameter_options(self, parameters: Mapping[str, object]) -> ...
    method sim_file (line 2052) | def sim_file(self) -> Path:
    method _use_external_viewer (line 2055) | def _use_external_viewer(self) -> bool:
    method _waves_file (line 2058) | def _waves_file(self) -> str | None:
    method _test_command (line 2061) | def _test_command(self) -> list[_Command]:
    method _build_command (line 2087) | def _build_command(self) -> list[_Command]:
  function get_runner (line 2151) | def get_runner(simulator_name: str) -> Runner:

FILE: src/cocotb_tools/sim_versions.py
  class ActivehdlVersion (line 27) | class ActivehdlVersion(LooseVersion):
  class CvcVersion (line 35) | class CvcVersion(LooseVersion):
  class GhdlVersion (line 46) | class GhdlVersion(LooseVersion):
  class IcarusVersion (line 50) | class IcarusVersion(LooseVersion):
    method from_commandline (line 61) | def from_commandline(cls, cmdline: str) -> Self:
  class ModelsimVersion (line 72) | class ModelsimVersion(LooseVersion):
  class QuestaVersion (line 76) | class QuestaVersion(LooseVersion):
    method parse (line 90) | def parse(self, vstring):
  class RivieraVersion (line 104) | class RivieraVersion(LooseVersion):
  class VcsVersion (line 113) | class VcsVersion(LooseVersion):
  class VerilatorVersion (line 122) | class VerilatorVersion(LooseVersion):
    method from_commandline (line 131) | def from_commandline(cls, cmdline: str) -> Self:
  class XceliumVersion (line 154) | class XceliumVersion(LooseVersion):
  class IusVersion (line 165) | class IusVersion(XceliumVersion):  # inherit everything from Xcelium
  class NvcVersion (line 174) | class NvcVersion(LooseVersion):
    method from_commandline (line 178) | def from_commandline(cls, cmdline: str) -> Self:

FILE: src/pygpi/entry.py
  function load_entry (line 10) | def load_entry() -> None:

FILE: tests/benchmarks/test_matrix_multiplier.py
  function build_and_run_matrix_multiplier (line 16) | def build_and_run_matrix_multiplier(benchmark, sim):
  function test_matrix_multiplier_icarus (line 55) | def test_matrix_multiplier_icarus(benchmark):
  function test_matrix_multiplier_nvc (line 59) | def test_matrix_multiplier_nvc(benchmark):

FILE: tests/benchmarks/test_parameterize_perf/parametrize_performance_tests.py
  function parametrize (line 11) | async def parametrize(dut, a, b, c):

FILE: tests/benchmarks/test_parameterize_perf/test_parameterize_perf.py
  function test_parameterize_perf_icarus (line 14) | def test_parameterize_perf_icarus(benchmark) -> None:

FILE: tests/pytest/test_array.py
  function test_value_only_construction (line 13) | def test_value_only_construction():
  function test_both_construction (line 20) | def test_both_construction():
  function test_range_int_construction (line 30) | def test_range_int_construction():
  function test_bad_construction (line 34) | def test_bad_construction():
  function test_length (line 49) | def test_length():
  function test_range (line 54) | def test_range():
  function test_equality (line 60) | def test_equality():
  function test_repr_eval (line 69) | def test_repr_eval():
  function test_iter (line 74) | def test_iter():
  function test_reversed (line 80) | def test_reversed():
  function test_contains (line 86) | def test_contains():
  function test_index (line 92) | def test_index():
  function test_count (line 100) | def test_count():
  function test_indexing (line 104) | def test_indexing():
  function test_bad_indexing (line 120) | def test_bad_indexing():
  function test_slicing (line 127) | def test_slicing():
  function test_slicing_infered_start_stop (line 137) | def test_slicing_infered_start_stop():
  function test_dont_specify_step (line 144) | def test_dont_specify_step():
  function test_slice_direction_mismatch (line 151) | def test_slice_direction_mismatch():
  function test_set_slice_wrong_length (line 159) | def test_set_slice_wrong_length():
  function test_slice_correct_infered (line 165) | def test_slice_correct_infered():
  function test_changing_range (line 171) | def test_changing_range():
  function test_copy (line 181) | def test_copy() -> None:

FILE: tests/pytest/test_cocotb.py
  function test_cocotb (line 72) | def test_cocotb(reduced_log_fmt):

FILE: tests/pytest/test_env.py
  function dummy (line 30) | async def dummy(dut: SimHandleBase) -> None:
  function test_env_exists_empty (line 34) | def test_env_exists_empty(monkeypatch: MonkeyPatch) -> None:
  function test_env_exists_undefined (line 40) | def test_env_exists_undefined(monkeypatch: MonkeyPatch) -> None:
  function test_env_bool_empty (line 46) | def test_env_bool_empty(monkeypatch: MonkeyPatch) -> None:
  function test_env_bool_undefined (line 52) | def test_env_bool_undefined(monkeypatch: MonkeyPatch) -> None:
  function test_env_bool_default (line 58) | def test_env_bool_default(monkeypatch: MonkeyPatch) -> None:
  function test_env_bool_true (line 65) | def test_env_bool_true(monkeypatch: MonkeyPatch) -> None:
  function test_env_bool_false (line 72) | def test_env_bool_false(monkeypatch: MonkeyPatch) -> None:
  function test_env_bool_invalid (line 79) | def test_env_bool_invalid(monkeypatch: MonkeyPatch) -> None:
  function test_env_path_empty (line 93) | def test_env_path_empty(monkeypatch: MonkeyPatch) -> None:
  function test_env_path_undefined (line 99) | def test_env_path_undefined(monkeypatch: MonkeyPatch) -> None:
  function test_env_path_default (line 105) | def test_env_path_default(monkeypatch: MonkeyPatch, tmp_path: Path) -> N...
  function test_env_path_set (line 111) | def test_env_path_set(monkeypatch: MonkeyPatch, tmp_path: Path) -> None:
  function test_env_str_empty (line 118) | def test_env_str_empty(monkeypatch: MonkeyPatch) -> None:
  function test_env_str_undefined (line 124) | def test_env_str_undefined(monkeypatch: MonkeyPatch) -> None:
  function test_env_str_default (line 130) | def test_env_str_default(monkeypatch: MonkeyPatch) -> None:
  function test_env_str_set (line 136) | def test_env_str_set(monkeypatch: MonkeyPatch) -> None:
  function test_env_int_empty (line 142) | def test_env_int_empty(monkeypatch: MonkeyPatch) -> None:
  function test_env_int_undefined (line 148) | def test_env_int_undefined(monkeypatch: MonkeyPatch) -> None:
  function test_env_int_default (line 154) | def test_env_int_default(monkeypatch: MonkeyPatch) -> None:
  function test_env_int_set (line 162) | def test_env_int_set(monkeypatch: MonkeyPatch) -> None:
  function test_env_args_empty (line 169) | def test_env_args_empty(monkeypatch: MonkeyPatch) -> None:
  function test_env_args_undefined (line 175) | def test_env_args_undefined(monkeypatch: MonkeyPatch) -> None:
  function test_env_args_default (line 181) | def test_env_args_default(monkeypatch: MonkeyPatch) -> None:
  function test_env_args_set (line 188) | def test_env_args_set(monkeypatch: MonkeyPatch) -> None:
  function test_env_list_empty (line 195) | def test_env_list_empty(monkeypatch: MonkeyPatch) -> None:
  function test_env_list_undefined (line 201) | def test_env_list_undefined(monkeypatch: MonkeyPatch) -> None:
  function test_env_list_default (line 207) | def test_env_list_default(monkeypatch: MonkeyPatch) -> None:
  function test_env_list_set (line 213) | def test_env_list_set(monkeypatch: MonkeyPatch) -> None:
  function test_env_cocotb_testcase_deprecated (line 219) | def test_env_cocotb_testcase_deprecated(monkeypatch: MonkeyPatch) -> None:
  function test_env_cocotb_test_modules_empty (line 230) | def test_env_cocotb_test_modules_empty(monkeypatch: MonkeyPatch) -> None:
  function test_env_cocotb_test_modules_undefined (line 244) | def test_env_cocotb_test_modules_undefined(monkeypatch: MonkeyPatch) -> ...
  function test_env_cocotb_testcase_with_cocotb_test_filter (line 258) | def test_env_cocotb_testcase_with_cocotb_test_filter(monkeypatch: Monkey...
  function test_env_cocotb_random_seed (line 272) | def test_env_cocotb_random_seed(monkeypatch: MonkeyPatch) -> None:
  function test_env_random_seed_deprecated (line 283) | def test_env_random_seed_deprecated(monkeypatch: MonkeyPatch) -> None:
  function test_plusargs_ntb_random_seed_deprecated (line 295) | def test_plusargs_ntb_random_seed_deprecated(monkeypatch: MonkeyPatch) -...
  function test_plusargs_seed_deprecated (line 308) | def test_plusargs_seed_deprecated(monkeypatch: MonkeyPatch) -> None:
  function test_env_cocotb_enable_profiling (line 321) | def test_env_cocotb_enable_profiling(monkeypatch: MonkeyPatch) -> None:
  function test_env_cocotb_resolve_x_weak (line 333) | def test_env_cocotb_resolve_x_weak(monkeypatch: MonkeyPatch) -> None:
  function test_env_cocotb_resolve_x_value_error (line 347) | def test_env_cocotb_resolve_x_value_error(monkeypatch: MonkeyPatch) -> N...
  function test_env_cocotb_resolve_x_invalid (line 358) | def test_env_cocotb_resolve_x_invalid(monkeypatch: MonkeyPatch) -> None:

FILE: tests/pytest/test_logging_with_envs.py
  function mock_get_sim_time (line 37) | def mock_get_sim_time() -> tuple[int, int]:
  function _set_env (line 42) | def _set_env(monkeypatch: MonkeyPatch, name: str, value: str | None) -> ...
  function test_logging_boolean_envs (line 62) | def test_logging_boolean_envs(
  function test_logging_log_prefix (line 78) | def test_logging_log_prefix(

FILE: tests/pytest/test_logic.py
  function test_logic_conversions (line 13) | def test_logic_conversions():
  function test_logic_equality (line 59) | def test_logic_equality():
  function test_logic_bool_conversions (line 69) | def test_logic_bool_conversions():
  function test_logic_str_conversions (line 86) | def test_logic_str_conversions():
  function test_logic_index_cast (line 93) | def test_logic_index_cast():
  function test_logic_int_conversions (line 100) | def test_logic_int_conversions():
  function test_logic_repr (line 117) | def test_logic_repr():
  function test_logic_and (line 124) | def test_logic_and():
  function test_logic_or (line 135) | def test_logic_or():
  function test_logic_xor (line 146) | def test_logic_xor():
  function test_logic_invert (line 157) | def test_logic_invert():
  function test_resolve (line 164) | def test_resolve():
  function test_logic_is_resolvable (line 185) | def test_logic_is_resolvable() -> None:
  function test_copy (line 197) | def test_copy() -> None:
  function test_bit_constructor (line 203) | def test_bit_constructor() -> None:
  function test_bit_ops (line 221) | def test_bit_ops() -> None:
  function test_bit_with_logic_ops (line 228) | def test_bit_with_logic_ops() -> None:

FILE: tests/pytest/test_logic_array.py
  function test_logic_array_str_construction (line 13) | def test_logic_array_str_construction():
  function test_logic_array_iterable_construction (line 31) | def test_logic_array_iterable_construction():
  function test_logic_array_int_construction (line 53) | def test_logic_array_int_construction():
  function test_logic_array_copy_construction (line 71) | def test_logic_array_copy_construction():
  function test_logic_array_bad_construction (line 87) | def test_logic_array_bad_construction():
  function test_logic_array_unsigned_conversion (line 98) | def test_logic_array_unsigned_conversion():
  function test_logic_array_signed_conversion (line 121) | def test_logic_array_signed_conversion():
  function test_logic_array_bytes_conversion (line 148) | def test_logic_array_bytes_conversion():
  function test_logic_array_properties (line 165) | def test_logic_array_properties():
  function test_logic_array_properties_deprecated (line 170) | def test_logic_array_properties_deprecated():
  function test_logic_array_setattr (line 219) | def test_logic_array_setattr():
  function test_logic_array_repr (line 227) | def test_logic_array_repr():
  function test_logic_array_and (line 232) | def test_logic_array_and():
  function test_logic_array_or (line 244) | def test_logic_array_or():
  function test_logic_array_xor (line 256) | def test_logic_array_xor():
  function test_logic_array_invert (line 268) | def test_logic_array_invert():
  function test_logic_array_literal_casts (line 272) | def test_logic_array_literal_casts():
  function test_logic_array_index_casts (line 277) | def test_logic_array_index_casts():
  function test_equality (line 284) | def test_equality():
  function test_repr_eval (line 313) | def test_repr_eval():
  function test_iter (line 318) | def test_iter():
  function test_reversed (line 325) | def test_reversed():
  function test_contains (line 331) | def test_contains():
  function test_index (line 337) | def test_index():
  function test_count (line 345) | def test_count():
  function test_indexing (line 349) | def test_indexing():
  function test_bad_indexing (line 365) | def test_bad_indexing():
  function test_slicing (line 372) | def test_slicing():
  function test_slicing_infered_start_stop (line 384) | def test_slicing_infered_start_stop():
  function test_dont_specify_step (line 391) | def test_dont_specify_step():
  function test_slice_direction_mismatch (line 398) | def test_slice_direction_mismatch():
  function test_set_slice_wrong_length (line 406) | def test_set_slice_wrong_length():
  function test_slice_correct_infered (line 412) | def test_slice_correct_infered():
  function test_changing_range (line 418) | def test_changing_range():
  function test_null_vector (line 428) | def test_null_vector():
  function test_bool_cast (line 469) | def test_bool_cast():
  function test_resolve (line 476) | def test_resolve():
  function test_copy (line 485) | def test_copy() -> None:
  function test_format (line 496) | def test_format():
  function test_from_signed_wrap (line 530) | def test_from_signed_wrap():
  function test_from_unsigned_wrap (line 542) | def test_from_unsigned_wrap():

FILE: tests/pytest/test_logs.py
  function clock_design (line 37) | async def clock_design(dut):
  function run_simulation (line 43) | def run_simulation(sim, log_dir):
  function test_wave_dump (line 67) | def test_wave_dump():

FILE: tests/pytest/test_parallel_cocotb.py
  function test_cocotb_parallel_compile (line 33) | def test_cocotb_parallel_compile():
  function test_cocotb_parallel (line 47) | def test_cocotb_parallel(seed):

FILE: tests/pytest/test_parameterize.py
  class MyEnum (line 14) | class MyEnum(Enum):
  class A (line 18) | class A: ...
  function b (line 21) | def b(): ...
  function test_parametrize_repr (line 24) | def test_parametrize_repr():
  function test_parametrize_reprs (line 39) | def test_parametrize_reprs():
  function test_parametrize_bad_args (line 44) | def test_parametrize_bad_args():

FILE: tests/pytest/test_plusargs.py
  function test_toplevel_library (line 25) | def test_toplevel_library():

FILE: tests/pytest/test_range.py
  function test_to_range (line 13) | def test_to_range():
  function test_downto_range (line 35) | def test_downto_range():
  function test_range_index_from_class (line 57) | def test_range_index_from_class():
  function test_null_range (line 64) | def test_null_range():
  function test_bad_arguments (line 80) | def test_bad_arguments():
  function test_equality (line 89) | def test_equality():
  function test_other_constructors (line 96) | def test_other_constructors():
  function test_use_in_set (line 103) | def test_use_in_set():
  function test_conversions (line 108) | def test_conversions():
  function test_repr (line 117) | def test_repr():
  function test_uppercase_in_direction (line 122) | def test_uppercase_in_direction():
  function test_bad_direction (line 127) | def test_bad_direction():
  function test_bad_bound (line 132) | def test_bad_bound():
  function test_bad_step (line 137) | def test_bad_step():
  function test_bad_getitem (line 142) | def test_bad_getitem():
  function test_copy (line 147) | def test_copy() -> None:
  function test_index (line 153) | def test_index() -> None:

FILE: tests/pytest/test_runner.py
  function test_empty_string (line 32) | def test_empty_string():
  function test_special_char (line 36) | def test_special_char():
  function cocotb_runner_test (line 44) | async def cocotb_runner_test(dut):
  function test_runner (line 59) | def test_runner(parameters, pre_cmd, clean_build):
  function test_missing_libpython (line 121) | def test_missing_libpython(monkeypatch):

FILE: tests/pytest/test_timescale.py
  function test_precision (line 41) | def test_precision(precision):

FILE: tests/pytest/test_version.py
  function test_version (line 13) | def test_version():

FILE: tests/pytest/test_vhdl_libraries_multiple.py
  function test_toplevel_library (line 32) | def test_toplevel_library():

FILE: tests/pytest/test_waves.py
  function clock_design (line 36) | async def clock_design(dut):
  function run_simulation (line 42) | def run_simulation(sim, extra_build_args=None, test_args=None):
  function test_wave_dump (line 77) | def test_wave_dump():
  function test_saif_dump (line 112) | def test_saif_dump():
  function test_named_wave_dump (line 126) | def test_named_wave_dump():

FILE: tests/pytest_plugin/conftest.py
  function pytest_addoption (line 23) | def pytest_addoption(parser: Parser, pluginmanager: PytestPluginManager)...
  function sample_module_fixture (line 45) | def sample_module_fixture(hdl: HDL, request: FixtureRequest) -> HDL:
  function clock_generation_fixture (line 93) | async def clock_generation_fixture(dut: Any) -> AsyncGenerator[None, None]:

FILE: tests/pytest_plugin/test_caplog.py
  function test_capture_info (line 14) | async def test_capture_info(dut, caplog: LogCaptureFixture) -> None:
  function test_capture_warning (line 25) | async def test_capture_warning(dut, caplog: LogCaptureFixture) -> None:

FILE: tests/pytest_plugin/test_cocotb.py
  function test_default_1 (line 14) | async def test_default_1(dut) -> None:
  function test_default_2 (line 19) | async def test_default_2(dut) -> None:
  function test_skip_true (line 24) | async def test_skip_true(dut) -> None:
  function test_skip_false (line 30) | async def test_skip_false(dut) -> None:
  function test_timeout (line 35) | async def test_timeout(dut) -> None:
  function test_expect_fail_true (line 42) | async def test_expect_fail_true(dut) -> None:
  function test_expect_fail_false (line 48) | async def test_expect_fail_false(dut) -> None:
  function test_expect_error_none (line 53) | async def test_expect_error_none(dut) -> None:
  function test_expect_error_1 (line 58) | async def test_expect_error_1(dut) -> None:
  function test_expect_error_2 (line 64) | async def test_expect_error_2(dut) -> None:
  function test_xfail_default (line 70) | async def test_xfail_default(dut) -> None:
  function test_xfail_raises_none (line 76) | async def test_xfail_raises_none(dut) -> None:
  function test_xfail_raises_1 (line 82) | async def test_xfail_raises_1(dut) -> None:
  function test_xfail_raises_2 (line 88) | async def test_xfail_raises_2(dut) -> None:
  function test_xfail_condition_false (line 94) | async def test_xfail_condition_false(dut) -> None:
  function test_xfail_condition_true (line 99) | async def test_xfail_condition_true(dut) -> None:
  function test_xfail_reason_message (line 105) | async def test_xfail_reason_message(dut) -> None:
  function test_skipif_true (line 111) | async def test_skipif_true(dut) -> None:
  function test_skipif_false (line 117) | async def test_skipif_false(dut) -> None:
  function test_parametrize_empty (line 122) | async def test_parametrize_empty(dut) -> None:
  function test_parametrize_matrix (line 127) | async def test_parametrize_matrix(dut, x: int, y: int) -> None:
  function test_parametrize_series_1 (line 134) | async def test_parametrize_series_1(dut, a: int, b: int) -> None:
  function test_parametrize_series_2 (line 149) | async def test_parametrize_series_2(dut, x: int, y: int, z: int) -> None:
  class TestClass (line 156) | class TestClass:
    method test_simple (line 158) | async def test_simple(dut) -> None:
    method test_parametrize_matrix (line 162) | async def test_parametrize_matrix(dut, x: int, y: int) -> None:

FILE: tests/pytest_plugin/test_cocotb_top.py
  function test_eq (line 15) | async def test_eq(dut) -> None:
  function test_nq (line 20) | async def test_nq(dut) -> None:
  function test_lt (line 25) | async def test_lt(dut) -> None:
  function test_le (line 30) | async def test_le(dut) -> None:
  function test_gt (line 35) | async def test_gt(dut) -> None:
  function test_ge (line 40) | async def test_ge(dut) -> None:
  function test_value (line 45) | async def test_value(dut) -> None:

FILE: tests/pytest_plugin/test_end_test.py
  function test_end_test (line 12) | async def test_end_test(dut) -> None:

FILE: tests/pytest_plugin/test_fixture.py
  function x_fixture (line 15) | def x_fixture() -> int:
  function x_generator_fixture (line 21) | def x_generator_fixture() -> Generator[int, None, None]:
  function x_async_fixture (line 27) | async def x_async_fixture() -> int:
  function x_async_generator_fixture (line 33) | async def x_async_generator_fixture() -> AsyncGenerator[int, None]:
  function test_fixture_value (line 38) | async def test_fixture_value(dut, x: int) -> None:
  function test_fixture_generator (line 43) | async def test_fixture_generator(dut, x_generator: int) -> None:
  function test_fixture_asynchronous_value (line 48) | async def test_fixture_asynchronous_value(dut, x_async: int) -> None:
  function test_fixture_asynchronous_generator (line 53) | async def test_fixture_asynchronous_generator(dut, x_async_generator: in...
  function test_fixture_mix (line 58) | async def test_fixture_mix(

FILE: tests/pytest_plugin/test_parametrize.py
  function test_matrix (line 14) | async def test_matrix(dut, x: int, y: int) -> None:
  function test_series (line 22) | async def test_series(dut, x: int, y: int, z: int) -> None:
  class TestParametrize (line 30) | class TestParametrize:
    method test_from_class (line 31) | async def test_from_class(dut, z: int) -> None:
    method test_matrix (line 37) | async def test_matrix(dut, x: int, y: int, z: int) -> None:
    method test_series (line 44) | async def test_series(dut, x: int, y: int, z: int) -> None:

FILE: tests/pytest_plugin/test_sample_module.py
  function sample_module_fixture (line 19) | async def sample_module_fixture(dut) -> AsyncGenerator[None, None]:
  function test_sample_module (line 47) | def test_sample_module(sample_module: HDL) -> None:
  function test_sample_module_extra (line 62) | def test_sample_module_extra(sample_module: HDL) -> None:
  function test_sample_module_1 (line 68) | def test_sample_module_1(sample_module: HDL) -> None:
  function test_sample_module_2 (line 74) | def test_sample_module_2(sample_module: HDL) -> None:
  function test_sample_module_parametrize (line 81) | def test_sample_module_parametrize(sample_module: HDL, int_param: int) -...
  function test_pass (line 87) | async def test_pass(dut) -> None:
  function test_simple (line 91) | async def test_simple(dut, start: int = 0, stop: int = 1, step: int = 1)...
  function test_setup_only (line 104) | async def test_setup_only(dut) -> None:
  function test_parametrize_matrix (line 112) | async def test_parametrize_matrix(dut, start: int, stop: int, step: int)...
  function test_parametrize_series (line 118) | async def test_parametrize_series(dut, start: int, stop: int, step: int)...
  function test_parametrize_single (line 124) | async def test_parametrize_single(dut, num: int) -> None:
  function test_xfail_raises_string (line 130) | async def test_xfail_raises_string(dut) -> None:
  function test_xfail_any (line 137) | async def test_xfail_any(dut) -> None:
  function test_xfail_raises (line 144) | async def test_xfail_raises(dut) -> None:

FILE: tests/pytest_plugin/test_sample_module_1.py
  function test_dut (line 12) | async def test_dut(dut) -> None:

FILE: tests/pytest_plugin/test_sample_module_2.py
  function test_dut (line 12) | async def test_dut(dut) -> None:

FILE: tests/pytest_plugin/test_session.py
  function my_hdl_project_fixture (line 20) | def my_hdl_project_fixture(hdl_session: HDL, request: FixtureRequest) ->...
  function array_module_fixture (line 56) | def array_module_fixture(hdl: HDL, my_hdl_project: HDL) -> HDL:
  function sample_module_fixture (line 65) | def sample_module_fixture(hdl: HDL, my_hdl_project: HDL) -> HDL:
  function test_array_module (line 74) | def test_array_module(array_module: HDL) -> None:
  function test_sample_module (line 81) | def test_sample_module(sample_module: HDL) -> None:

FILE: tests/pytest_plugin/test_timeout.py
  function test_timeout_with_positional_arguments (line 16) | async def test_timeout_with_positional_arguments(dut) -> None:
  function test_timeout_with_named_arguments (line 24) | async def test_timeout_with_named_arguments(dut) -> None:

FILE: tests/pytest_plugin/test_xfail.py
  function test_any (line 15) | async def test_any(dut) -> None:
  function test_raises_1 (line 21) | async def test_raises_1(dut) -> None:
  function test_raises_2 (line 27) | async def test_raises_2(dut) -> None:
  function test_raises_strict (line 33) | async def test_raises_strict(dut) -> None:
  function test_any_strict (line 39) | async def test_any_strict(dut) -> None:

FILE: tests/test_cases/test_array/test_array.py
  function test_read_write (line 30) | async def test_read_write(dut):
  function test_gen_loop (line 162) | async def test_gen_loop(dut):
  function test_discover_all (line 190) | async def test_discover_all(dut):
  function test_direct_constant_indexing (line 336) | async def test_direct_constant_indexing(dut):
  function test_direct_signal_indexing (line 364) | async def test_direct_signal_indexing(dut):
  function test_extended_identifiers (line 400) | async def test_extended_identifiers(dut):

FILE: tests/test_cases/test_array_simple/test_array_simple.py
  function _check_value (line 21) | def _check_value(tlog, hdl, expected):
  function test_1dim_array_handles (line 30) | async def test_1dim_array_handles(dut):
  function test_ndim_array_handles (line 55) | async def test_ndim_array_handles(dut):
  function test_1dim_array_indexes (line 73) | async def test_1dim_array_indexes(dut):
  function test_ndim_array_indexes (line 119) | async def test_ndim_array_indexes(dut):
  function test_struct_unpacked (line 156) | async def test_struct_unpacked(dut):
  function test_exceptions (line 168) | async def test_exceptions(dut):

FILE: tests/test_cases/test_async_bridge/test_async_bridge.py
  function return_two (line 20) | def return_two(dut):
  function await_two_clock_edges (line 25) | async def await_two_clock_edges(dut):
  function calls_resume (line 33) | def calls_resume(dut):
  function print_sim_time (line 37) | def print_sim_time(dut, base_time):
  function test_time_in_bridge (line 46) | async def test_time_in_bridge(dut):
  function test_time_in_resume (line 63) | async def test_time_in_resume(dut):
  function test_blocking_function_call_return (line 91) | async def test_blocking_function_call_return(dut):
  function test_consecutive_bridges (line 110) | async def test_consecutive_bridges(dut):
  function test_bridge_from_readonly (line 124) | async def test_bridge_from_readonly(dut):
  function test_resume_from_readonly (line 136) | async def test_resume_from_readonly(dut):
  function test_resume_that_awaits (line 150) | async def test_resume_that_awaits(dut):
  function test_await_after_bridge (line 163) | async def test_await_after_bridge(dut):
  function test_bridge_from_start_soon (line 179) | async def test_bridge_from_start_soon(dut):
  function test_bridge_raised_exception (line 208) | async def test_bridge_raised_exception(dut):
  function test_bridge_returns_exception (line 222) | async def test_bridge_returns_exception(dut):
  function test_resume_raised_exception (line 237) | async def test_resume_raised_exception(dut):
  function test_resume_returns_exception (line 255) | async def test_resume_returns_exception(dut):
  function test_resume_from_weird_thread_fails (line 274) | async def test_resume_from_weird_thread_fails(dut):
  function test_resume_called_in_parallel (line 316) | async def test_resume_called_in_parallel(dut):

FILE: tests/test_cases/test_cocotb/common.py
  function _check_traceback (line 21) | async def _check_traceback(running_coro, exc_type, pattern, *match_args):
  class MyException (line 37) | class MyException(Exception): ...
  class MyBaseException (line 40) | class MyBaseException(BaseException): ...
  function assert_takes (line 44) | def assert_takes(

FILE: tests/test_cases/test_cocotb/pytest_assertion_rewriting.py
  function test_assertion_rewriting (line 14) | async def test_assertion_rewriting(_):

FILE: tests/test_cases/test_cocotb/test_async_coroutines.py
  class produce (line 19) | class produce:
    method async_ (line 23) | async def async_(outcome):
  function test_async_from_async (line 29) | async def test_async_from_async(dut):
  function test_trigger_await_gives_self (line 43) | async def test_trigger_await_gives_self(dut):
  function test_fork_coroutine_function_exception (line 51) | async def test_fork_coroutine_function_exception(dut):
  function test_task_coroutine_function_exception (line 61) | async def test_task_coroutine_function_exception(dut):

FILE: tests/test_cases/test_cocotb/test_async_generators.py
  function whoops_async_generator (line 12) | async def whoops_async_generator():
  function test_forking_accidental_async_generator (line 18) | async def test_forking_accidental_async_generator(_) -> None:
  function test_constructing_accidental_async_generator (line 26) | async def test_constructing_accidental_async_generator(_) -> None:
  function test_creating_accidental_async_generator (line 34) | async def test_creating_accidental_async_generator(_) -> None:
  function test_awaiting_accidental_async_generator (line 42) | async def test_awaiting_accidental_async_generator(_) -> None:

FILE: tests/test_cases/test_cocotb/test_ci.py
  function test_python_version (line 13) | async def test_python_version(_: object) -> None:

FILE: tests/test_cases/test_cocotb/test_clock.py
  function test_clock_with_units (line 37) | async def test_clock_with_units(dut, impl: str) -> None:
  function test_gpi_clock_error_signal_type (line 73) | async def test_gpi_clock_error_signal_type(_) -> None:
  function test_gpi_clock_error_impl (line 79) | async def test_gpi_clock_error_impl(dut):
  function test_gpi_clock_error_params (line 85) | async def test_gpi_clock_error_params(dut):
  function test_gpi_clock_error_timing (line 92) | async def test_gpi_clock_error_timing(dut):
  function test_bad_period (line 99) | async def test_bad_period(dut):
  function test_gpi_clock_error_already_started (line 107) | async def test_gpi_clock_error_already_started(dut):
  function test_clocks_with_other_number_types (line 118) | async def test_clocks_with_other_number_types(dut):
  function test_clock_stop_and_restart (line 132) | async def test_clock_stop_and_restart(dut) -> None:
  function test_clock_cycles (line 148) | async def test_clock_cycles(dut: Any) -> None:
  function test_clock_task_cancel (line 174) | async def test_clock_task_cancel(dut) -> None:
  function test_bad_set_action (line 187) | async def test_bad_set_action(dut: Any) -> None:
  function test_set_action (line 195) | async def test_set_action(dut: Any) -> None:
  function test_period_high (line 210) | async def test_period_high(dut: Any) -> None:

FILE: tests/test_cases/test_cocotb/test_deprecated.py
  function test_id_deprecated (line 27) | async def test_id_deprecated(dut):
  function test_testfactory_deprecated_test (line 35) | async def test_testfactory_deprecated_test(dut, a):
  function test_testfactory_deprecated (line 48) | async def test_testfactory_deprecated(dut):
  function test_real_handle_casts_deprecated (line 57) | async def test_real_handle_casts_deprecated(dut):
  function test_int_handle_casts_deprecated (line 65) | async def test_int_handle_casts_deprecated(dut):
  function test_logic_handle_casts_deprecated (line 73) | async def test_logic_handle_casts_deprecated(dut):
  function test_string_handle_casts_deprecated (line 83) | async def test_string_handle_casts_deprecated(dut):
  function test_join_trigger_deprecated (line 91) | async def test_join_trigger_deprecated(_) -> None:
  function test_join_trigger_in_first_backwards_compat (line 104) | async def test_join_trigger_in_first_backwards_compat(_) -> None:
  function test_task_join_deprecated (line 116) | async def test_task_join_deprecated(_) -> None:
  function test_task_join_in_first_backwards_compat (line 127) | async def test_task_join_in_first_backwards_compat(_) -> None:
  function test_event_data_deprecated (line 139) | async def test_event_data_deprecated(_) -> None:
  function test_logic_scalar_object_methods_deprecated (line 156) | async def test_logic_scalar_object_methods_deprecated(dut) -> None:
  function test_edge_trigger_deprecated (line 166) | async def test_edge_trigger_deprecated(dut) -> None:
  function test_cocotb_start (line 174) | async def test_cocotb_start(_) -> None:
  function test_setimmediatevalue (line 188) | async def test_setimmediatevalue(dut) -> None:
  function test_event_name_deprecated (line 194) | async def test_event_name_deprecated(_) -> None:
  function test_units_deprecated (line 209) | async def test_units_deprecated(dut: Any) -> None:
  function test_results_deprecated (line 225) | async def test_results_deprecated(_: Any) -> None:
  function test_triggers_Join_import_deprecated (line 235) | async def test_triggers_Join_import_deprecated(_: Any) -> None:
  function test_Lock_name_deprecated (line 241) | async def test_Lock_name_deprecated(_: object) -> None:
  function test_Task_kill_unstarted (line 253) | async def test_Task_kill_unstarted(_: object) -> None:
  function test_Task_kill_scheduled (line 267) | async def test_Task_kill_scheduled(_: object) -> None:
  function test_Task_kill_pending (line 281) | async def test_Task_kill_pending(_: object) -> None:
  function test_Task_kill_done (line 296) | async def test_Task_kill_done(_: object) -> None:
  function test_Task_kill_running (line 314) | async def test_Task_kill_running(_: object) -> None:
  function test_pass_test_in_task (line 330) | async def test_pass_test_in_task(_) -> None:
  function test_pass_test_in_test (line 341) | async def test_pass_test_in_test(_) -> None:
  function test_pass_test_in_xfail_exception (line 348) | async def test_pass_test_in_xfail_exception(dut: object) -> None:
  function test_pass_test_in_xfail_assert (line 355) | async def test_pass_test_in_xfail_assert(dut: object) -> None:
  function test_pass_test_in_expect_error (line 361) | async def test_pass_test_in_expect_error(dut: object) -> None:
  function test_pass_test_in_expect_fail (line 367) | async def test_pass_test_in_expect_fail(dut: object) -> None:

FILE: tests/test_cases/test_cocotb/test_edge_triggers.py
  function count_edges_cycles (line 43) | async def count_edges_cycles(signal, edges):
  function do_single_edge_check (line 52) | async def do_single_edge_check(dut, level):
  function test_rising_edge (line 65) | async def test_rising_edge(dut):
  function test_falling_edge (line 78) | async def test_falling_edge(dut):
  function test_either_edge (line 91) | async def test_either_edge(dut):
  function test_fork_and_monitor (line 121) | async def test_fork_and_monitor(dut, period=1000, clocks=6):
  function do_clock (line 144) | async def do_clock(dut, limit, period):
  function do_edge_count (line 155) | async def do_edge_count(dut, signal):
  function test_edge_count (line 164) | async def test_edge_count(dut):
  function test_edge_identity (line 178) | async def test_edge_identity(dut):
  function test_trigger_result_type (line 197) | async def test_trigger_result_type(dut) -> None:
  function test_clock_cycles (line 220) | async def test_clock_cycles(dut):
  function test_clock_cycles_forked (line 280) | async def test_clock_cycles_forked(dut):
  function test_both_edge_triggers (line 308) | async def test_both_edge_triggers(dut):
  function test_edge_on_vector (line 322) | async def test_edge_on_vector(dut):
  function test_edge_bad_handles (line 363) | async def test_edge_bad_handles(dut):
  function test_edge_logic_vector (line 381) | async def test_edge_logic_vector(dut):
  function test_edge_non_logic_handles (line 395) | async def test_edge_non_logic_handles(dut):
  function test_edge_trigger_repr (line 408) | async def test_edge_trigger_repr(dut) -> None:
  function test_edge_trigger_on_const (line 430) | async def test_edge_trigger_on_const(dut) -> None:
  function wait_for_edge (line 442) | async def wait_for_edge(signal):
  function wait_for_rising_edge (line 447) | async def wait_for_rising_edge(signal):
  function wait_for_falling_edge (line 452) | async def wait_for_falling_edge(signal):
  function issue_376_all_edges (line 458) | async def issue_376_all_edges(dut):
  function issue_376_same_edges (line 466) | async def issue_376_same_edges(dut):
  function issue_376_different_edges (line 473) | async def issue_376_different_edges(dut):
  function test_callback_registration_failure_raises_runtime_error (line 480) | async def test_callback_registration_failure_raises_runtime_error(dut):

FILE: tests/test_cases/test_cocotb/test_first_combine.py
  class MyTrigger (line 23) | class MyTrigger(Trigger):
    method __init__ (line 24) | def __init__(self) -> None:
    method _prime (line 29) | def _prime(self) -> None:
    method _unprime (line 32) | def _unprime(self) -> None:
  function test_First_unfired_triggers_killed (line 37) | async def test_First_unfired_triggers_killed(_) -> None:
  function test_First_unfired_triggers_killed_on_exception (line 52) | async def test_First_unfired_triggers_killed_on_exception(_) -> None:
  function test_Combine_unfired_triggers_killed_on_exception (line 69) | async def test_Combine_unfired_triggers_killed_on_exception(_) -> None:
  function test_nested_first (line 86) | async def test_nested_first(dut):
  function test_first_does_not_kill (line 111) | async def test_first_does_not_kill(dut):
  function test_exceptions_first (line 134) | async def test_exceptions_first(dut):
  function test_combine (line 152) | async def test_combine(dut):
  function test_fork_combine (line 166) | async def test_fork_combine(dut):
  function test_event_is_set (line 180) | async def test_event_is_set(dut):
  function test_combine_start_soon (line 191) | async def test_combine_start_soon(_):
  function test_recursive_combine_and_start_soon (line 204) | async def test_recursive_combine_and_start_soon(_):
  function test_recursive_combine (line 235) | async def test_recursive_combine(_):
  class MyEvent (line 253) | class MyEvent(Event):
  function test_concurrency_trigger_repr (line 258) | async def test_concurrency_trigger_repr(_):
  function test_invalid_trigger_types (line 269) | async def test_invalid_trigger_types(dut):
  function test_Combine_empty (line 280) | async def test_Combine_empty(_) -> None:
  function test_Combine_single (line 289) | async def test_Combine_single(_) -> None:
  function test_Combine_exception (line 298) | async def test_Combine_exception(dut) -> None:
  function test_First_empty (line 316) | async def test_First_empty(_) -> None:
  function test_First_single (line 323) | async def test_First_single(_) -> None:
  function test_First_exception (line 332) | async def test_First_exception(_) -> None:
  function test_Combine_objects_shared_by_multiple (line 348) | async def test_Combine_objects_shared_by_multiple(_: Any) -> None:
  function test_Combine_task_cancelled (line 367) | async def test_Combine_task_cancelled(_: Any) -> None:
  function test_First_task_cancelled (line 390) | async def test_First_task_cancelled(_: Any) -> None:
  function test_Combine_task_being_waited_cancelled (line 413) | async def test_Combine_task_being_waited_cancelled(_: Any) -> None:
  function test_First_task_being_waited_cancelled (line 448) | async def test_First_task_being_waited_cancelled(_: Any) -> None:

FILE: tests/test_cases/test_cocotb/test_handle.py
  function test_bad_attr (line 36) | async def test_bad_attr(dut):
  function test_string_handle_takes_bytes (line 58) | async def test_string_handle_takes_bytes(dut):
  function test_string_ansi_color (line 80) | async def test_string_ansi_color(dut):
  function test_delayed_assignment_still_errors (line 108) | async def test_delayed_assignment_still_errors(dut):
  function test_real_assign_double (line 133) | async def test_real_assign_double(dut):
  function test_real_assign_int (line 162) | async def test_real_assign_int(dut):
  function test_access_underscore_name (line 183) | async def test_access_underscore_name(dut):
  function test_assign_LogicArray (line 202) | async def test_assign_LogicArray(dut):
  function test_assign_Logic (line 215) | async def test_assign_Logic(dut):
  function test_assign_Logic_4value (line 231) | async def test_assign_Logic_4value(dut):
  function test_assign_Logic_9value (line 241) | async def test_assign_Logic_9value(dut):
  function test_assign_LogicArray_9value (line 251) | async def test_assign_LogicArray_9value(dut):
  function test_assign_string (line 264) | async def test_assign_string(dut):
  function test_assign_immediate (line 280) | async def test_assign_immediate(dut):
  function test_immediate_reentrace (line 293) | async def test_immediate_reentrace(dut):
  function test_null_range_width (line 329) | async def test_null_range_width(dut):
  function test_assign_str_logic_scalar (line 341) | async def test_assign_str_logic_scalar(dut) -> None:
  function test_extended_identifiers (line 380) | async def test_extended_identifiers(dut):
  function test_set_at_end_of_test (line 415) | async def test_set_at_end_of_test(dut) -> None:
  function test_set_at_end_of_test_check (line 423) | async def test_set_at_end_of_test_check(dut) -> None:
  function test_invalid_indexing (line 428) | async def test_invalid_indexing(dut) -> None:
  function test_setattr_error_msg (line 435) | async def test_setattr_error_msg(dut: Any) -> None:
  function test_pickling_prohibited (line 443) | async def test_pickling_prohibited(dut: object) -> None:
  function test_handle_str_with_separators (line 449) | async def test_handle_str_with_separators(dut: Any) -> None:
  function test_edge_on_vectors (line 469) | async def test_edge_on_vectors(dut: Any) -> None:

FILE: tests/test_cases/test_cocotb/test_logging.py
  class LogCaptureHandler (line 20) | class LogCaptureHandler(logging.Handler):
    method __init__ (line 21) | def __init__(self) -> None:
    method emit (line 26) | def emit(self, record: logging.LogRecord) -> None:
  function capture_logs (line 33) | def capture_logs(
  class StrCallCounter (line 49) | class StrCallCounter:
    method __init__ (line 50) | def __init__(self):
    method __str__ (line 53) | def __str__(self):
  function test_logging_with_args (line 59) | async def test_logging_with_args(dut):
  function test_custom_logging_levels (line 76) | async def test_custom_logging_levels(dut):
  function test_ansi_stripping (line 88) | async def test_ansi_stripping(_: object) -> None:
  function test_warning_capture (line 103) | async def test_warning_capture(_: object) -> None:
  function test_ljust_rjust (line 112) | async def test_ljust_rjust(_: object) -> None:
  function test_multiline_indent (line 124) | async def test_multiline_indent(_: object) -> None:

FILE: tests/test_cases/test_cocotb/test_queues.py
  function run_queue_nonblocking_test (line 19) | async def run_queue_nonblocking_test(dut, queue_type):
  function test_queue_contention (line 71) | async def test_queue_contention(dut):
  function test_fair_scheduling (line 140) | async def test_fair_scheduling(dut):
  function run_queue_blocking_test (line 174) | async def run_queue_blocking_test(dut, queue_type):
  function test_str_and_repr (line 237) | async def test_str_and_repr(_):

FILE: tests/test_cases/test_cocotb/test_scheduler.py
  function test_task_kill (line 45) | async def test_task_kill(dut):
  function test_task_close_down (line 82) | async def test_task_close_down(dut) -> None:
  function join_finished (line 100) | async def join_finished(dut):
  function consistent_join (line 126) | async def consistent_join(dut):
  function test_kill_twice (line 151) | async def test_kill_twice(dut):
  function test_trigger_with_failing_prime (line 167) | async def test_trigger_with_failing_prime(dut):
  function test_stack_overflow (line 187) | async def test_stack_overflow(dut):
  function test_stack_overflow_pending_coros (line 204) | async def test_stack_overflow_pending_coros(dut):
  function test_kill_coroutine_waiting_on_the_same_trigger (line 218) | async def test_kill_coroutine_waiting_on_the_same_trigger(dut):
  function test_nulltrigger_reschedule (line 250) | async def test_nulltrigger_reschedule(dut):
  function test_nulltrigger_repr (line 277) | async def test_nulltrigger_repr(_):
  function test_event_set_schedule (line 285) | async def test_event_set_schedule(dut):
  function test_last_scheduled_write_wins (line 315) | async def test_last_scheduled_write_wins(dut):
  function test_last_scheduled_write_wins_array (line 332) | async def test_last_scheduled_write_wins_array(dut):
  function test_task_repr (line 345) | async def test_task_repr(_) -> None:
  function test_test_repr (line 510) | async def test_test_repr(_):
  class TestClassRepr (line 525) | class TestClassRepr(Coroutine):
    method __init__ (line 526) | def __init__(self, dut):
    method check_repr (line 529) | async def check_repr(self, dut):
    method send (line 541) | def send(self, value):
    method throw (line 544) | def throw(self, exception):
    method close (line 547) | def close(self):
    method __await__ (line 550) | def __await__(self):
  function test_start_soon_async (line 555) | async def test_start_soon_async(_):
  function test_await_start_soon (line 570) | async def test_await_start_soon(_):
  function test_kill_start_soon_task (line 583) | async def test_kill_start_soon_task(_):
  function test_test_end_after_start_soon (line 603) | async def test_test_end_after_start_soon(_):
  function test_previous_start_soon_not_scheduled (line 614) | async def test_previous_start_soon_not_scheduled(_):
  function test_test_end_with_multiple_pending_tasks (line 623) | async def test_test_end_with_multiple_pending_tasks(_):
  function test_start (line 635) | async def test_start(_) -> None:
  function test_create_task (line 660) | async def test_create_task(_):
  function test_task_completes (line 711) | async def test_task_completes(_):
  function test_task_exception (line 726) | async def test_task_exception(_):
  function test_cancel_task (line 744) | async def test_cancel_task(_: object) -> None:
  function test_cancel_task_cancellation_error (line 790) | async def test_cancel_task_cancellation_error(_: object) -> None:
  function test_invalid_operations_task (line 804) | async def test_invalid_operations_task(_):
  function test_multiple_concurrent_test_fails (line 816) | async def test_multiple_concurrent_test_fails(_) -> None:
  function test_task_done_callback_passing (line 828) | async def test_task_done_callback_passing(_) -> None:
  function test_task_done_callback_erroring (line 845) | async def test_task_done_callback_erroring(_) -> None:
  function test_task_done_callback_cancelled (line 864) | async def test_task_done_callback_cancelled(_) -> None:
  function test_task_done_callback_added_after_done (line 885) | async def test_task_done_callback_added_after_done(_) -> None:
  function test_task_complete (line 903) | async def test_task_complete(_) -> None:
  function test_joins_in_first (line 918) | async def test_joins_in_first(_) -> None:
  function test_start_after_create (line 929) | async def test_start_after_create(_) -> None:
  function test_start_again_while_scheduled (line 939) | async def test_start_again_while_scheduled(_) -> None:
  function test_start_again_while_pending (line 950) | async def test_start_again_while_pending(_) -> None:
  function test_test_end_cancellation_error (line 962) | async def test_test_end_cancellation_error(_) -> None:
  function test_task_name (line 974) | async def test_task_name(_: object) -> None:
  function test_start_again_finished_task (line 1000) | async def test_start_again_finished_task(_: object) -> None:
  function test_start_again_cancelled_task (line 1012) | async def test_start_again_cancelled_task(_: object) -> None:
  function test_create_carryover_task (line 1031) | async def test_create_carryover_task(_: object) -> None:
  function test_start_carryover_task (line 1040) | async def test_start_carryover_task(_: object) -> None:
  function test_task_local_variables (line 1046) | async def test_task_local_variables(_: object) -> None:
  function test_Task_ignored_CancelledError_return (line 1067) | async def test_Task_ignored_CancelledError_return(_: object) -> None:
  function test_Task_ignored_CancelledError_await (line 1080) | async def test_Task_ignored_CancelledError_await(_: object) -> None:
  function test_Task_cancel_running (line 1093) | async def test_Task_cancel_running(_: object) -> None:
  function test_Task_yield_bad_value (line 1109) | async def test_Task_yield_bad_value(_: object) -> None:
  function test_write_in_Task_occurs_on_same_cycle (line 1122) | async def test_write_in_Task_occurs_on_same_cycle(dut) -> None:
  function wait_edge (line 1138) | async def wait_edge(dut: Any) -> None:
  function test_957_1 (line 1144) | async def test_957_1(dut: Any) -> None:
  function test_957_2 (line 1150) | async def test_957_2(dut: Any) -> None:

FILE: tests/test_cases/test_cocotb/test_sim_time_utils.py
  function test_get_sim_steps (line 13) | async def test_get_sim_steps(_):

FILE: tests/test_cases/test_cocotb/test_start_soon.py
  function test_start_soon_doesnt_start_immediately (line 10) | async def test_start_soon_doesnt_start_immediately(_):

FILE: tests/test_cases/test_cocotb/test_synchronization_primitives.py
  function test_trigger_lock (line 31) | async def test_trigger_lock(dut):
  function test_except_lock (line 60) | async def test_except_lock(dut):
  function test_lock_release_without_acquire (line 76) | async def test_lock_release_without_acquire(_):
  function test_lock_repr (line 84) | async def test_lock_repr(dut):
  function test_internalevent (line 117) | async def test_internalevent(dut):
  function test_Lock_fair_scheduling (line 168) | async def test_Lock_fair_scheduling(_) -> None:
  function test_Lock_multiple_users_acquire_triggers (line 215) | async def test_Lock_multiple_users_acquire_triggers(_) -> None:
  function test_Event_multiple_task_share_trigger (line 230) | async def test_Event_multiple_task_share_trigger(_) -> None:
  function test_Event_wait_after_set (line 245) | async def test_Event_wait_after_set(_: Any) -> None:

FILE: tests/test_cases/test_cocotb/test_task_manager.py
  function coro (line 26) | async def coro(wait: int, ret: int = 0) -> int:
  class AwaitableThing (line 31) | class AwaitableThing:
    method __init__ (line 32) | def __init__(self, wait: int, ret: int = 0) -> None:
    method __await__ (line 36) | def __await__(self) -> Generator[Trigger, None, int]:
  class MyException (line 41) | class MyException(Exception): ...
  function raises_after (line 44) | async def raises_after(wait: int) -> None:
  function test_passes (line 51) | async def test_passes(_: object, continue_on_error: bool) -> None:
  function test_no_tasks_passes (line 77) | async def test_no_tasks_passes(_: object, continue_on_error: bool) -> None:
  function test_nested_passes (line 85) | async def test_nested_passes(
  function test_nested_in_child_passes (line 119) | async def test_nested_in_child_passes(
  function test_failure_in_block (line 163) | async def test_failure_in_block(_: object, continue_on_error: bool) -> N...
  function test_failure_in_nested_block (line 184) | async def test_failure_in_nested_block(
  function test_failure_in_nested_child_block (line 219) | async def test_failure_in_nested_child_block(
  function test_child_failure_in_block (line 260) | async def test_child_failure_in_block(_: object, continue_on_error: bool...
  function test_child_failure_in_nested_block (line 294) | async def test_child_failure_in_nested_block(
  function test_child_failure_in_nested_child_block (line 339) | async def test_child_failure_in_nested_child_block(
  function test_child_failure_in_exit (line 391) | async def test_child_failure_in_exit(_: object, continue_on_error: bool)...
  function test_child_failure_in_nested_exit (line 417) | async def test_child_failure_in_nested_exit(
  function test_child_failure_in_nested_child_exit (line 454) | async def test_child_failure_in_nested_child_exit(
  function test_external_cancel_in_block (line 497) | async def test_external_cancel_in_block(_: object, continue_on_error: bo...
  function test_external_cancel_in_nested_block (line 525) | async def test_external_cancel_in_nested_block(
  function test_external_cancel_in_nested_child_block (line 565) | async def test_external_cancel_in_nested_child_block(
  function test_external_cancel_in_aexit (line 611) | async def test_external_cancel_in_aexit(_: object, continue_on_error: bo...
  function test_external_cancel_in_nested_aexit (line 637) | async def test_external_cancel_in_nested_aexit(
  function test_external_cancel_in_nested_child_aexit (line 676) | async def test_external_cancel_in_nested_child_aexit(
  function test_external_cancel_in_block_ignored_at_end_of_block (line 719) | async def test_external_cancel_in_block_ignored_at_end_of_block(
  function test_external_cancel_in_block_ignored_new_raise (line 744) | async def test_external_cancel_in_block_ignored_new_raise(
  function test_external_cancel_in_block_ignored_and_await (line 769) | async def test_external_cancel_in_block_ignored_and_await(
  function test_child_fails_ignore_cancel_at_end_of_block (line 796) | async def test_child_fails_ignore_cancel_at_end_of_block(_: object) -> N...
  function test_child_fails_ignore_cancel_and_await (line 810) | async def test_child_fails_ignore_cancel_and_await(_: object) -> None:
  function test_child_fails_ignore_cancel_new_raise (line 824) | async def test_child_fails_ignore_cancel_new_raise(_: object) -> None:
  function test_reused_context (line 836) | async def test_reused_context(_: object, continue_on_error: bool) -> None:
  function test_start_soon_after_cancel_no_continue (line 848) | async def test_start_soon_after_cancel_no_continue(_: object) -> None:
  function test_start_soon_after_cancel_continue (line 869) | async def test_start_soon_after_cancel_continue(_: object) -> None:
  function test_reraised_child_exception (line 884) | async def test_reraised_child_exception(_: object) -> None:
  function test_start_soon_outside_context (line 901) | async def test_start_soon_outside_context(_: object, continue_on_error: ...
  function test_fork_outside_context (line 912) | async def test_fork_outside_context(_: object, continue_on_error: bool) ...
  function test_add_tasks_from_another_task (line 923) | async def test_add_tasks_from_another_task(_: object, continue_on_error:...
  function test_start_soon_after_finished (line 948) | async def test_start_soon_after_finished(_: object, continue_on_error: b...
  function test_cancel_child_task_in_block_and_exit (line 960) | async def test_cancel_child_task_in_block_and_exit(
  function test_cancel_child_task_in_block_and_continue (line 983) | async def test_cancel_child_task_in_block_and_continue(
  function test_KeyboardInterrupt_in_block (line 1010) | async def test_KeyboardInterrupt_in_block(_: object) -> None:
  function test_KeyboardInterrupt_in_nested_block (line 1024) | async def test_KeyboardInterrupt_in_nested_block(_: object) -> None:
  function test_override_continue_on_error_continue (line 1037) | async def test_override_continue_on_error_continue(_: object) -> None:
  function test_override_continue_on_error_fail (line 1054) | async def test_override_continue_on_error_fail(_: object) -> None:
  function test_override_continue_on_error_fork_continue (line 1071) | async def test_override_continue_on_error_fork_continue(_: object) -> None:
  function test_override_continue_on_error_fork_fail (line 1091) | async def test_override_continue_on_error_fork_fail(_: object) -> None:
  function test_bad_args (line 1111) | async def test_bad_args(_: object) -> None:
  function test_context_block_continue_on_error (line 1139) | async def test_context_block_continue_on_error(

FILE: tests/test_cases/test_cocotb/test_testfactory.py
  function run_testfactory_test (line 23) | async def run_testfactory_test(dut, arg1, arg2, arg3):
  function test_testfactory_verify_args (line 29) | async def test_testfactory_verify_args(dut):
  function test_testfactory_verify_names (line 39) | async def test_testfactory_verify_names(dut):
  class TestClass (line 50) | class TestClass(Coroutine):
    method __init__ (line 51) | def __init__(self, dut, myarg):
    method run (line 54) | async def run(self, dut, m
Condensed preview — 635 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,279K chars).
[
  {
    "path": ".backportrc.json",
    "chars": 1202,
    "preview": "// Documentation at\n// https://github.com/sorenlouv/backport/blob/main/docs/config-file-options.md\n// Comments are allow"
  },
  {
    "path": ".clang-format",
    "chars": 224,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": ".codecov.yml",
    "chars": 1294,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": ".devcontainer/Dockerfile",
    "chars": 2185,
    "preview": "ARG VERILATOR_VERSION=5.044\nARG UV_VERSION=0.10.2\n\n# Container images used only to copy binaries out of it (see below).\n"
  },
  {
    "path": ".devcontainer/README.md",
    "chars": 1933,
    "preview": "# Cocotb Development Environment in a Dev Container\n\nThe Dev Container provides a ready-to-code development environment "
  },
  {
    "path": ".devcontainer/devcontainer.json",
    "chars": 1021,
    "preview": "// VS Code Dev Container configuration file for a cocotb development environment.\n{\n\t\"name\": \"cocotb development\",\n\t\"bui"
  },
  {
    "path": ".devcontainer/post-create.sh",
    "chars": 294,
    "preview": "#!/bin/bash\nset -eo pipefail\n\n# Create and activate a virtual environment.\npython3 -m venv --prompt cocotb-devenv .venv\n"
  },
  {
    "path": ".git-blame-ignore-revs",
    "chars": 554,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 643,
    "preview": "<!--\n\nThanks for improving cocotb! Here are some points to make this as smooth as possible.\nNot all of them may be appli"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 614,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": ".github/generate-envs.py",
    "chars": 17603,
    "preview": "#!/usr/bin/env python3\n# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details"
  },
  {
    "path": ".github/issue_template.md",
    "chars": 557,
    "preview": "<!--\nIn case you are reporting a problem with running cocotb,\nplease remember to add relevant information about your env"
  },
  {
    "path": ".github/workflows/backport.yml",
    "chars": 2570,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": ".github/workflows/benchmark.yml",
    "chars": 2838,
    "preview": "name: Performance Benchmark\n# adapted from https://github.com/benchmark-action/github-action-benchmark#charts-on-github-"
  },
  {
    "path": ".github/workflows/build-test-dev.yml",
    "chars": 1813,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": ".github/workflows/build-test-release.yml",
    "chars": 3381,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": ".github/workflows/ecosystem-compat.yml",
    "chars": 4406,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": ".github/workflows/experimental.yml",
    "chars": 699,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": ".github/workflows/extended.yml",
    "chars": 602,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": ".github/workflows/regression-tests.yml",
    "chars": 10978,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 1286,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": ".gitignore",
    "chars": 1517,
    "preview": "*.py[cod]\n\n# C extensions\n*.so\n*.dll\n\n# C objects\n*.o\n\n# Python and C++ code coverage\n.coverage\n.coverage.cocotb\n*.gcno\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 1776,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": ".readthedocs.yml",
    "chars": 516,
    "preview": "# .readthedocs.yml\n# Read the Docs configuration file\n# See https://docs.readthedocs.io/en/stable/config-file/v2.html fo"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 259,
    "preview": "# cocotb Contribution Guidelines\n\ncocotb welcomes contributions from anyone!\nPlease have a look at the [Development & Co"
  },
  {
    "path": "LICENSE",
    "chars": 1572,
    "preview": "Copyright cocotb contributors\nCopyright (c) 2013 Potential Ventures Ltd\nCopyright (c) 2013 SolarFlare Communications Inc"
  },
  {
    "path": "MANIFEST.in",
    "chars": 139,
    "preview": "recursive-include src/cocotb/share *\nrecursive-include src/cocotb/_vendor *\ninclude README.md\ninclude LICENSE\ninclude co"
  },
  {
    "path": "Makefile",
    "chars": 1913,
    "preview": "# Copyright cocotb contributors\n# Copyright (c) 2013 Potential Ventures Ltd\n# Copyright (c) 2013 SolarFlare Communicatio"
  },
  {
    "path": "README.md",
    "chars": 1179,
    "preview": "**cocotb** is a framework empowering users to write VHDL and Verilog testbenches in Python.\n\n[![Documentation Status](ht"
  },
  {
    "path": "cocotb_build_libs.py",
    "chars": 25050,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": "docs/.gitignore",
    "chars": 45,
    "preview": ".venv\nsource/master-notes.rst\nsource/doxygen\n"
  },
  {
    "path": "docs/Doxyfile",
    "chars": 126339,
    "preview": "# Doxyfile 1.9.8\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) "
  },
  {
    "path": "docs/README.md",
    "chars": 698,
    "preview": "cocotb documentation\n====================\n\nThis directory contains the documentation of cocotb, which is built with Doxy"
  },
  {
    "path": "docs/source/_static/cocotb.css",
    "chars": 15987,
    "preview": "/*\n\nhttps://github.com/cocotb/cocotb-web/blob/master/_sass/_custom-styles.scss\nhttps://github.com/cocotb/cocotb-web/blob"
  },
  {
    "path": "docs/source/_static/cocotb.js",
    "chars": 182,
    "preview": "document.addEventListener(\"DOMContentLoaded\", function () {\n    if (window.location.href.includes(\"release_notes\")) {\n  "
  },
  {
    "path": "docs/source/analog_model.rst",
    "chars": 3978,
    "preview": ".. _analog_model:\n\n#########################\nModels of Analog Circuits\n#########################\n\n.. versionadded:: 1.6\n"
  },
  {
    "path": "docs/source/building.rst",
    "chars": 7900,
    "preview": ".. _building:\n\n*******************************************\nMakefile-based Build System and Test Runner\n*****************"
  },
  {
    "path": "docs/source/conf.py",
    "chars": 15530,
    "preview": "# -*- coding: utf-8 -*-\n#\n# cocotb documentation build configuration file\n#\n# This file is execfile()d with the current "
  },
  {
    "path": "docs/source/contributing.rst",
    "chars": 18918,
    "preview": "****************\nGetting Involved\n****************\n\nWelcome to the cocotb development!\nWe are an inclusive community wit"
  },
  {
    "path": "docs/source/contributors.rst",
    "chars": 1116,
    "preview": "************\nContributors\n************\n\n.. spelling:word-list::\n   McGregor\n   Grimwood\n   FOSSi\n   Solarflare\n\ncocotb i"
  },
  {
    "path": "docs/source/coroutines.rst",
    "chars": 24168,
    "preview": ".. _coroutines:\n.. _async_functions:\n\n.. spelling:word-list::\n   Async\n\n\n******************************\nCoroutines, Task"
  },
  {
    "path": "docs/source/coverage.rst",
    "chars": 5443,
    "preview": "********************\nPython Code Coverage\n********************\n\ncocotb provides support for collecting Python code cover"
  },
  {
    "path": "docs/source/custom_flows.rst",
    "chars": 7289,
    "preview": ".. _custom-flows:\n\n******************************\nExtending Existing Build Flows\n******************************\n\nIn orde"
  },
  {
    "path": "docs/source/developing.rst",
    "chars": 5806,
    "preview": "*****************\nDeveloping cocotb\n*****************\n\nSetting Up a Development Environment\n============================"
  },
  {
    "path": "docs/source/diagrams/README.md",
    "chars": 329,
    "preview": "The sources for the vector diagrams (in `xml/`) can be edited with\n[diagrams.net](https://app.diagrams.net/) - formerly "
  },
  {
    "path": "docs/source/examples.rst",
    "chars": 3810,
    "preview": "*************\nMore Examples\n*************\n\nApart from the examples covered with full tutorials in the previous sections,"
  },
  {
    "path": "docs/source/extensions.rst",
    "chars": 5437,
    "preview": "*************************\nWriting cocotb Extensions\n*************************\n\nThis guide explains how to write cocotb e"
  },
  {
    "path": "docs/source/further_resources.rst",
    "chars": 287,
    "preview": "*****************\nFurther Resources\n*****************\n\nWe have a list of talks and papers, libraries and examples at our"
  },
  {
    "path": "docs/source/genindex.rst",
    "chars": 127,
    "preview": "..\n   This file is a placeholder and will be replaced by Sphinx\n   See https://stackoverflow.com/a/42310803\n\n*****\nIndex"
  },
  {
    "path": "docs/source/glossary.rst",
    "chars": 3508,
    "preview": ".. _glossary:\n\nGlossary\n========\n\n.. glossary::\n   :sorted:\n\n   BFM\n      Bus Functional Model\n\n   blocking function\n   "
  },
  {
    "path": "docs/source/index.rst",
    "chars": 5962,
    "preview": "#################\nWelcome to cocotb\n#################\n\n..\n   This documentation tries to follow https://diataxis.fr/\n   "
  },
  {
    "path": "docs/source/install.rst",
    "chars": 4065,
    "preview": ".. _install:\n\n************\nInstallation\n************\n\n.. note::\n   If you want to install the **development version** of"
  },
  {
    "path": "docs/source/install_devel.rst",
    "chars": 5723,
    "preview": ".. _install-devel:\n\n**********************************\nInstalling the Development Version\n******************************"
  },
  {
    "path": "docs/source/library_reference.rst",
    "chars": 33634,
    "preview": "*****************\nLibrary Reference\n*****************\n\n.. spelling:word-list::\n   AXIProtocolError\n   BusDriver\n   De\n  "
  },
  {
    "path": "docs/source/library_reference_c.rst",
    "chars": 3878,
    "preview": "*********************\nGPI Library Reference\n*********************\n\ncocotb contains a native library called :term:`GPI` ("
  },
  {
    "path": "docs/source/maintaining.rst",
    "chars": 8092,
    "preview": "******************\nMaintaining cocotb\n******************\n\nThis section describes how to maintain cocotb, i.e., the more "
  },
  {
    "path": "docs/source/newsfragments/4519.feature.rst",
    "chars": 84,
    "preview": "Support null-ranged arrays (including ``std_logic_vector`` and ``string``) in VHDL.\n"
  },
  {
    "path": "docs/source/newsfragments/4717.change.rst",
    "chars": 70,
    "preview": "Reimplemented the scheduler. Exact scheduling order may have changed.\n"
  },
  {
    "path": "docs/source/newsfragments/4986.removal.1.rst",
    "chars": 49,
    "preview": "Removed Windows and Linux 32-bit release builds.\n"
  },
  {
    "path": "docs/source/newsfragments/4986.removal.rst",
    "chars": 40,
    "preview": "Dropped support for MacOS 13 (Ventura).\n"
  },
  {
    "path": "docs/source/newsfragments/4987.removal.rst",
    "chars": 50,
    "preview": "Support for Python 3.6, 3.7, and 3.8 was removed.\n"
  },
  {
    "path": "docs/source/newsfragments/5007.feature.1.rst",
    "chars": 101,
    "preview": "Added :deco:`cocotb.skipif` to mark a test as conditionally skipped, with an optional reason string.\n"
  },
  {
    "path": "docs/source/newsfragments/5007.feature.2.rst",
    "chars": 115,
    "preview": "Added :deco:`cocotb.xfail` to mark a test as expected to fail with an optional reason and expected exception type.\n"
  },
  {
    "path": "docs/source/newsfragments/5007.feature.rst",
    "chars": 196,
    "preview": "Made :deco:`cocotb.test` and :deco:`cocotb.parametrize` stackable. Applying the decorator multiple times to the same tes"
  },
  {
    "path": "docs/source/newsfragments/5041.bugfix.rst",
    "chars": 92,
    "preview": "Improve VsimSA simulator support (adds Active-HDL support and updates Riviera-Pro support).\n"
  },
  {
    "path": "docs/source/newsfragments/5057.feature.rst",
    "chars": 29,
    "preview": "Add support for Python 3.14.\n"
  },
  {
    "path": "docs/source/newsfragments/5076.feature.rst",
    "chars": 85,
    "preview": "Added ``cwd`` argument to :meth:`Runner.build() <cocotb_tools.runner.Runner.build>`.\n"
  },
  {
    "path": "docs/source/newsfragments/5090.feature.rst",
    "chars": 126,
    "preview": "Added the :ref:`Pytest Plugin <pytest-support>` that enables using pytest as the regression manager for running cocotb t"
  },
  {
    "path": "docs/source/newsfragments/5106.feature.rst",
    "chars": 128,
    "preview": "Added :envvar:`COCOTB_RANDOM_TEST_ORDER` environment variables to enable randomized ordering of cocotb tests within each"
  },
  {
    "path": "docs/source/newsfragments/5114.feature.rst",
    "chars": 216,
    "preview": "Added support for SAIF tracing when using Verilator>=5.042 as the simulator.  This is enabled by adding ``--trace-saif``"
  },
  {
    "path": "docs/source/newsfragments/5131.feature.rst",
    "chars": 141,
    "preview": "Added :envvar:`GPI_DEBUG` and :envvar:`PYGPI_DEBUG` environment variables to enable additional debug features, including"
  },
  {
    "path": "docs/source/newsfragments/5162.change.rst",
    "chars": 137,
    "preview": "Changed :meth:`Task.cancel() <cocotb.task.Task.cancel>` to throw :exc:`RuntimeError` if attempting to cancel the current"
  },
  {
    "path": "docs/source/newsfragments/5163.feature.rst",
    "chars": 129,
    "preview": "Added :class:`cocotb.triggers.TaskManager` for managing multiple concurrent tasks with automatic cleanup on completion o"
  },
  {
    "path": "docs/source/newsfragments/5165.feature.1.rst",
    "chars": 107,
    "preview": "Added :func:`cocotb.triggers.gather` to wait for multiple awaitables concurrently and collect all results.\n"
  },
  {
    "path": "docs/source/newsfragments/5165.feature.2.rst",
    "chars": 120,
    "preview": "Added :func:`cocotb.triggers.select` to wait for multiple awaitables concurrently and return the first one to complete.\n"
  },
  {
    "path": "docs/source/newsfragments/5165.feature.rst",
    "chars": 121,
    "preview": "Added :func:`cocotb.triggers.wait` for waiting on multiple awaitables concurrently with a configurable return condition."
  },
  {
    "path": "docs/source/newsfragments/5179.change.rst",
    "chars": 145,
    "preview": "Verilog packed vectors, structs, and unions no longer map to :class:`~cocotb.handle.LogicArrayObject`, but :class:`~coco"
  },
  {
    "path": "docs/source/newsfragments/5179.feature.1.rst",
    "chars": 101,
    "preview": "Added the :class:`~cocotb.handle.PackedObject` type for Verilog packed vectors, structs, and unions.\n"
  },
  {
    "path": "docs/source/newsfragments/5179.feature.rst",
    "chars": 118,
    "preview": ":class:`~cocotb.handle.LogicArrayObject` (VHDL arrays of ``logic`` and ``bit``) now support indexing single elements.\n"
  },
  {
    "path": "docs/source/newsfragments/5181.feature.rst",
    "chars": 119,
    "preview": "Add support for ``pre_cmd`` argument to :meth:`Runner.test() <cocotb_tools.runner.Runner.test>` for Aldec Riviera-Pro.\n"
  },
  {
    "path": "docs/source/newsfragments/5182.feature.rst",
    "chars": 115,
    "preview": "Add support for ``gui`` argument to :meth:`Runner.test() <cocotb_tools.runner.Runner.test>` for Aldec Riviera-Pro.\n"
  },
  {
    "path": "docs/source/newsfragments/5205.feature.rst",
    "chars": 87,
    "preview": ":func:`~cocotb.triggers.with_timeout` now supports being passed any :term:`awaitable`.\n"
  },
  {
    "path": "docs/source/newsfragments/5206.removal.rst",
    "chars": 248,
    "preview": "Deprecated passing :class:`~cocotb.task.Task`\\ s to :class:`~cocotb.triggers.First` and :class:`~cocotb.triggers.Combine"
  },
  {
    "path": "docs/source/newsfragments/5207.change.rst",
    "chars": 426,
    "preview": "The ``LIBPYTHON_LOC`` environment variable was removed from the GPI. Instead, ``libpython`` should be included in :envva"
  },
  {
    "path": "docs/source/newsfragments/5220.feature.1.rst",
    "chars": 238,
    "preview": "Added support for using underscores (``_``) as visual separators in :class:`str` values used to set the value of :class:"
  },
  {
    "path": "docs/source/newsfragments/5220.feature.rst",
    "chars": 197,
    "preview": "Added visual separator support to :class:`~cocotb.types.LogicArray` string construction. This allows underscores (``_``)"
  },
  {
    "path": "docs/source/newsfragments/5222.feature.rst",
    "chars": 275,
    "preview": "Added the *on_overflow* parameter to :meth:`LogicArray.from_unsigned() <cocotb.types.LogicArray.from_unsigned>` and :met"
  },
  {
    "path": "docs/source/newsfragments/5232.change.rst",
    "chars": 104,
    "preview": "Added :ref:`environment variable type <env-types>` information to all documented environment variables.\n"
  },
  {
    "path": "docs/source/newsfragments/5248.bugfix.rst",
    "chars": 145,
    "preview": ":func:`cocotb.logging.default_config` no longer overwrites root handlers, but configures formatting on whatever handlers"
  },
  {
    "path": "docs/source/newsfragments/5258.change.rst",
    "chars": 190,
    "preview": "Entry points listed in :envvar:`PYGPI_USERS` are no longer passed the ``argv`` object. If you need access to command-lin"
  },
  {
    "path": "docs/source/newsfragments/5263.change.rst",
    "chars": 395,
    "preview": "Changed input value checking on :class:`~cocotb.handle.IntegerObject` and :class:`~cocotb.handle.EnumObject` to reflect "
  },
  {
    "path": "docs/source/newsfragments/5293.feature.1.rst",
    "chars": 132,
    "preview": "Added support for comparing :class:`~cocotb.types.LogicArray` with negative integers. This assumes two's complement repr"
  },
  {
    "path": "docs/source/newsfragments/5293.feature.rst",
    "chars": 136,
    "preview": "Added support for constructing :class:`~cocotb.types.LogicArray` from a negative integer. This assumes two's complement "
  },
  {
    "path": "docs/source/newsfragments/5306.bugfix.rst",
    "chars": 137,
    "preview": "Fixed bug where :envvar:`COCOTB_RESOLVE_X` when set ``\"random\"`` would resolve all non-``0``/``1`` values in a vector to"
  },
  {
    "path": "docs/source/newsfragments/5306.change.rst",
    "chars": 266,
    "preview": "Split the random number generator (RNG) for the :envvar:`COCOTB_RESOLVE_X` ``\"random\"`` mode from the global Python RNG,"
  },
  {
    "path": "docs/source/newsfragments/5309.feature.rst",
    "chars": 121,
    "preview": "Added support for terminating a regression early when the number of test failures reaches :envvar:`COCOTB_MAX_FAILURES`."
  },
  {
    "path": "docs/source/newsfragments/5357.feature.rst",
    "chars": 124,
    "preview": "Added support for :class:`pytest.RaisesExc` and :class:`pytest.RaisesGroup` as ``raises`` argument to :func:`cocotb.xfai"
  },
  {
    "path": "docs/source/newsfragments/5363.change.rst",
    "chars": 68,
    "preview": ":mod:`pytest` is no longer an optional dependency, but is required.\n"
  },
  {
    "path": "docs/source/newsfragments/5366.feature.rst",
    "chars": 91,
    "preview": "Added :envvar:`COCOTB_LIST_TESTS` environment variable to list tests without running them.\n"
  },
  {
    "path": "docs/source/newsfragments/5380.feature.rst",
    "chars": 90,
    "preview": "Added support for :func:`pytest.skip` and :func:`pytest.xfail` for ending the test early.\n"
  },
  {
    "path": "docs/source/newsfragments/5382.change.rst",
    "chars": 188,
    "preview": "The :ref:`Makefile <building>` target ``sim`` no longer recursively calls ``make``. This makes it possible to use ``+=``"
  },
  {
    "path": "docs/source/newsfragments/5392.feature.rst",
    "chars": 106,
    "preview": "Added :func:`cocotb.end_test` to end the test immediately from any :class:`!Task` without forcing a pass.\n"
  },
  {
    "path": "docs/source/newsfragments/5395.removal.rst",
    "chars": 166,
    "preview": "Deprecated :func:`cocotb.pass_test`. Instead, use :func:`cocotb.skip` to skip a test or use :func:`cocotb.end_test` to e"
  },
  {
    "path": "docs/source/newsfragments/5415.feature.rst",
    "chars": 166,
    "preview": "Added public variable :data:`cocotb_tools.runner.SUPPORTED_RUNNERS`, allowing external libraries to register additional "
  },
  {
    "path": "docs/source/newsfragments/5439.bugfix.rst",
    "chars": 126,
    "preview": "Fixed use-after-free in ``VpiSignalObjHdl::register_value_change_callback`` error handling code which caused VCS to segf"
  },
  {
    "path": "docs/source/newsfragments/5440.bugfix.rst",
    "chars": 140,
    "preview": "Fixed a segmentation fault on Icarus Verilog when VPI callbacks fired after the Python interpreter was finalized during "
  },
  {
    "path": "docs/source/newsfragments/5450.feature.rst",
    "chars": 87,
    "preview": "Add ability to specify a particular architecture for a toplevel entity when using NVC.\n"
  },
  {
    "path": "docs/source/newsfragments/5483.feature.rst",
    "chars": 174,
    "preview": "Added support for :class:`~cocotb.triggers.RisingEdge` and :class:`~cocotb.triggers.FallingEdge` for instances of :class"
  },
  {
    "path": "docs/source/newsfragments/5506.feature.rst",
    "chars": 144,
    "preview": "Add support for :envvar:`SIM_CMD_PREFIX` and :envvar:`SIM_CMD_SUFFIX` environment variables to the :ref:`Python Runners "
  },
  {
    "path": "docs/source/newsfragments/5516.change.rst",
    "chars": 166,
    "preview": "Changed the extension on the Icarus GPI implementation library from ``.vpl`` to the normal extension for shared librarie"
  },
  {
    "path": "docs/source/newsfragments/5516.removal.1.rst",
    "chars": 60,
    "preview": "Removed the :func:`!cocotb_tools.config.lib_name` function.\n"
  },
  {
    "path": "docs/source/newsfragments/5516.removal.rst",
    "chars": 88,
    "preview": "Removed the ``--lib-name`` option from the :ref:`cocotb-config <cocotb-config>` script.\n"
  },
  {
    "path": "docs/source/newsfragments/README.rst",
    "chars": 3868,
    "preview": ":orphan:\n\n*********************\nWriting Release Notes\n*********************\n\nWe are using `towncrier <https://pypi.org/p"
  },
  {
    "path": "docs/source/platform_support.rst",
    "chars": 6837,
    "preview": ".. _platform-support:\n\n****************\nPlatform Support\n****************\n\ncocotb supports Windows, Linux, and macOS, wi"
  },
  {
    "path": "docs/source/profiling.rst",
    "chars": 2410,
    "preview": "************************\nProfiling Testbench Code\n************************\n\ncocotb provides two ways to profile your tes"
  },
  {
    "path": "docs/source/py-modindex.rst",
    "chars": 184,
    "preview": "..\n   This file is a placeholder and will be replaced by Sphinx\n   This is a hack to put the module index in the toctree"
  },
  {
    "path": "docs/source/pytest.rst",
    "chars": 19802,
    "preview": ".. _pytest-support:\n\n**************\nPytest Support\n**************\n\n:py:mod:`cocotb_tools.pytest.plugin` provides full `p"
  },
  {
    "path": "docs/source/quickstart.rst",
    "chars": 10359,
    "preview": ".. _quickstart:\n\n****************\nQuickstart Guide\n****************\nThis guide describe some minimal cocotb testcase exa"
  },
  {
    "path": "docs/source/refcard.rst",
    "chars": 10147,
    "preview": ".. _refcard:\n\n**************\nReference Card\n**************\n..\n   Document \"best practice\"; leave out detail.\n   Keep for"
  },
  {
    "path": "docs/source/regulator.rst",
    "chars": 4036,
    "preview": "##################################\nThe cocotb ``regulator`` Testbench\n##################################\n\n.. versionadde"
  },
  {
    "path": "docs/source/release_notes.rst",
    "chars": 85830,
    "preview": "*************\nRelease Notes\n*************\n\n.. spelling:word-list::\n   dev\n\nAll releases are available from the `GitHub R"
  },
  {
    "path": "docs/source/rescap.rst",
    "chars": 4499,
    "preview": "###############################\nThe cocotb ``rescap`` Testbench\n###############################\n\n.. versionadded:: 1.5\n\n"
  },
  {
    "path": "docs/source/roadmap.rst",
    "chars": 1085,
    "preview": "*******\nRoadmap\n*******\n\ncocotb is under development;\nhowever there is no \"master plan\".\nWe depend upon users to contrib"
  },
  {
    "path": "docs/source/rotating_logger.rst",
    "chars": 881,
    "preview": ".. _rotating-logger:\n\n******************\nRotating Log Files\n******************\n\nThe following is an example of how to su"
  },
  {
    "path": "docs/source/runner.rst",
    "chars": 5941,
    "preview": ".. _howto-python-runner:\n\n******************************\nBuilding HDL and Running Tests\n******************************\n\n"
  },
  {
    "path": "docs/source/simulator_support.rst",
    "chars": 19819,
    "preview": ".. _simulator-support:\n\n*****************\nSimulator Support\n*****************\n\nThis page lists the simulators that cocot"
  },
  {
    "path": "docs/source/spelling_wordlist.txt",
    "chars": 1132,
    "preview": "AMS\nAXI\nAldec\nAltera\nAvalon\nCosimulation\nDeprecations\nFLI\nGPI\nGTKWave\nGigabit\nGitHub\nGitLab\nHDL\nIPython\nIndices\nLite\nMiB"
  },
  {
    "path": "docs/source/support.rst",
    "chars": 814,
    "preview": "************\nGetting Help\n************\n\nGetting in Contact with a Maintainer\n====================================\n\nAll o"
  },
  {
    "path": "docs/source/timing_model.rst",
    "chars": 12292,
    "preview": ".. _timing-model:\n\n****************\nThe Timing Model\n****************\n\ncocotb's timing model is a simplification of the "
  },
  {
    "path": "docs/source/troubleshooting.rst",
    "chars": 9456,
    "preview": "***************\nTroubleshooting\n***************\n\nSimulation Hangs\n================\n\nDid you call an :keyword:`async def`"
  },
  {
    "path": "docs/source/update_indexing.rst",
    "chars": 5899,
    "preview": ".. _update-indexing:\n\n******************************\nUpdate Indexing for cocotb 2.0\n******************************\n\ncoco"
  },
  {
    "path": "docs/source/upgrade-2.0.rst",
    "chars": 55680,
    "preview": "=======================\nUpgrading to cocotb 2.0\n=======================\n\ncocotb 2.0 makes testbenches easier to understa"
  },
  {
    "path": "docs/source/writing_testbenches.rst",
    "chars": 18684,
    "preview": ".. _writing_tbs:\n\n*******************\nWriting Testbenches\n*******************\n\n\nLogging\n=======\n\ncocotb uses Python's :m"
  },
  {
    "path": "examples/Makefile",
    "chars": 1016,
    "preview": "# Copyright cocotb contributors\n# Copyright (c) 2013, 2018 Potential Ventures Ltd\n# Copyright (c) 2013 SolarFlare Commun"
  },
  {
    "path": "examples/adder/hdl/adder.sv",
    "chars": 367,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n// Adde"
  },
  {
    "path": "examples/adder/hdl/adder.vhdl",
    "chars": 585,
    "preview": "-- This file is public domain, it can be freely copied without restrictions.\n-- SPDX-License-Identifier: CC0-1.0\n-- Adde"
  },
  {
    "path": "examples/adder/model/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "examples/adder/model/adder_model.py",
    "chars": 230,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\nfrom __fu"
  },
  {
    "path": "examples/adder/tests/Makefile",
    "chars": 796,
    "preview": "# Copyright cocotb contributors\n# Copyright (c) 2013 Potential Ventures Ltd\n# Copyright (c) 2013 SolarFlare Communicatio"
  },
  {
    "path": "examples/adder/tests/test_adder.py",
    "chars": 2259,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\n# Simple "
  },
  {
    "path": "examples/analog_model/Makefile",
    "chars": 375,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\n\nTOPLEVEL"
  },
  {
    "path": "examples/analog_model/afe.py",
    "chars": 2868,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\nfrom __fu"
  },
  {
    "path": "examples/analog_model/digital.sv",
    "chars": 1940,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\nmodule"
  },
  {
    "path": "examples/analog_model/test_analog_model.py",
    "chars": 2045,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\nfrom __fu"
  },
  {
    "path": "examples/doc_examples/quickstart/Makefile",
    "chars": 646,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\n\n# Makefi"
  },
  {
    "path": "examples/doc_examples/quickstart/simple_counter.sv",
    "chars": 600,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\nmodule"
  },
  {
    "path": "examples/doc_examples/quickstart/simple_counter_testcases.py",
    "chars": 5486,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\n\n\"\"\"This "
  },
  {
    "path": "examples/doc_examples/quickstart/test_runner.py",
    "chars": 963,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\n\n\"\"\"This "
  },
  {
    "path": "examples/matrix_multiplier/hdl/matrix_multiplier.sv",
    "chars": 1868,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\n// Mat"
  },
  {
    "path": "examples/matrix_multiplier/hdl/matrix_multiplier.vhd",
    "chars": 1972,
    "preview": "-- This file is public domain, it can be freely copied without restrictions.\n-- SPDX-License-Identifier: CC0-1.0\n\n-- Mat"
  },
  {
    "path": "examples/matrix_multiplier/hdl/matrix_multiplier_pkg.vhd",
    "chars": 612,
    "preview": "-- This file is public domain, it can be freely copied without restrictions.\n-- SPDX-License-Identifier: CC0-1.0\n\nlibrar"
  },
  {
    "path": "examples/matrix_multiplier/tests/Makefile",
    "chars": 3342,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\n\nTOPLEVEL"
  },
  {
    "path": "examples/matrix_multiplier/tests/matrix_multiplier_tests.py",
    "chars": 15119,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\nfrom __fu"
  },
  {
    "path": "examples/matrix_multiplier/tests/test_matrix_multiplier.py",
    "chars": 2279,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\nfrom __fu"
  },
  {
    "path": "examples/mixed_language/hdl/endian_swapper.sv",
    "chars": 4894,
    "preview": "// Copyright cocotb contributors\n// Copyright (c) 2013 Potential Ventures Ltd\n// Copyright (c) 2013 SolarFlare Communica"
  },
  {
    "path": "examples/mixed_language/hdl/endian_swapper.vhdl",
    "chars": 5572,
    "preview": "-- Copyright cocotb contributors\n-- Copyright (c) 2014 Potential Ventures Ltd\n-- Licensed under the Revised BSD License,"
  },
  {
    "path": "examples/mixed_language/hdl/toplevel.sv",
    "chars": 4932,
    "preview": "// Example using mixed-language simulation\n//\n// Here we have a SystemVerilog toplevel that instantiates both SV and VHD"
  },
  {
    "path": "examples/mixed_language/hdl/toplevel.vhdl",
    "chars": 6409,
    "preview": "-- Example using mixed-language simulation\n--\n-- Here we have a VHDL toplevel that instantiates both SV and VHDL\n-- sub "
  },
  {
    "path": "examples/mixed_language/tests/Makefile",
    "chars": 1029,
    "preview": "# Override this variable to use a VHDL toplevel instead of SystemVerilog\nTOPLEVEL_LANG ?= verilog\n\nifeq ($(SIM),)\nall:\n\t"
  },
  {
    "path": "examples/mixed_language/tests/test_mixed_language.py",
    "chars": 5264,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": "examples/mixed_signal/.gitignore",
    "chars": 8,
    "preview": "run.raw\n"
  },
  {
    "path": "examples/mixed_signal/hdl/analog_probe_cadence.sv",
    "chars": 1335,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\n// see"
  },
  {
    "path": "examples/mixed_signal/hdl/analog_probe_synopsys.sv",
    "chars": 514,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\nmodule"
  },
  {
    "path": "examples/mixed_signal/hdl/capacitor.vams",
    "chars": 422,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\n`inclu"
  },
  {
    "path": "examples/mixed_signal/hdl/nettypes_pkg_cadence.sv",
    "chars": 209,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\nimport"
  },
  {
    "path": "examples/mixed_signal/hdl/nettypes_pkg_synopsys.sv",
    "chars": 321,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\npackag"
  },
  {
    "path": "examples/mixed_signal/hdl/regulator.sv",
    "chars": 532,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\nmodule"
  },
  {
    "path": "examples/mixed_signal/hdl/regulator.vams",
    "chars": 749,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\n`inclu"
  },
  {
    "path": "examples/mixed_signal/hdl/regulator_block.vams",
    "chars": 749,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\n`inclu"
  },
  {
    "path": "examples/mixed_signal/hdl/rescap.sv",
    "chars": 462,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\n// the"
  },
  {
    "path": "examples/mixed_signal/hdl/resistor.vams",
    "chars": 390,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\n`inclu"
  },
  {
    "path": "examples/mixed_signal/hdl/tb_regulator.sv",
    "chars": 576,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\nimport"
  },
  {
    "path": "examples/mixed_signal/hdl/tb_rescap.sv",
    "chars": 487,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\nimport"
  },
  {
    "path": "examples/mixed_signal/tests/Makefile",
    "chars": 3197,
    "preview": "# Override this variable to use a VHDL toplevel instead of (System)Verilog\nTOPLEVEL_LANG ?= verilog\n\nCOCOTB_TOPLEVEL ?= "
  },
  {
    "path": "examples/mixed_signal/tests/run.scs",
    "chars": 380,
    "preview": "// Cadence Spectre control file for analog solver\n//tran tran stop=100u step=5n maxstep=5n relref=alllocal checklimitdes"
  },
  {
    "path": "examples/mixed_signal/tests/test_regulator_plot.py",
    "chars": 2740,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\nfrom __fu"
  },
  {
    "path": "examples/mixed_signal/tests/test_regulator_trim.py",
    "chars": 4590,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\nfrom __fu"
  },
  {
    "path": "examples/mixed_signal/tests/test_rescap.py",
    "chars": 6076,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\nfrom __fu"
  },
  {
    "path": "examples/mixed_signal/tests/test_rescap_minimalist.py",
    "chars": 1075,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\nfrom __fu"
  },
  {
    "path": "examples/mixed_signal/tests/vcsAD.init",
    "chars": 81,
    "preview": "choose hsim spice/foo.cdl;\npartition -cell subckt1 subckt2;\nset bus_format [%d];\n"
  },
  {
    "path": "examples/simple_dff/.gitignore",
    "chars": 442,
    "preview": "# Python\n__pycache__\n\n# Waveforms\n*.vcd\n\n# Results\nresults.xml\nsim_build\n\n# VCS files\n*.tab\nucli.key\n\n# Cadence Incisive"
  },
  {
    "path": "examples/simple_dff/Makefile",
    "chars": 400,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\n\nTOPLEVEL"
  },
  {
    "path": "examples/simple_dff/dff.sv",
    "chars": 243,
    "preview": "// This file is public domain, it can be freely copied without restrictions.\n// SPDX-License-Identifier: CC0-1.0\n\n`times"
  },
  {
    "path": "examples/simple_dff/dff.vhdl",
    "chars": 397,
    "preview": "-- This file is public domain, it can be freely copied without restrictions.\n-- SPDX-License-Identifier: CC0-1.0\n\nlibrar"
  },
  {
    "path": "examples/simple_dff/test_dff.py",
    "chars": 1900,
    "preview": "# This file is public domain, it can be freely copied without restrictions.\n# SPDX-License-Identifier: CC0-1.0\nfrom __fu"
  },
  {
    "path": "noxfile.py",
    "chars": 18422,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": "pyproject.toml",
    "chars": 9717,
    "preview": "[build-system]\nrequires = [\"setuptools>=77\", \"wheel\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"cocotb\""
  },
  {
    "path": "setup.py",
    "chars": 2686,
    "preview": "#!/usr/bin/env python\n# Copyright cocotb contributors\n# Copyright (c) 2013 Potential Ventures Ltd\n# Copyright (c) 2013 S"
  },
  {
    "path": "src/cocotb/_ANSI.py",
    "chars": 2242,
    "preview": "# Copyright cocotb contributors\n# Copyright (c) 2013, 2018 Potential Ventures Ltd\n# Copyright (c) 2013 SolarFlare Commun"
  },
  {
    "path": "src/cocotb/__init__.py",
    "chars": 2829,
    "preview": "# Copyright cocotb contributors\n# Copyright (c) 2013 Potential Ventures Ltd\n# Copyright (c) 2013 SolarFlare Communicatio"
  },
  {
    "path": "src/cocotb/_base_triggers.py",
    "chars": 16283,
    "preview": "# Copyright cocotb contributors\n# Copyright (c) 2013 Potential Ventures Ltd\n# Copyright (c) 2013 SolarFlare Communicatio"
  },
  {
    "path": "src/cocotb/_bridge.py",
    "chars": 10167,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": "src/cocotb/_concurrent_waiters.py",
    "chars": 9515,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": "src/cocotb/_decorators.py",
    "chars": 20983,
    "preview": "# Copyright cocotb contributors\n# Copyright (c) 2013 Potential Ventures Ltd\n# Copyright (c) 2013 SolarFlare Communicatio"
  },
  {
    "path": "src/cocotb/_deprecation.py",
    "chars": 1544,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": "src/cocotb/_event_loop.py",
    "chars": 2118,
    "preview": "# Copyright cocotb contributors\n# Licensed under the Revised BSD License, see LICENSE for details.\n# SPDX-License-Identi"
  },
  {
    "path": "src/cocotb/_extended_awaitables.py",
    "chars": 14470,
    "preview": "# Copyright cocotb contributors\n# Copyright (c) 2013 Potential Ventures Ltd\n# Copyright (c) 2013 SolarFlare Communicatio"
  },
  {
    "path": "src/cocotb/_gpi_triggers.py",
    "chars": 13561,
    "preview": "# Copyright cocotb contributors\n# Copyright (c) 2013 Potential Ventures Ltd\n# Copyright (c) 2013 SolarFlare Communicatio"
  },
  {
    "path": "src/cocotb/_init.py",
    "chars": 6985,
    "preview": "# Copyright cocotb contributors\n# Copyright (c) 2013 Potential Ventures Ltd\n# Copyright (c) 2013 SolarFlare Communicatio"
  },
  {
    "path": "src/cocotb/_outcomes.py",
    "chars": 1375,
    "preview": "\"\"\"\nInspired by https://github.com/python-trio/outcome\n\nAn outcome is similar to the built-in :any:`concurrent.futures.F"
  }
]

// ... and 435 more files (download for full content)

About this extraction

This page contains the full source code of the potentialventures/cocotb GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 635 files (3.0 MB), approximately 808.7k tokens, and a symbol index with 2742 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!