Feature: Added Documentation in

This commit is contained in:
Ali Nwegy 2024-03-01 10:44:15 +01:00
parent 2ee2b10c40
commit 16b9105873
51 changed files with 783 additions and 1187 deletions

View File

@ -2,7 +2,9 @@
__\[fn_gen\]__ The Function Generator SCPI library in Python
### Description: A library for usage with SCPI compliant function generators (for now the DG2000 series from rigol)
### Description:
A library for usage with SCPI compliant function generators (for now the DG2000 series from rigol)
### Installation:

View File

@ -139,7 +139,7 @@
<div class="type">Package</div>
<div class="kind">Package</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">A library for usage with SCPI compliant function generators (for now the DG2000 series from rigol)</div>
</li><li id="fn_gen.common">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.common</div>
@ -147,7 +147,7 @@
<div class="type">Module</div>
<div class="kind">Module</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Common functions that are used all over the package</div>
</li><li id="fn_gen.dg2052">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052</div>
@ -155,7 +155,7 @@
<div class="type">Module</div>
<div class="kind">Module</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">No module docstring; 1/1 class documented</span></div>
<div class="summary">The main funciton generator module</div>
</li><li id="fn_gen.enums">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.enums</div>
@ -163,7 +163,7 @@
<div class="type">Package</div>
<div class="kind">Package</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Some enums that are used within this package</div>
</li><li id="fn_gen.enums.comm_method">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.enums<wbr></wbr>.comm<wbr></wbr>_method</div>
@ -171,7 +171,7 @@
<div class="type">Module</div>
<div class="kind">Module</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">No module docstring; 1/1 class documented</span></div>
<div class="summary">Communication Method Enumeration</div>
</li><li id="fn_gen.enums.sweep_signal_type">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.enums<wbr></wbr>.sweep<wbr></wbr>_signal<wbr></wbr>_type</div>
@ -179,7 +179,7 @@
<div class="type">Module</div>
<div class="kind">Module</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">No module docstring; 1/1 class documented</span></div>
<div class="summary">Enumeration representing the different signal types used in a sweep</div>
</li><li id="fn_gen.enums.sweep_spacing">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.enums<wbr></wbr>.sweep<wbr></wbr>_spacing</div>
@ -187,7 +187,7 @@
<div class="type">Module</div>
<div class="kind">Module</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">No module docstring; 1/1 class documented</span></div>
<div class="summary">The spacings used for the sweep</div>
</li><li id="fn_gen.enums.sweep_trigger_slope">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.enums<wbr></wbr>.sweep<wbr></wbr>_trigger<wbr></wbr>_slope</div>
@ -195,7 +195,7 @@
<div class="type">Module</div>
<div class="kind">Module</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">No module docstring; 1/1 class documented</span></div>
<div class="summary">The different slopes used when the <code><a href="fn_gen.enums.sweep_trigger_source.html" class="internal-link" title="fn_gen.enums.sweep_trigger_source">sweep_trigger_source</a></code> is set to <code><a href="fn_gen.enums.sweep_trigger_source.SweepTriggerSource.html#EXTERNAL" class="internal-link" title="fn_gen.enums.sweep_trigger_source.SweepTriggerSource.EXTERNAL">SweepTriggerSource.EXTERNAL</a></code></div>
</li><li id="fn_gen.enums.sweep_trigger_source">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.enums<wbr></wbr>.sweep<wbr></wbr>_trigger<wbr></wbr>_source</div>
@ -203,7 +203,7 @@
<div class="type">Module</div>
<div class="kind">Module</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">No module docstring; 1/1 class documented</span></div>
<div class="summary">The different sources available to trigger a sweep</div>
</li><li id="fn_gen.errors">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.errors</div>
@ -211,7 +211,7 @@
<div class="type">Package</div>
<div class="kind">Package</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">A combination of errors used within the package</div>
</li><li id="fn_gen.errors.undefined_communication_method_error">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.errors<wbr></wbr>.undefined<wbr></wbr>_communication<wbr></wbr>_method<wbr></wbr>_error</div>
@ -219,7 +219,7 @@
<div class="type">Module</div>
<div class="kind">Module</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">An error type used when the communication method is not in the <code><a href="fn_gen.enums.comm_method.CommMethod.html" class="internal-link" title="fn_gen.enums.comm_method.CommMethod">CommMethod</a></code> enum</div>
</li><li id="fn_gen.errors.undefined_value_error">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.errors<wbr></wbr>.undefined<wbr></wbr>_value<wbr></wbr>_error</div>
@ -227,7 +227,7 @@
<div class="type">Module</div>
<div class="kind">Module</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">An error used when the value used is not defined</div>
</li><li id="fn_gen.errors.value_out_of_bounds_error">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.errors<wbr></wbr>.value<wbr></wbr>_out<wbr></wbr>_of<wbr></wbr>_bounds<wbr></wbr>_error</div>
@ -235,7 +235,7 @@
<div class="type">Module</div>
<div class="kind">Module</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">An error used when the value used is out of bounds for the function</div>
</li><li id="fn_gen.errors.undefined_communication_method_error.UndefinedCommunicationMethodError">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.errors<wbr></wbr>.undefined<wbr></wbr>_communication<wbr></wbr>_method<wbr></wbr>_error<wbr></wbr>.<wbr></wbr>Undefined<wbr></wbr>Communication<wbr></wbr>Method<wbr></wbr>Error</div>
@ -291,7 +291,7 @@
<div class="type">Function</div>
<div class="kind">Function</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Checks the whether the given value is within bounds</div>
</li><li id="fn_gen.enums.comm_method.CommMethod">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.enums<wbr></wbr>.comm<wbr></wbr>_method<wbr></wbr>.<wbr></wbr>Comm<wbr></wbr>Method</div>
@ -444,30 +444,30 @@
<div class="kind">Class</div>
<div class="privacy">PUBLIC</div>
<div class="summary">This is an object representing the Rigol DG2052 function generator. This object uses the SCPI protocol for communicating with the Rigol DG2052 function generator.</div>
</li><li id="fn_gen.dg2052.DG2052.port">
</li><li id="fn_gen.dg2052.DG2052.__comm">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.port</div>
<div class="url">fn_gen.dg2052.DG2052.html#port</div>
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.__comm</div>
<div class="url">fn_gen.dg2052.DG2052.html#__comm</div>
<div class="type">Attribute</div>
<div class="kind">Instance Variable</div>
<div class="privacy">PUBLIC</div>
<div class="summary">The SCPI port describing the device, consists of a communication method and device port followed by the "::INSTR" keyword. communication method: can be either USB or TCPIP (other communication methods are not supported for this device) device port: either COMM4 or /dev/USB0 for USB in windows and posix systems respectively or the IP Address for TCPIP...</div>
</li><li id="fn_gen.dg2052.DG2052.rm">
<div class="privacy">PRIVATE</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
</li><li id="fn_gen.dg2052.DG2052.__rm">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.rm</div>
<div class="url">fn_gen.dg2052.DG2052.html#rm</div>
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.__rm</div>
<div class="url">fn_gen.dg2052.DG2052.html#__rm</div>
<div class="type">Attribute</div>
<div class="kind">Instance Variable</div>
<div class="privacy">PUBLIC</div>
<div class="summary">The resource manager object for pyvisa (for future use)</div>
</li><li id="fn_gen.dg2052.DG2052.comm">
<div class="privacy">PRIVATE</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
</li><li id="fn_gen.dg2052.DG2052.__port">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.comm</div>
<div class="url">fn_gen.dg2052.DG2052.html#comm</div>
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.__port</div>
<div class="url">fn_gen.dg2052.DG2052.html#__port</div>
<div class="type">Attribute</div>
<div class="kind">Instance Variable</div>
<div class="privacy">PUBLIC</div>
<div class="summary">The communication method used (either TCPIP or USB)</div>
<div class="privacy">PRIVATE</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
</li><li id="fn_gen.dg2052.DG2052.__init__">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.__init__</div>
@ -483,7 +483,7 @@
<div class="type">Function</div>
<div class="kind">Method</div>
<div class="privacy">PUBLIC</div>
<div class="summary">shows the identification of the connected instrument</div>
<div class="summary">Shows the identification of the connected instrument</div>
</li><li id="fn_gen.dg2052.DG2052.set_output">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.set<wbr></wbr>_output</div>
@ -499,7 +499,7 @@
<div class="type">Function</div>
<div class="kind">Method</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Toggles the corresponding output channel</div>
</li><li id="fn_gen.dg2052.DG2052.get_output_volt_limits">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.get<wbr></wbr>_output<wbr></wbr>_volt<wbr></wbr>_limits</div>
@ -515,7 +515,7 @@
<div class="type">Function</div>
<div class="kind">Method</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Returns the output impedance.</div>
</li><li id="fn_gen.dg2052.DG2052.get_output_load">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.get<wbr></wbr>_output<wbr></wbr>_load</div>
@ -523,7 +523,7 @@
<div class="type">Function</div>
<div class="kind">Method</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Returns the output load.</div>
</li><li id="fn_gen.dg2052.DG2052.get_output_signal">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.get<wbr></wbr>_output<wbr></wbr>_signal</div>
@ -531,7 +531,7 @@
<div class="type">Function</div>
<div class="kind">Method</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Returns the signal type and parameters.</div>
</li><li id="fn_gen.dg2052.DG2052.get_output_state">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.get<wbr></wbr>_output<wbr></wbr>_state</div>
@ -539,7 +539,7 @@
<div class="type">Function</div>
<div class="kind">Method</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Returns the output state of the signal</div>
</li><li id="fn_gen.dg2052.DG2052.is_output_on">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.is<wbr></wbr>_output<wbr></wbr>_on</div>
@ -547,7 +547,7 @@
<div class="type">Function</div>
<div class="kind">Method</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Returns a boolean representing the state of the output</div>
</li><li id="fn_gen.dg2052.DG2052.set_dc">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.set<wbr></wbr>_dc</div>
@ -555,7 +555,7 @@
<div class="type">Function</div>
<div class="kind">Method</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Sets the output channel to DC voltage mode</div>
</li><li id="fn_gen.dg2052.DG2052.set_sine_wave">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.set<wbr></wbr>_sine<wbr></wbr>_wave</div>
@ -563,7 +563,7 @@
<div class="type">Function</div>
<div class="kind">Method</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Sets the output channel to A Sine Wave</div>
</li><li id="fn_gen.dg2052.DG2052.set_frequency">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.set<wbr></wbr>_frequency</div>
@ -571,7 +571,7 @@
<div class="type">Function</div>
<div class="kind">Method</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Sets the frequency of the set signal</div>
</li><li id="fn_gen.dg2052.DG2052.set_square_wave">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.set<wbr></wbr>_square<wbr></wbr>_wave</div>
@ -579,7 +579,7 @@
<div class="type">Function</div>
<div class="kind">Method</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Sets the output channel to A Square Wave</div>
</li><li id="fn_gen.dg2052.DG2052.set_ramp">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.set<wbr></wbr>_ramp</div>
@ -587,7 +587,7 @@
<div class="type">Function</div>
<div class="kind">Method</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Sets the output channel to A Ramp (Triangular) Wave</div>
</li><li id="fn_gen.dg2052.DG2052.set_sweep">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.set<wbr></wbr>_sweep</div>
@ -595,7 +595,7 @@
<div class="type">Function</div>
<div class="kind">Method</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Sets the parameters of a signal sweep</div>
</li><li id="fn_gen.dg2052.DG2052.trigger_sweep">
<div class="fullName">fn<wbr></wbr>_gen<wbr></wbr>.dg2052<wbr></wbr>.DG2052<wbr></wbr>.trigger<wbr></wbr>_sweep</div>
@ -603,7 +603,7 @@
<div class="type">Function</div>
<div class="kind">Method</div>
<div class="privacy">PUBLIC</div>
<div class="summary"><span class="undocumented">Undocumented</span></div>
<div class="summary">Triggers a sweep manually (Only works if the sweep was setup with <code>trigger_source</code> as <code><a href="fn_gen.enums.sweep_trigger_source.SweepTriggerSource.html#MANUAL" class="internal-link" title="fn_gen.enums.sweep_trigger_source.SweepTriggerSource.MANUAL">SweepTriggerSource.MANUAL</a></code>)</div>
</li>
</ul>
</div>

View File

@ -150,7 +150,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -286,7 +286,7 @@
</div>
<div class="moduleDocstring">
<div><p class="undocumented">Undocumented</p></div>
<div><p>Common functions that are used all over the package</p></div>
</div>
<div id="splitTables">
@ -297,7 +297,7 @@
<td>Function</td>
<td><code><a href="#check_bounds" class="internal-link" title="fn_gen.common.check_bounds">check<wbr></wbr>_bounds</a></code></td>
<td><span class="undocumented">Undocumented</span></td>
<td>Checks the whether the given value is within bounds</td>
</tr>
</table>
@ -328,7 +328,7 @@
</div>
<div class="docstring functionBody">
<div><p class="undocumented">Undocumented</p></div>
<div><p>Checks the whether the given value is within bounds</p><table class="fieldTable"><tr class="fieldStart"><td class="fieldName" colspan="2">Parameters</td></tr><tr><td class="fieldArgContainer"><span class="fieldArg">bounds:</span><code><a href="https://docs.python.org/3/library/stdtypes.html#tuple" class="intersphinx-link">tuple</a>[<a href="https://docs.python.org/3/library/functions.html#float" class="intersphinx-link">float</a></code>, <code><a href="https://docs.python.org/3/library/functions.html#float" class="intersphinx-link">float</a>]</code></td><td class="fieldArgDesc">The bounds to check within</td></tr><tr><td class="fieldArgContainer"><span class="fieldArg">value:</span><code><a href="https://docs.python.org/3/library/functions.html#float" class="intersphinx-link">float</a></code></td><td class="fieldArgDesc">The value to check</td></tr></table></div>
</div>
</div>
</div>
@ -342,7 +342,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

File diff suppressed because one or more lines are too long

View File

@ -286,7 +286,7 @@
</div>
<div class="moduleDocstring">
<div><p class="undocumented">Undocumented</p></div>
<div><p>The main funciton generator module</p></div>
</div>
<div id="splitTables">
@ -318,7 +318,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -351,7 +351,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -296,7 +296,7 @@
</div>
<div class="moduleDocstring">
<div><p class="undocumented">Undocumented</p></div>
<div><p>Communication Method Enumeration</p></div>
</div>
<div id="splitTables">
@ -328,7 +328,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -326,7 +326,7 @@
</div>
<div class="moduleDocstring">
<div><p class="undocumented">Undocumented</p></div>
<div><p>Some enums that are used within this package</p></div>
</div>
<div id="splitTables">
@ -337,27 +337,27 @@
<td>Module</td>
<td><code><a href="fn_gen.enums.comm_method.html" class="internal-link" title="fn_gen.enums.comm_method">comm<wbr></wbr>_method</a></code></td>
<td><span class="undocumented">No module docstring; 1/1 class documented</span></td>
<td>Communication Method Enumeration</td>
</tr><tr class="module">
<td>Module</td>
<td><code><a href="fn_gen.enums.sweep_signal_type.html" class="internal-link" title="fn_gen.enums.sweep_signal_type">sweep<wbr></wbr>_signal<wbr></wbr>_type</a></code></td>
<td><span class="undocumented">No module docstring; 1/1 class documented</span></td>
<td>Enumeration representing the different signal types used in a sweep</td>
</tr><tr class="module">
<td>Module</td>
<td><code><a href="fn_gen.enums.sweep_spacing.html" class="internal-link" title="fn_gen.enums.sweep_spacing">sweep<wbr></wbr>_spacing</a></code></td>
<td><span class="undocumented">No module docstring; 1/1 class documented</span></td>
<td>The spacings used for the sweep</td>
</tr><tr class="module">
<td>Module</td>
<td><code><a href="fn_gen.enums.sweep_trigger_slope.html" class="internal-link" title="fn_gen.enums.sweep_trigger_slope">sweep<wbr></wbr>_trigger<wbr></wbr>_slope</a></code></td>
<td><span class="undocumented">No module docstring; 1/1 class documented</span></td>
<td>The different slopes used when the <code><a href="fn_gen.enums.sweep_trigger_source.html" class="internal-link" title="fn_gen.enums.sweep_trigger_source">sweep_trigger_source</a></code> is set to <code><a href="fn_gen.enums.sweep_trigger_source.SweepTriggerSource.html#EXTERNAL" class="internal-link" title="fn_gen.enums.sweep_trigger_source.SweepTriggerSource.EXTERNAL">SweepTriggerSource.EXTERNAL</a></code></td>
</tr><tr class="module">
<td>Module</td>
<td><code><a href="fn_gen.enums.sweep_trigger_source.html" class="internal-link" title="fn_gen.enums.sweep_trigger_source">sweep<wbr></wbr>_trigger<wbr></wbr>_source</a></code></td>
<td><span class="undocumented">No module docstring; 1/1 class documented</span></td>
<td>The different sources available to trigger a sweep</td>
</tr>
</table>
@ -378,7 +378,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -390,7 +390,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -296,7 +296,7 @@
</div>
<div class="moduleDocstring">
<div><p class="undocumented">Undocumented</p></div>
<div><p>Enumeration representing the different signal types used in a sweep</p></div>
</div>
<div id="splitTables">
@ -328,7 +328,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -390,7 +390,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -296,7 +296,7 @@
</div>
<div class="moduleDocstring">
<div><p class="undocumented">Undocumented</p></div>
<div><p>The spacings used for the sweep</p></div>
</div>
<div id="splitTables">
@ -328,7 +328,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -351,7 +351,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -296,7 +296,7 @@
</div>
<div class="moduleDocstring">
<div><p class="undocumented">Undocumented</p></div>
<div><p>The different slopes used when the <code><a href="fn_gen.enums.sweep_trigger_source.html" class="internal-link" title="fn_gen.enums.sweep_trigger_source">sweep_trigger_source</a></code> is set to <code><a href="fn_gen.enums.sweep_trigger_source.SweepTriggerSource.html#EXTERNAL" class="internal-link" title="fn_gen.enums.sweep_trigger_source.SweepTriggerSource.EXTERNAL">SweepTriggerSource.EXTERNAL</a></code></p></div>
</div>
<div id="splitTables">
@ -328,7 +328,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -390,7 +390,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -296,7 +296,7 @@
</div>
<div class="moduleDocstring">
<div><p class="undocumented">Undocumented</p></div>
<div><p>The different sources available to trigger a sweep</p></div>
</div>
<div id="splitTables">
@ -328,7 +328,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -306,7 +306,7 @@
</div>
<div class="moduleDocstring">
<div><p class="undocumented">Undocumented</p></div>
<div><p>A combination of errors used within the package</p></div>
</div>
<div id="splitTables">
@ -317,17 +317,17 @@
<td>Module</td>
<td><code><a href="fn_gen.errors.undefined_communication_method_error.html" class="internal-link" title="fn_gen.errors.undefined_communication_method_error">undefined<wbr></wbr>_communication<wbr></wbr>_method<wbr></wbr>_error</a></code></td>
<td><span class="undocumented">Undocumented</span></td>
<td>An error type used when the communication method is not in the <code><a href="fn_gen.enums.comm_method.CommMethod.html" class="internal-link" title="fn_gen.enums.comm_method.CommMethod">CommMethod</a></code> enum</td>
</tr><tr class="module">
<td>Module</td>
<td><code><a href="fn_gen.errors.undefined_value_error.html" class="internal-link" title="fn_gen.errors.undefined_value_error">undefined<wbr></wbr>_value<wbr></wbr>_error</a></code></td>
<td><span class="undocumented">Undocumented</span></td>
<td>An error used when the value used is not defined</td>
</tr><tr class="module">
<td>Module</td>
<td><code><a href="fn_gen.errors.value_out_of_bounds_error.html" class="internal-link" title="fn_gen.errors.value_out_of_bounds_error">value<wbr></wbr>_out<wbr></wbr>_of<wbr></wbr>_bounds<wbr></wbr>_error</a></code></td>
<td><span class="undocumented">Undocumented</span></td>
<td>An error used when the value used is out of bounds for the function</td>
</tr>
</table>
@ -348,7 +348,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -312,7 +312,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -276,7 +276,7 @@
</div>
<div class="moduleDocstring">
<div><p class="undocumented">Undocumented</p></div>
<div><p>An error type used when the communication method is not in the <code><a href="fn_gen.enums.comm_method.CommMethod.html" class="internal-link" title="fn_gen.enums.comm_method.CommMethod">CommMethod</a></code> enum</p></div>
</div>
<div id="splitTables">
@ -308,7 +308,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -312,7 +312,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -276,7 +276,7 @@
</div>
<div class="moduleDocstring">
<div><p class="undocumented">Undocumented</p></div>
<div><p>An error used when the value used is not defined</p></div>
</div>
<div id="splitTables">
@ -308,7 +308,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -312,7 +312,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -276,7 +276,7 @@
</div>
<div class="moduleDocstring">
<div><p class="undocumented">Undocumented</p></div>
<div><p>An error used when the value used is out of bounds for the function</p></div>
</div>
<div id="splitTables">
@ -308,7 +308,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

File diff suppressed because one or more lines are too long

View File

@ -244,7 +244,7 @@
</div>
<div class="moduleDocstring">
<div><p class="undocumented">Undocumented</p></div>
<div><p>A library for usage with SCPI compliant function generators (for now the DG2000 series from rigol)</p></div>
</div>
<div id="splitTables">
@ -255,22 +255,22 @@
<td>Module</td>
<td><code><a href="fn_gen.common.html" class="internal-link" title="fn_gen.common">common</a></code></td>
<td><span class="undocumented">Undocumented</span></td>
<td>Common functions that are used all over the package</td>
</tr><tr class="module">
<td>Module</td>
<td><code><a href="fn_gen.dg2052.html" class="internal-link" title="fn_gen.dg2052">dg2052</a></code></td>
<td><span class="undocumented">No module docstring; 1/1 class documented</span></td>
<td>The main funciton generator module</td>
</tr><tr class="package">
<td>Package</td>
<td><code><a href="fn_gen.enums.html" class="internal-link" title="fn_gen.enums">enums</a></code></td>
<td><span class="undocumented">Undocumented</span></td>
<td>Some enums that are used within this package</td>
</tr><tr class="package">
<td>Package</td>
<td><code><a href="fn_gen.errors.html" class="internal-link" title="fn_gen.errors">errors</a></code></td>
<td><span class="undocumented">Undocumented</span></td>
<td>A combination of errors used within the package</td>
</tr>
</table>
@ -291,7 +291,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -139,7 +139,7 @@
</div>
</div>
<ul id="summaryTree"><li><code><a href="index.html" class="internal-link">fn_gen</a></code> - <span class="undocumented">Undocumented</span><ul><li><code><a href="fn_gen.common.html" class="internal-link" title="fn_gen.common">common</a></code> - <span class="undocumented">Undocumented</span></li><li><code><a href="fn_gen.dg2052.html" class="internal-link" title="fn_gen.dg2052">dg2052</a></code> - <span class="undocumented">No module docstring; 1/1 class documented</span></li><li><code><a href="fn_gen.enums.html" class="internal-link" title="fn_gen.enums">enums</a></code> - <span class="undocumented">Undocumented</span><ul><li><code><a href="fn_gen.enums.comm_method.html" class="internal-link" title="fn_gen.enums.comm_method">comm_method</a></code> - <span class="undocumented">No module docstring; 1/1 class documented</span></li><li><code><a href="fn_gen.enums.sweep_signal_type.html" class="internal-link" title="fn_gen.enums.sweep_signal_type">sweep_signal_type</a></code> - <span class="undocumented">No module docstring; 1/1 class documented</span></li><li><code><a href="fn_gen.enums.sweep_spacing.html" class="internal-link" title="fn_gen.enums.sweep_spacing">sweep_spacing</a></code> - <span class="undocumented">No module docstring; 1/1 class documented</span></li><li><code><a href="fn_gen.enums.sweep_trigger_slope.html" class="internal-link" title="fn_gen.enums.sweep_trigger_slope">sweep_trigger_slope</a></code> - <span class="undocumented">No module docstring; 1/1 class documented</span></li><li><code><a href="fn_gen.enums.sweep_trigger_source.html" class="internal-link" title="fn_gen.enums.sweep_trigger_source">sweep_trigger_source</a></code> - <span class="undocumented">No module docstring; 1/1 class documented</span></li></ul></li><li><code><a href="fn_gen.errors.html" class="internal-link" title="fn_gen.errors">errors</a></code> - <span class="undocumented">Undocumented</span><ul><li><code><a href="fn_gen.errors.undefined_communication_method_error.html" class="internal-link" title="fn_gen.errors.undefined_communication_method_error">undefined_communication_method_error</a></code> - <span class="undocumented">Undocumented</span></li><li><code><a href="fn_gen.errors.undefined_value_error.html" class="internal-link" title="fn_gen.errors.undefined_value_error">undefined_value_error</a></code> - <span class="undocumented">Undocumented</span></li><li><code><a href="fn_gen.errors.value_out_of_bounds_error.html" class="internal-link" title="fn_gen.errors.value_out_of_bounds_error">value_out_of_bounds_error</a></code> - <span class="undocumented">Undocumented</span></li></ul></li></ul></li></ul>
<ul id="summaryTree"><li><code><a href="index.html" class="internal-link">fn_gen</a></code> - A library for usage with SCPI compliant function generators (for now the DG2000 series from rigol)<ul><li><code><a href="fn_gen.common.html" class="internal-link" title="fn_gen.common">common</a></code> - Common functions that are used all over the package</li><li><code><a href="fn_gen.dg2052.html" class="internal-link" title="fn_gen.dg2052">dg2052</a></code> - The main funciton generator module</li><li><code><a href="fn_gen.enums.html" class="internal-link" title="fn_gen.enums">enums</a></code> - Some enums that are used within this package<ul><li><code><a href="fn_gen.enums.comm_method.html" class="internal-link" title="fn_gen.enums.comm_method">comm_method</a></code> - Communication Method Enumeration</li><li><code><a href="fn_gen.enums.sweep_signal_type.html" class="internal-link" title="fn_gen.enums.sweep_signal_type">sweep_signal_type</a></code> - Enumeration representing the different signal types used in a sweep</li><li><code><a href="fn_gen.enums.sweep_spacing.html" class="internal-link" title="fn_gen.enums.sweep_spacing">sweep_spacing</a></code> - The spacings used for the sweep</li><li><code><a href="fn_gen.enums.sweep_trigger_slope.html" class="internal-link" title="fn_gen.enums.sweep_trigger_slope">sweep_trigger_slope</a></code> - The different slopes used when the <code><a href="fn_gen.enums.sweep_trigger_source.html" class="internal-link" title="fn_gen.enums.sweep_trigger_source">sweep_trigger_source</a></code> is set to <code><a href="fn_gen.enums.sweep_trigger_source.SweepTriggerSource.html#EXTERNAL" class="internal-link" title="fn_gen.enums.sweep_trigger_source.SweepTriggerSource.EXTERNAL">SweepTriggerSource.EXTERNAL</a></code></li><li><code><a href="fn_gen.enums.sweep_trigger_source.html" class="internal-link" title="fn_gen.enums.sweep_trigger_source">sweep_trigger_source</a></code> - The different sources available to trigger a sweep</li></ul></li><li><code><a href="fn_gen.errors.html" class="internal-link" title="fn_gen.errors">errors</a></code> - A combination of errors used within the package<ul><li><code><a href="fn_gen.errors.undefined_communication_method_error.html" class="internal-link" title="fn_gen.errors.undefined_communication_method_error">undefined_communication_method_error</a></code> - An error type used when the communication method is not in the <code><a href="fn_gen.enums.comm_method.CommMethod.html" class="internal-link" title="fn_gen.enums.comm_method.CommMethod">CommMethod</a></code> enum</li><li><code><a href="fn_gen.errors.undefined_value_error.html" class="internal-link" title="fn_gen.errors.undefined_value_error">undefined_value_error</a></code> - An error used when the value used is not defined</li><li><code><a href="fn_gen.errors.value_out_of_bounds_error.html" class="internal-link" title="fn_gen.errors.value_out_of_bounds_error">value_out_of_bounds_error</a></code> - An error used when the value used is out of bounds for the function</li></ul></li></ul></li></ul>
</div>
@ -149,7 +149,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

View File

@ -146,7 +146,7 @@
<h2>C</h2>
<p class="letterlinks">C - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#I">I</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#P">P</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#_">_</a></p>
<ul id="summaryTree">
<li>check_bounds - <code data-type="Function"><a href="fn_gen.common.html#check_bounds" class="internal-link">fn_gen.common.check_bounds</a></code></li><li>comm - <code data-type="Instance Variable"><a href="fn_gen.dg2052.DG2052.html#comm" class="internal-link">fn_gen.dg2052.DG2052.comm</a></code></li><li>comm_method - <code data-type="Module"><a href="fn_gen.enums.comm_method.html" class="internal-link">fn_gen.enums.comm_method</a></code></li><li>CommMethod - <code data-type="Class"><a href="fn_gen.enums.comm_method.CommMethod.html" class="internal-link">fn_gen.enums.comm_method.CommMethod</a></code></li><li>common - <code data-type="Module"><a href="fn_gen.common.html" class="internal-link">fn_gen.common</a></code></li>
<li>check_bounds - <code data-type="Function"><a href="fn_gen.common.html#check_bounds" class="internal-link">fn_gen.common.check_bounds</a></code></li><li>comm_method - <code data-type="Module"><a href="fn_gen.enums.comm_method.html" class="internal-link">fn_gen.enums.comm_method</a></code></li><li>CommMethod - <code data-type="Class"><a href="fn_gen.enums.comm_method.CommMethod.html" class="internal-link">fn_gen.enums.comm_method.CommMethod</a></code></li><li>common - <code data-type="Module"><a href="fn_gen.common.html" class="internal-link">fn_gen.common</a></code></li>
</ul>
<a name="D">
@ -227,7 +227,7 @@
<h2>P</h2>
<p class="letterlinks"><a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#I">I</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - P - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#_">_</a></p>
<ul id="summaryTree">
<li>port - <code data-type="Instance Variable"><a href="fn_gen.dg2052.DG2052.html#port" class="internal-link">fn_gen.dg2052.DG2052.port</a></code></li><li>POSITIVE - <code data-type="Constant"><a href="fn_gen.enums.sweep_trigger_slope.SweepTriggerSlope.html#POSITIVE" class="internal-link">fn_gen.enums.sweep_trigger_slope.SweepTriggerSlope.POSITIVE</a></code></li>
<li>POSITIVE - <code data-type="Constant"><a href="fn_gen.enums.sweep_trigger_slope.SweepTriggerSlope.html#POSITIVE" class="internal-link">fn_gen.enums.sweep_trigger_slope.SweepTriggerSlope.POSITIVE</a></code></li>
</ul>
<a name="R">
@ -236,7 +236,7 @@
<h2>R</h2>
<p class="letterlinks"><a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#I">I</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#P">P</a> - R - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - <a href="#_">_</a></p>
<ul id="summaryTree">
<li>RAMP - <code data-type="Constant"><a href="fn_gen.enums.sweep_signal_type.SweepSignalType.html#RAMP" class="internal-link">fn_gen.enums.sweep_signal_type.SweepSignalType.RAMP</a></code></li><li>rm - <code data-type="Instance Variable"><a href="fn_gen.dg2052.DG2052.html#rm" class="internal-link">fn_gen.dg2052.DG2052.rm</a></code></li>
<li>RAMP - <code data-type="Constant"><a href="fn_gen.enums.sweep_signal_type.SweepSignalType.html#RAMP" class="internal-link">fn_gen.enums.sweep_signal_type.SweepSignalType.RAMP</a></code></li>
</ul>
<a name="S">
@ -290,7 +290,7 @@
<h2>_</h2>
<p class="letterlinks"><a href="#C">C</a> - <a href="#D">D</a> - <a href="#E">E</a> - <a href="#F">F</a> - <a href="#G">G</a> - <a href="#I">I</a> - <a href="#L">L</a> - <a href="#M">M</a> - <a href="#N">N</a> - <a href="#P">P</a> - <a href="#R">R</a> - <a href="#S">S</a> - <a href="#T">T</a> - <a href="#U">U</a> - <a href="#V">V</a> - <a href="#W">W</a> - _</p>
<ul id="summaryTree">
<li>__init__<ul><li><code data-type="Method"><a href="fn_gen.dg2052.DG2052.html#__init__" class="internal-link">fn_gen.dg2052.DG2052.__init__</a></code></li><li><code data-type="Method"><a href="fn_gen.errors.undefined_communication_method_error.UndefinedCommunicationMethodError.html#__init__" class="internal-link">fn_gen.errors.undefined_communication_method_error.UndefinedCommunicationMethodError.__init__</a></code></li><li><code data-type="Method"><a href="fn_gen.errors.undefined_value_error.UndefinedValueError.html#__init__" class="internal-link">fn_gen.errors.undefined_value_error.UndefinedValueError.__init__</a></code></li><li><code data-type="Method"><a href="fn_gen.errors.value_out_of_bounds_error.ValueOutOfBoundsError.html#__init__" class="internal-link">fn_gen.errors.value_out_of_bounds_error.ValueOutOfBoundsError.__init__</a></code></li></ul></li>
<li class="private">__comm - <code data-type="Instance Variable"><a href="fn_gen.dg2052.DG2052.html#__comm" class="internal-link">fn_gen.dg2052.DG2052.__comm</a></code></li><li>__init__<ul><li><code data-type="Method"><a href="fn_gen.dg2052.DG2052.html#__init__" class="internal-link">fn_gen.dg2052.DG2052.__init__</a></code></li><li><code data-type="Method"><a href="fn_gen.errors.undefined_communication_method_error.UndefinedCommunicationMethodError.html#__init__" class="internal-link">fn_gen.errors.undefined_communication_method_error.UndefinedCommunicationMethodError.__init__</a></code></li><li><code data-type="Method"><a href="fn_gen.errors.undefined_value_error.UndefinedValueError.html#__init__" class="internal-link">fn_gen.errors.undefined_value_error.UndefinedValueError.__init__</a></code></li><li><code data-type="Method"><a href="fn_gen.errors.value_out_of_bounds_error.ValueOutOfBoundsError.html#__init__" class="internal-link">fn_gen.errors.value_out_of_bounds_error.ValueOutOfBoundsError.__init__</a></code></li></ul></li><li class="private">__port - <code data-type="Instance Variable"><a href="fn_gen.dg2052.DG2052.html#__port" class="internal-link">fn_gen.dg2052.DG2052.__port</a></code></li><li class="private">__rm - <code data-type="Instance Variable"><a href="fn_gen.dg2052.DG2052.html#__rm" class="internal-link">fn_gen.dg2052.DG2052.__rm</a></code></li>
</ul>
@ -302,7 +302,7 @@
<div class="container">
<a href="index.html">API Documentation</a> for fn_gen,
generated by <a href="https://github.com/twisted/pydoctor/">pydoctor</a>
23.9.1 at 2024-02-06 18:56:15.
23.9.1 at 2024-02-29 14:55:42.
</div>
<!-- Search related scripts needs to be loaded at the end of HTML

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -4,8 +4,7 @@ import argparse
import fn_gen.errors as fg_err
from common import close_output, get_preamplified
from fn_gen import DG2052
from fn_gen.enums import SweepSignalType, SweepSpacing, SweepTriggerSource
from fn_gen.enums import SweepSignalType, SweepSpacing
def sweep_over_signal(
signal: str,
@ -22,49 +21,30 @@ def sweep_over_signal(
v_min = get_preamplified(13.0, v_min)
v_max = get_preamplified(13.0, v_max)
channel = 2
signal_type = SweepSignalType.SINE
match signal:
case "sine":
signal_type = SweepSignalType.SINE
case "square":
signal_type = SweepSignalType.SQUARE
case "ramp":
signal_type = SweepSignalType.RAMP
spacing_type = SweepSpacing.LOG
match spacing:
case "lin":
spacing_type = SweepSpacing.LIN
case "log":
spacing_type = SweepSpacing.LOG
try:
print(fg.whoami())
print(f"\nOutput{channel} Impedance: {fg.get_output_impedance(channel)} Ohm")
print(f"Output{channel} Load: {fg.get_output_load(channel)} Ohm")
print(f"Output{channel} Voltage Limits: {fg.get_output_volt_limits(channel)} V")
fg.set_sweep(
channel,
amp=(v_max + v_min)/2,
offset=0,
phase=phase,
signal_type=signal_type,
freq_start=freq_start,
freq_stop=freq_stop,
spacing=spacing_type,
trigger_source=SweepTriggerSource.MANUAL,
time=duration,
)
print(
f"Output{channel}: {fg.get_output_signal(channel)} | {fg.get_output_state(channel)}"
)
fg.set_output(channel, True)
time.sleep(delay)
fg.trigger_sweep(channel)
t0 = time.time()
t1 = time.time()
while (t1 - t0) < duration:
print(f"Current Frequency: {fg.get_output_signal(channel)}")
t1 = time.time()
print(f"Output{channel} State: {fg.get_output_state(channel)}")
curr_freq = freq_start
df = 1
dt = 0.001
match signal:
case "sine":
fg.set_sine_wave(channel, curr_freq, v_min)
case "square":
fg.set_square_wave(channel, curr_freq, v_min)
case "ramp":
fg.set_ramp(channel, curr_freq, v_min)
while curr_freq < freq_stop:
match spacing:
case "lin":
curr_freq += df
fg.set_frequency(channel, curr_freq)
case "log":
pass # TODO: setup log sweep
time.sleep(dt)
close_output(fg, channel)
except fg_err.ValueOutOfBoundsError as err:
print(err)
except fg_err.UndefinedValueError as err:

705
pdm.lock
View File

@ -2,540 +2,10 @@
# It is not intended for manual editing.
[metadata]
groups = ["default", "dev"]
groups = ["default"]
strategy = ["cross_platform", "inherit_metadata"]
lock_version = "4.4.1"
content_hash = "sha256:c0b68a70e1545b9ea09b060530d9eb2bc2112275ff33351cf27bee9a419221fa"
[[package]]
name = "ansicon"
version = "1.89.0"
summary = "Python wrapper for loading Jason Hood's ANSICON"
groups = ["dev"]
marker = "platform_system == \"Windows\""
files = [
{file = "ansicon-1.89.0-py2.py3-none-any.whl", hash = "sha256:f1def52d17f65c2c9682cf8370c03f541f410c1752d6a14029f97318e4b9dfec"},
{file = "ansicon-1.89.0.tar.gz", hash = "sha256:e4d039def5768a47e4afec8e89e83ec3ae5a26bf00ad851f914d1240b444d2b1"},
]
[[package]]
name = "appdirs"
version = "1.4.4"
summary = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
groups = ["dev"]
files = [
{file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"},
{file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"},
]
[[package]]
name = "astor"
version = "0.8.1"
requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
summary = "Read/rewrite/write Python ASTs"
groups = ["dev"]
files = [
{file = "astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5"},
{file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"},
]
[[package]]
name = "astroid"
version = "3.0.3"
requires_python = ">=3.8.0"
summary = "An abstract syntax tree for Python with inference support."
groups = ["dev"]
files = [
{file = "astroid-3.0.3-py3-none-any.whl", hash = "sha256:92fcf218b89f449cdf9f7b39a269f8d5d617b27be68434912e11e79203963a17"},
{file = "astroid-3.0.3.tar.gz", hash = "sha256:4148645659b08b70d72460ed1921158027a9e53ae8b7234149b1400eddacbb93"},
]
[[package]]
name = "attrs"
version = "23.2.0"
requires_python = ">=3.7"
summary = "Classes Without Boilerplate"
groups = ["dev"]
files = [
{file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"},
{file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"},
]
[[package]]
name = "automat"
version = "22.10.0"
summary = "Self-service finite-state machines for the programmer on the go."
groups = ["dev"]
dependencies = [
"attrs>=19.2.0",
"six",
]
files = [
{file = "Automat-22.10.0-py2.py3-none-any.whl", hash = "sha256:c3164f8742b9dc440f3682482d32aaff7bb53f71740dd018533f9de286b64180"},
{file = "Automat-22.10.0.tar.gz", hash = "sha256:e56beb84edad19dcc11d30e8d9b895f75deeb5ef5e96b84a467066b3b84bb04e"},
]
[[package]]
name = "blessed"
version = "1.20.0"
requires_python = ">=2.7"
summary = "Easy, practical library for making terminal apps, by providing an elegant, well-documented interface to Colors, Keyboard input, and screen Positioning capabilities."
groups = ["dev"]
dependencies = [
"jinxed>=1.1.0; platform_system == \"Windows\"",
"six>=1.9.0",
"wcwidth>=0.1.4",
]
files = [
{file = "blessed-1.20.0-py2.py3-none-any.whl", hash = "sha256:0c542922586a265e699188e52d5f5ac5ec0dd517e5a1041d90d2bbf23f906058"},
{file = "blessed-1.20.0.tar.gz", hash = "sha256:2cdd67f8746e048f00df47a2880f4d6acbcdb399031b604e34ba8f71d5787680"},
]
[[package]]
name = "bpython"
version = "0.24"
requires_python = ">=3.7"
summary = ""
groups = ["dev"]
dependencies = [
"curtsies>=0.4.0",
"cwcwidth",
"greenlet",
"pygments",
"pyxdg",
"requests",
]
files = [
{file = "bpython-0.24-py3-none-any.whl", hash = "sha256:0d196ae3d1ce3dcd559a3fb89ed2c468dfbd1504af0d680b906dd65a9c7a32eb"},
{file = "bpython-0.24.tar.gz", hash = "sha256:98736ffd7a8c48fd2bfb53d898a475f4241bde0b672125706af04d9d08fd3dbd"},
]
[[package]]
name = "cachecontrol"
version = "0.14.0"
requires_python = ">=3.7"
summary = "httplib2 caching for requests"
groups = ["dev"]
dependencies = [
"msgpack<2.0.0,>=0.5.2",
"requests>=2.16.0",
]
files = [
{file = "cachecontrol-0.14.0-py3-none-any.whl", hash = "sha256:f5bf3f0620c38db2e5122c0726bdebb0d16869de966ea6a2befe92470b740ea0"},
{file = "cachecontrol-0.14.0.tar.gz", hash = "sha256:7db1195b41c81f8274a7bbd97c956f44e8348265a1bc7641c37dfebc39f0c938"},
]
[[package]]
name = "cachecontrol"
version = "0.14.0"
extras = ["filecache"]
requires_python = ">=3.7"
summary = "httplib2 caching for requests"
groups = ["dev"]
dependencies = [
"CacheControl==0.14.0",
"filelock>=3.8.0",
]
files = [
{file = "cachecontrol-0.14.0-py3-none-any.whl", hash = "sha256:f5bf3f0620c38db2e5122c0726bdebb0d16869de966ea6a2befe92470b740ea0"},
{file = "cachecontrol-0.14.0.tar.gz", hash = "sha256:7db1195b41c81f8274a7bbd97c956f44e8348265a1bc7641c37dfebc39f0c938"},
]
[[package]]
name = "certifi"
version = "2024.2.2"
requires_python = ">=3.6"
summary = "Python package for providing Mozilla's CA Bundle."
groups = ["dev"]
files = [
{file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"},
{file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"},
]
[[package]]
name = "charset-normalizer"
version = "3.3.2"
requires_python = ">=3.7.0"
summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
groups = ["dev"]
files = [
{file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
{file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"},
{file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"},
{file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"},
{file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"},
{file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"},
{file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"},
]
[[package]]
name = "colorama"
version = "0.4.6"
requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
summary = "Cross-platform colored terminal text."
groups = ["dev"]
marker = "sys_platform == \"win32\""
files = [
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
]
[[package]]
name = "configargparse"
version = "1.7"
requires_python = ">=3.5"
summary = "A drop-in replacement for argparse that allows options to also be set via config files and/or environment variables."
groups = ["dev"]
files = [
{file = "ConfigArgParse-1.7-py3-none-any.whl", hash = "sha256:d249da6591465c6c26df64a9f73d2536e743be2f244eb3ebe61114af2f94f86b"},
{file = "ConfigArgParse-1.7.tar.gz", hash = "sha256:e7067471884de5478c58a511e529f0f9bd1c66bfef1dea90935438d6c23306d1"},
]
[[package]]
name = "constantly"
version = "23.10.4"
requires_python = ">=3.8"
summary = "Symbolic constants in Python"
groups = ["dev"]
files = [
{file = "constantly-23.10.4-py3-none-any.whl", hash = "sha256:3fd9b4d1c3dc1ec9757f3c52aef7e53ad9323dbe39f51dfd4c43853b68dfa3f9"},
{file = "constantly-23.10.4.tar.gz", hash = "sha256:aa92b70a33e2ac0bb33cd745eb61776594dc48764b06c35e0efd050b7f1c7cbd"},
]
[[package]]
name = "curtsies"
version = "0.4.2"
requires_python = ">=3.7"
summary = "Curses-like terminal wrapper, with colored strings!"
groups = ["dev"]
dependencies = [
"blessed>=1.5",
"cwcwidth",
]
files = [
{file = "curtsies-0.4.2-py3-none-any.whl", hash = "sha256:f24d676a8c4711fb9edba1ab7e6134bc52305a222980b3b717bb303f5e94cec6"},
{file = "curtsies-0.4.2.tar.gz", hash = "sha256:6ebe33215bd7c92851a506049c720cca4cf5c192c1665c1d7a98a04c4702760e"},
]
[[package]]
name = "cwcwidth"
version = "0.1.9"
requires_python = ">=3.8"
summary = "Python bindings for wc(s)width"
groups = ["dev"]
files = [
{file = "cwcwidth-0.1.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b1c3eb0a8c1b25c4a17b6b9bbf7d25ce9df3ea43b6f87903c51bc12434a2cc29"},
{file = "cwcwidth-0.1.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c8752815ce4e40e7b34b7fe039276a5fbfb1b077131614381b13ef3b7bb21ff"},
{file = "cwcwidth-0.1.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:368ace13080dbaacdc247370d8a965a749b124aa50d0b1b6eb87601826db870f"},
{file = "cwcwidth-0.1.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ca9a653661e152a426bdb51a272f36bc79f9830e6a7169abe8110ec367c3518c"},
{file = "cwcwidth-0.1.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f96386cc29e6eef8ef066d7dd3c767c5119d66506dabea20dd344dabb3f2d225"},
{file = "cwcwidth-0.1.9-cp311-cp311-win32.whl", hash = "sha256:f6ba88970ec12fdbed5554beb1b9a25d8271fc3d0d9e60639db700a79bed1863"},
{file = "cwcwidth-0.1.9-cp311-cp311-win_amd64.whl", hash = "sha256:aa6725e7b3571fdf6ce7c02d1dd2d69e00d166bb6df44e46ab215067028b3a03"},
{file = "cwcwidth-0.1.9.tar.gz", hash = "sha256:f19d11a0148d4a8cacd064c96e93bca8ce3415a186ae8204038f45e108db76b8"},
]
[[package]]
name = "dill"
version = "0.3.8"
requires_python = ">=3.8"
summary = "serialize all of Python"
groups = ["dev"]
marker = "python_version >= \"3.11\""
files = [
{file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"},
{file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"},
]
[[package]]
name = "docutils"
version = "0.20.1"
requires_python = ">=3.7"
summary = "Docutils -- Python Documentation Utilities"
groups = ["dev"]
files = [
{file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"},
{file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"},
]
[[package]]
name = "easy-scpi"
version = "0.1.4"
summary = "An easy library for controlling SCPI instruments"
groups = ["default"]
dependencies = [
"pyVISA",
]
files = [
{file = "easy-scpi-0.1.4.tar.gz", hash = "sha256:2864ad8a9e06e9aa1ad52462e3f4e08d4b9ab2d64c41617b11ab1591ef6bc32f"},
{file = "easy_scpi-0.1.4-py3-none-any.whl", hash = "sha256:c3204d1dd6d14089e76aa7f25c41ee46d72e7f6ed82cd05bddfdf9ed91a56aab"},
]
[[package]]
name = "filelock"
version = "3.13.1"
requires_python = ">=3.8"
summary = "A platform independent file lock."
groups = ["dev"]
files = [
{file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"},
{file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"},
]
[[package]]
name = "greenlet"
version = "3.0.3"
requires_python = ">=3.7"
summary = "Lightweight in-process concurrent programming"
groups = ["dev"]
files = [
{file = "greenlet-3.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61"},
{file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559"},
{file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e"},
{file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33"},
{file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379"},
{file = "greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22"},
{file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3"},
{file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d"},
{file = "greenlet-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728"},
{file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"},
]
[[package]]
name = "hyperlink"
version = "21.0.0"
requires_python = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
summary = "A featureful, immutable, and correct URL for Python."
groups = ["dev"]
dependencies = [
"idna>=2.5",
]
files = [
{file = "hyperlink-21.0.0-py2.py3-none-any.whl", hash = "sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4"},
{file = "hyperlink-21.0.0.tar.gz", hash = "sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b"},
]
[[package]]
name = "idna"
version = "3.6"
requires_python = ">=3.5"
summary = "Internationalized Domain Names in Applications (IDNA)"
groups = ["dev"]
files = [
{file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"},
{file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"},
]
[[package]]
name = "ifaddr"
version = "0.2.0"
summary = "Cross-platform network interface and IP address enumeration library"
groups = ["default"]
files = [
{file = "ifaddr-0.2.0-py3-none-any.whl", hash = "sha256:085e0305cfe6f16ab12d72e2024030f5d52674afad6911bb1eee207177b8a748"},
{file = "ifaddr-0.2.0.tar.gz", hash = "sha256:cc0cbfcaabf765d44595825fb96a99bb12c79716b73b44330ea38ee2b0c4aed4"},
]
[[package]]
name = "incremental"
version = "22.10.0"
summary = "\"A small library that versions your Python projects.\""
groups = ["dev"]
files = [
{file = "incremental-22.10.0-py2.py3-none-any.whl", hash = "sha256:b864a1f30885ee72c5ac2835a761b8fe8aa9c28b9395cacf27286602688d3e51"},
{file = "incremental-22.10.0.tar.gz", hash = "sha256:912feeb5e0f7e0188e6f42241d2f450002e11bbc0937c65865045854c24c0bd0"},
]
[[package]]
name = "isort"
version = "5.13.2"
requires_python = ">=3.8.0"
summary = "A Python utility / library to sort Python imports."
groups = ["dev"]
files = [
{file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"},
{file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"},
]
[[package]]
name = "jinxed"
version = "1.2.1"
summary = "Jinxed Terminal Library"
groups = ["dev"]
marker = "platform_system == \"Windows\""
dependencies = [
"ansicon; platform_system == \"Windows\"",
]
files = [
{file = "jinxed-1.2.1-py2.py3-none-any.whl", hash = "sha256:37422659c4925969c66148c5e64979f553386a4226b9484d910d3094ced37d30"},
{file = "jinxed-1.2.1.tar.gz", hash = "sha256:30c3f861b73279fea1ed928cfd4dfb1f273e16cd62c8a32acfac362da0f78f3f"},
]
[[package]]
name = "lunr"
version = "0.6.2"
requires_python = ">=3.6"
summary = "A Python implementation of Lunr.js"
groups = ["dev"]
files = [
{file = "lunr-0.6.2-py2.py3-none-any.whl", hash = "sha256:6fbf619e07ff97c6198f9cae0fc32d69a0d49fb0708c2559efbede45670cba06"},
{file = "lunr-0.6.2.tar.gz", hash = "sha256:7983d965bd7baa78cbd4f5b934fc3ef3142c1b6089df6c6fecd66df5bff20921"},
]
[[package]]
name = "mccabe"
version = "0.7.0"
requires_python = ">=3.6"
summary = "McCabe checker, plugin for flake8"
groups = ["dev"]
files = [
{file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"},
{file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"},
]
[[package]]
name = "msgpack"
version = "1.0.7"
requires_python = ">=3.8"
summary = "MessagePack serializer"
groups = ["dev"]
files = [
{file = "msgpack-1.0.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:576eb384292b139821c41995523654ad82d1916da6a60cff129c715a6223ea84"},
{file = "msgpack-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:730076207cb816138cf1af7f7237b208340a2c5e749707457d70705715c93b93"},
{file = "msgpack-1.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:85765fdf4b27eb5086f05ac0491090fc76f4f2b28e09d9350c31aac25a5aaff8"},
{file = "msgpack-1.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3476fae43db72bd11f29a5147ae2f3cb22e2f1a91d575ef130d2bf49afd21c46"},
{file = "msgpack-1.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d4c80667de2e36970ebf74f42d1088cc9ee7ef5f4e8c35eee1b40eafd33ca5b"},
{file = "msgpack-1.0.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b0bf0effb196ed76b7ad883848143427a73c355ae8e569fa538365064188b8e"},
{file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f9a7c509542db4eceed3dcf21ee5267ab565a83555c9b88a8109dcecc4709002"},
{file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:84b0daf226913133f899ea9b30618722d45feffa67e4fe867b0b5ae83a34060c"},
{file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ec79ff6159dffcc30853b2ad612ed572af86c92b5168aa3fc01a67b0fa40665e"},
{file = "msgpack-1.0.7-cp311-cp311-win32.whl", hash = "sha256:3e7bf4442b310ff154b7bb9d81eb2c016b7d597e364f97d72b1acc3817a0fdc1"},
{file = "msgpack-1.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:3f0c8c6dfa6605ab8ff0611995ee30d4f9fcff89966cf562733b4008a3d60d82"},
{file = "msgpack-1.0.7.tar.gz", hash = "sha256:572efc93db7a4d27e404501975ca6d2d9775705c2d922390d878fcf768d92c87"},
]
[[package]]
name = "numpy"
version = "1.26.4"
requires_python = ">=3.9"
summary = "Fundamental package for array computing in Python"
groups = ["default", "dev"]
files = [
{file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"},
{file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"},
{file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"},
{file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"},
{file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"},
{file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"},
{file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"},
{file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"},
{file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"},
{file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"},
{file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"},
{file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"},
]
[[package]]
name = "pip"
version = "23.2.1"
requires_python = ">=3.7"
summary = "The PyPA recommended tool for installing Python packages."
groups = ["default"]
files = [
{file = "pip-23.2.1-py3-none-any.whl", hash = "sha256:7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be"},
{file = "pip-23.2.1.tar.gz", hash = "sha256:fb0bd5435b3200c602b5bf61d2d43c2f13c02e29c1707567ae7fbc514eb9faf2"},
]
[[package]]
name = "platformdirs"
version = "4.2.0"
requires_python = ">=3.8"
summary = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
groups = ["dev"]
files = [
{file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"},
{file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"},
]
[[package]]
name = "psutil"
version = "5.9.7"
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
summary = "Cross-platform lib for process and system monitoring in Python."
groups = ["default"]
files = [
{file = "psutil-5.9.7-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ea36cc62e69a13ec52b2f625c27527f6e4479bca2b340b7a452af55b34fcbe2e"},
{file = "psutil-5.9.7-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1132704b876e58d277168cd729d64750633d5ff0183acf5b3c986b8466cd0284"},
{file = "psutil-5.9.7-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe8b7f07948f1304497ce4f4684881250cd859b16d06a1dc4d7941eeb6233bfe"},
{file = "psutil-5.9.7-cp37-abi3-win32.whl", hash = "sha256:c727ca5a9b2dd5193b8644b9f0c883d54f1248310023b5ad3e92036c5e2ada68"},
{file = "psutil-5.9.7-cp37-abi3-win_amd64.whl", hash = "sha256:f37f87e4d73b79e6c5e749440c3113b81d1ee7d26f21c19c47371ddea834f414"},
{file = "psutil-5.9.7-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:032f4f2c909818c86cea4fe2cc407f1c0f0cde8e6c6d702b28b8ce0c0d143340"},
{file = "psutil-5.9.7.tar.gz", hash = "sha256:3f02134e82cfb5d089fddf20bb2e03fd5cd52395321d1c8458a9e58500ff417c"},
]
[[package]]
name = "pydoctor"
version = "23.9.1"
requires_python = ">=3.6"
summary = "API doc generator."
groups = ["dev"]
dependencies = [
"CacheControl[filecache]",
"Twisted",
"appdirs",
"astor",
"attrs",
"configargparse",
"docutils>=0.17",
"lunr==0.6.2",
"requests",
"toml",
"urllib3<2",
]
files = [
{file = "pydoctor-23.9.1-py3-none-any.whl", hash = "sha256:341cafb7847e3ad17237b725f2c4a04b0b824f154910c3b5cce6aa4a881056db"},
{file = "pydoctor-23.9.1.tar.gz", hash = "sha256:e5b7758a51889afdfc101996f7871dc7afb5d3dd7bbcaab895bfe54cdf4f2f17"},
]
[[package]]
name = "pygments"
version = "2.17.2"
requires_python = ">=3.7"
summary = "Pygments is a syntax highlighting package written in Python."
groups = ["dev"]
files = [
{file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"},
{file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"},
]
[[package]]
name = "pylint"
version = "3.0.3"
requires_python = ">=3.8.0"
summary = "python code static checker"
groups = ["dev"]
dependencies = [
"astroid<=3.1.0-dev0,>=3.0.1",
"colorama>=0.4.5; sys_platform == \"win32\"",
"dill>=0.3.6; python_version >= \"3.11\"",
"isort!=5.13.0,<6,>=4.2.5",
"mccabe<0.8,>=0.6",
"platformdirs>=2.2.0",
"tomlkit>=0.10.1",
]
files = [
{file = "pylint-3.0.3-py3-none-any.whl", hash = "sha256:7a1585285aefc5165db81083c3e06363a27448f6b467b3b0f30dbd0ac1f73810"},
{file = "pylint-3.0.3.tar.gz", hash = "sha256:58c2398b0301e049609a8429789ec6edf3aabe9b6c5fec916acd18639c16de8b"},
]
content_hash = "sha256:608ed15e3b65004a3ba5d84822468940fc0b904375232d46e2220090bdbf163e"
[[package]]
name = "pyvisa"
@ -551,176 +21,13 @@ files = [
{file = "PyVISA-1.14.1.tar.gz", hash = "sha256:71030041ed4c5dad77687454cf44b8be4d1642e9d1aaa22019248d41d8ed7a79"},
]
[[package]]
name = "pyvisa-py"
version = "0.7.1"
requires_python = ">=3.8"
summary = "Pure Python implementation of a VISA library."
groups = ["default"]
dependencies = [
"pyvisa>=1.13.0",
"typing-extensions",
]
files = [
{file = "PyVISA-py-0.7.1.tar.gz", hash = "sha256:d0dd824055fd8cab8a2685d10e1277d52ad19604322fa53c17b47e70258d4594"},
{file = "PyVISA_py-0.7.1-py3-none-any.whl", hash = "sha256:3675aa9fcabfcee6fbcc1e596f565c2538ecd0f69e7061f479d147b4afbd8c75"},
]
[[package]]
name = "pyxdg"
version = "0.28"
summary = "PyXDG contains implementations of freedesktop.org standards in python."
groups = ["dev"]
files = [
{file = "pyxdg-0.28-py2.py3-none-any.whl", hash = "sha256:bdaf595999a0178ecea4052b7f4195569c1ff4d344567bccdc12dfdf02d545ab"},
{file = "pyxdg-0.28.tar.gz", hash = "sha256:3267bb3074e934df202af2ee0868575484108581e6f3cb006af1da35395e88b4"},
]
[[package]]
name = "requests"
version = "2.31.0"
requires_python = ">=3.7"
summary = "Python HTTP for Humans."
groups = ["dev"]
dependencies = [
"certifi>=2017.4.17",
"charset-normalizer<4,>=2",
"idna<4,>=2.5",
"urllib3<3,>=1.21.1",
]
files = [
{file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
{file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
]
[[package]]
name = "setuptools"
version = "65.5.0"
requires_python = ">=3.7"
summary = "Easily download, build, install, upgrade, and uninstall Python packages"
groups = ["default", "dev"]
files = [
{file = "setuptools-65.5.0-py3-none-any.whl", hash = "sha256:f62ea9da9ed6289bfe868cd6845968a2c854d1427f8548d52cae02a42b4f0356"},
{file = "setuptools-65.5.0.tar.gz", hash = "sha256:512e5536220e38146176efb833d4a62aa726b7bbff82cfbc8ba9eaa3996e0b17"},
]
[[package]]
name = "six"
version = "1.16.0"
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
summary = "Python 2 and 3 compatibility utilities"
groups = ["dev"]
files = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
[[package]]
name = "toml"
version = "0.10.2"
requires_python = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
summary = "Python Library for Tom's Obvious, Minimal Language"
groups = ["dev"]
files = [
{file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
[[package]]
name = "tomlkit"
version = "0.12.3"
requires_python = ">=3.7"
summary = "Style preserving TOML library"
groups = ["dev"]
files = [
{file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"},
{file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"},
]
[[package]]
name = "twisted"
version = "23.10.0"
requires_python = ">=3.8.0"
summary = "An asynchronous networking framework written in Python"
groups = ["dev"]
dependencies = [
"attrs>=21.3.0",
"automat>=0.8.0",
"constantly>=15.1",
"hyperlink>=17.1.1",
"incremental>=22.10.0",
"twisted-iocpsupport<2,>=1.0.2; platform_system == \"Windows\"",
"typing-extensions>=4.2.0",
"zope-interface>=5",
]
files = [
{file = "twisted-23.10.0-py3-none-any.whl", hash = "sha256:4ae8bce12999a35f7fe6443e7f1893e6fe09588c8d2bed9c35cdce8ff2d5b444"},
{file = "twisted-23.10.0.tar.gz", hash = "sha256:987847a0790a2c597197613686e2784fd54167df3a55d0fb17c8412305d76ce5"},
]
[[package]]
name = "twisted-iocpsupport"
version = "1.0.4"
summary = "An extension for use in the twisted I/O Completion Ports reactor."
groups = ["dev"]
marker = "platform_system == \"Windows\""
files = [
{file = "twisted-iocpsupport-1.0.4.tar.gz", hash = "sha256:858096c0d15e33f15ac157f455d8f86f2f2cdd223963e58c0f682a3af8362d89"},
{file = "twisted_iocpsupport-1.0.4-cp311-cp311-win32.whl", hash = "sha256:196f7c7ccad4ba4d1783b1c4e1d1b22d93c04275cd780bf7498d16c77319ad6e"},
{file = "twisted_iocpsupport-1.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:4e5f97bcbabdd79cbaa969b63439b89801ea560f11d42b0a387634275c633623"},
{file = "twisted_iocpsupport-1.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:872747a3b64e2909aee59c803ccd0bceb9b75bf27915520ebd32d69687040fa2"},
{file = "twisted_iocpsupport-1.0.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:c2712b778bacf1db434e3e065adfed3db300754186a29aecac1efae9ef4bcaff"},
{file = "twisted_iocpsupport-1.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7c66fa0aa4236b27b3c61cb488662d85dae746a6d1c7b0d91cf7aae118445adf"},
{file = "twisted_iocpsupport-1.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:300437af17396a945a58dcfffd77863303a8b6d9e65c6e81f1d2eed55b50d444"},
]
[[package]]
name = "typing-extensions"
version = "4.9.0"
version = "4.10.0"
requires_python = ">=3.8"
summary = "Backported and Experimental Type Hints for Python 3.8+"
groups = ["default", "dev"]
groups = ["default"]
files = [
{file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"},
{file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"},
]
[[package]]
name = "urllib3"
version = "1.26.18"
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
summary = "HTTP library with thread-safe connection pooling, file post, and more."
groups = ["dev"]
files = [
{file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"},
{file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"},
]
[[package]]
name = "wcwidth"
version = "0.2.13"
summary = "Measures the displayed width of unicode strings in a terminal"
groups = ["dev"]
files = [
{file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"},
{file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"},
]
[[package]]
name = "zope-interface"
version = "6.1"
requires_python = ">=3.7"
summary = "Interfaces for Python"
groups = ["dev"]
dependencies = [
"setuptools",
]
files = [
{file = "zope.interface-6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9ffdaa5290422ac0f1688cb8adb1b94ca56cee3ad11f29f2ae301df8aecba7d1"},
{file = "zope.interface-6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34c15ca9248f2e095ef2e93af2d633358c5f048c49fbfddf5fdfc47d5e263736"},
{file = "zope.interface-6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b012d023b4fb59183909b45d7f97fb493ef7a46d2838a5e716e3155081894605"},
{file = "zope.interface-6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97806e9ca3651588c1baaebb8d0c5ee3db95430b612db354c199b57378312ee8"},
{file = "zope.interface-6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fddbab55a2473f1d3b8833ec6b7ac31e8211b0aa608df5ab09ce07f3727326de"},
{file = "zope.interface-6.1-cp311-cp311-win_amd64.whl", hash = "sha256:a0da79117952a9a41253696ed3e8b560a425197d4e41634a23b1507efe3273f1"},
{file = "zope.interface-6.1.tar.gz", hash = "sha256:2fdc7ccbd6eb6b7df5353012fbed6c3c5d04ceaca0038f75e601060e95345309"},
{file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"},
{file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"},
]

View File

@ -2,26 +2,16 @@
name = "fn_gen"
readme = "README.md"
description = "A library for usage with SCPI compliant function generators (for now the DG2000 series from rigol)"
requires-python = "==3.11.*"
requires-python = ">=3.9"
version = "0.0.2"
dependencies = [
"easy-scpi==0.1.4",
"ifaddr==0.2.0",
"pip==23.2.1",
"psutil==5.9.7",
"PyVISA==1.14.1",
"PyVISA-py==0.7.1",
"setuptools==65.5.0",
"numpy>=1.26.3",
"fn-gen @ file:///${PROJECT_ROOT}/dist/fn_gen-0.0.2-py3-none-any.whl",
]
authors = [
{name = "Ali Nwegy", email = "ali.el-nwegy@tuhh.de"},
]
license = {text = "MIT"}
[tool.setuptools_scm]
[tool.pdm]
distribution = true
@ -29,10 +19,13 @@ distribution = true
edit = {shell = "$VISUAL src/fn_gen"}
uml = {shell = "pyreverse -o html -S --colorized -d uml src/fn_gen"}
doc = {shell = "pydoctor"}
examples = {shell = "$VISUAL examples"}
sine = "examples/sine_signal.py"
square = "examples/square_signal.py"
ramp = "examples/ramp_signal.py"
discrete_sweep = "examples/discrete_sweep.py"
sweep = "examples/sweep.py"
nsweep = "examples/sweep_2.py"
dc_signal = "examples/dc_signal.py"
stop_channel = "examples/stop_channels.py"
whoami = "examples/whoami.py"

View File

@ -1,3 +1,8 @@
"""
A library for usage with SCPI compliant function generators (for now the DG2000 series from rigol)
"""
from .dg2052 import DG2052
from .enums import *
from .errors import *

View File

@ -1,5 +1,19 @@
"""
Common functions that are used all over the package
"""
from .errors import ValueOutOfBoundsError
def check_bounds(bounds: tuple[float, float] | tuple[int, int], value: float | int):
"""
Checks the whether the given value is within bounds
Parameters
---
bounds: tuple[float, float]
The bounds to check within
value: float
The value to check
"""
if value < bounds[0] or value > bounds[1]:
raise ValueOutOfBoundsError(bounds, value)

View File

@ -1,3 +1,7 @@
"""
The main funciton generator module
"""
### PLEASE DO NOT MIND THE FORMATTING, IT IS DONE AUTOMATICALLY BY 'BLACK' THE PYTHON FORMATTER
import logging
from typing import Literal
@ -12,26 +16,25 @@ from .errors import UndefinedValueError, UndefinedCommunicationMethodError, Valu
class DG2052(pyvisa.resources.MessageBasedResource):
"""
This is an object representing the Rigol DG2052 function generator. This object uses the SCPI protocol for communicating with the Rigol DG2052 function generator.
Attributes
----------
port : str
The SCPI port describing the device, consists of a communication method and device port followed by the "::INSTR" keyword.
communication method: can be either USB or TCPIP (other communication methods are not supported for this device)
device port: either COMM4 or /dev/USB0 for USB in windows and posix systems respectively or the IP Address for TCPIP
format: "<communication method>::<device port>::INSTR"
example: "TCPI::192.168.1.11::INSTR" or "USB::COMM4::INSTR"
rm : ResourceManager
The resource manager object for pyvisa (for future use)
comm : CommMethod
The communication method used (either TCPIP or USB)
"""
# Attributes
# ----------
# port : str
# The SCPI port describing the device, consists of a communication method and device port followed by the "::INSTR" keyword.
# communication method: can be either USB or TCPIP (other communication methods are not supported for this device)
# device port: either COMM4 or /dev/USB0 for USB in windows and posix systems respectively or the IP Address for TCPIP
comm: CommMethod # The communication method used (either TCPIP or USB)
rm: ResourceManager # The resource manager object for pyvisa (for future use)
port: str # The str used for the port
# format: "<communication method>::<device port>::INSTR"
# example: "TCPI::192.168.1.11::INSTR" or "USB::COMM4::INSTR"
# rm : ResourceManager
# The resource manager object for pyvisa (for future use)
# comm : CommMethod
# The communication method used (either TCPIP or USB)
__comm: CommMethod # The communication method used (either TCPIP or USB)
__rm: ResourceManager # The resource manager object for pyvisa (for future use)
__port: str # The str used for the port
def __init__(self, port: str): # Class initialization method
"""
@ -51,15 +54,15 @@ class DG2052(pyvisa.resources.MessageBasedResource):
"""
if "TCPIP" in port: # Check if port starts with TCPIP
logging.debug("(PROG) detected TCPIP port")
self.comm = CommMethod.LAN # Set comm to LAN
self.__comm = CommMethod.LAN # Set comm to LAN
elif "USB" in port: # Check if port starts with USB
logging.debug("(PROG) detected USB port")
self.comm = CommMethod.USB # Set comm to USB
self.__comm = CommMethod.USB # Set comm to USB
else: # Rause Undefined Communication Method Error
raise UndefinedCommunicationMethodError(port)
rm = ResourceManager() # Create a pyvisa.ResourceManager object
self.rm = rm # Save that object as rm
self.port = port # Save the port string as port
self.__rm = rm # Save that object as rm
self.__port = port # Save the port string as port
super().__init__(rm, port) # create tne instrument object
logging.debug("(PROG) created dg2052 instance")
self.open() # connect to the instrument object (for ease of use)
@ -67,7 +70,7 @@ class DG2052(pyvisa.resources.MessageBasedResource):
def whoami(self) -> str:
"""
shows the identification of the connected instrument
Shows the identification of the connected instrument
Returns
-------
@ -75,7 +78,7 @@ class DG2052(pyvisa.resources.MessageBasedResource):
The identification of the connected instrument
"""
match (
self.comm
self.__comm
): # Return an Identification string depending on the communication method
# Here a match case is used to make it easy to extend the communication methods to other methods
case CommMethod.LAN: # if the communication method is LAN
@ -98,7 +101,7 @@ class DG2052(pyvisa.resources.MessageBasedResource):
f"{manufacturer} {model}:\n\tSerial Nr.:"
+ f" {serial}\n\tSoftware Ver.:"
+ f" {software_ver}\n\tPort:"
+ f" {self.port}\n\tIPADDRESS: {ipaddr}\n\tMAC: {mac}"
+ f" {self.__port}\n\tIPADDRESS: {ipaddr}\n\tMAC: {mac}"
)
return out # return the formatted string
case CommMethod.USB: # if the communication method is USB
@ -119,7 +122,7 @@ class DG2052(pyvisa.resources.MessageBasedResource):
f"{manufacturer} {model}:\n\tSerial Nr.:"
+ f" {serial}\n\tSoftware Ver.:"
+ f" {software_ver}\n\tPort:"
+ f" {self.port}\n\tINFORMATION: {info}"
+ f" {self.__port}\n\tINFORMATION: {info}"
)
return out # return the formatted string
case _: # default case raise Undefined Communication Method Error
@ -145,6 +148,15 @@ class DG2052(pyvisa.resources.MessageBasedResource):
self.write(f":OUTP{channel} OFF")
def toggle_output(self, channel: Literal[1, 2]):
"""
Toggles the corresponding output channel
Parameters
-------
channel: Literal[1, 2]
The output channel of the device (either 1 or 2)
"""
state = self.query(f":OUT{channel}?").strip()
logging.debug(f"(PROG) output {channel} state: {state}")
match (state):
@ -176,26 +188,96 @@ class DG2052(pyvisa.resources.MessageBasedResource):
return low, high
def get_output_impedance(self, channel: Literal[1, 2]) -> float:
"""
Returns the output impedance.
Parameters
---
channel: Literal[1, 2]
The output channel to get the impedance of
Returns
---
impedance: float
The impedance of the specified output channel
"""
impedance = float(self.query(f":OUTP{channel}:IMP?"))
logging.debug(f"(PROG) output {channel} impedance: {impedance}")
return impedance
def get_output_load(self, channel: Literal[1, 2]) -> float:
"""
Returns the output load.
Parameters
---
channel: Literal[1, 2]
The output channel to get the load of
Returns
---
load: float
The load of the specified output channel
"""
load = float(self.query(f":OUTP{channel}:LOAD?"))
logging.debug(f"(PROG) output {channel} load: {load}")
return load
def get_output_signal(self, channel: Literal[1, 2]) -> str:
"""
Returns the signal type and parameters.
Parameters
---
channel: Literal[1, 2]
The output channel
Returns
---
signal: str
The indentifier string of the signal.
"""
signal = self.query(f":SOUR{channel}:APPL?").strip()
logging.debug(f"(PROG) output {channel} signal: {signal}")
return signal
def get_output_state(self, channel: Literal[1, 2]) -> str:
"""
Returns the output state of the signal
Parameters
---
channel: Literal[1, 2]
The output channel
Returns
---
state: str
The state of the output (is either `"ON"` or `"OFF"`)
"""
state = self.query(f":OUTP{channel}?").strip()
logging.debug(f"(PROG) output {channel} state: {state}")
return state
def is_output_on(self, channel: Literal[1, 2]) -> bool:
"""
Returns a boolean representing the state of the output
Parameters
---
channel: Literal[1, 2]
The output channel
Returns
---
state: bool
The state of the output (is either `True` or `False`)
"""
channel_state = self.get_output_state(channel)
match channel_state:
case "ON":
@ -206,6 +288,17 @@ class DG2052(pyvisa.resources.MessageBasedResource):
raise UndefinedValueError(channel_state, "ON or OFF")
def set_dc(self, channel: Literal[1, 2], offset: float):
"""
Sets the output channel to DC voltage mode
Parameters
---
channel: Literal[1, 2]
The output channel
offset: float
The offset voltage
"""
logging.debug(f"(PROG) set dc signal with offset: {offset}")
self.write(f":SOUR{channel}:APPL:DC 1,1,{offset}")
@ -217,6 +310,23 @@ class DG2052(pyvisa.resources.MessageBasedResource):
offset: float = 0.0,
phase: int = 0,
):
"""
Sets the output channel to A Sine Wave
Parameters
---
channel: Literal[1, 2]
The output channel
freq: float, default:1e3
The frequency
amp: float, default:5.0
The Vpp amplitude
offset: float, default:0.0
The V offset
phase: int, default:0
The phase shift
"""
if freq < SIN_RANGE[0] and freq > SIN_RANGE[1]:
raise ValueOutOfBoundsError(SIN_RANGE, freq)
if phase < 0 and phase > 360:
@ -227,6 +337,17 @@ class DG2052(pyvisa.resources.MessageBasedResource):
self.write(f":SOUR{channel}:APPL:SIN {freq},{amp},{offset},{phase}")
def set_frequency(self, channel: Literal[1, 2], freq):
"""
Sets the frequency of the set signal
Parameters
---
channel: Literal[1, 2]
The output channel
freq: float
The frequency
"""
logging.debug(
f"(PROG) set wave frequency to {freq} Hz."
)
@ -241,6 +362,23 @@ class DG2052(pyvisa.resources.MessageBasedResource):
offset: float = 0.0, # Sets the amplitude offset
phase: int = 0, # Sets the phase shift
):
"""
Sets the output channel to A Square Wave
Parameters
---
channel: Literal[1, 2]
The output channel
freq: float, default:1e3
The frequency
amp: float, default:5.0
The Vpp amplitude
offset: float, default:0.0
The V offset
phase: int, default:0
The phase shift
"""
check_bounds(SQU_RANGE, freq)
check_bounds((0, 360), phase)
logging.debug(
@ -256,6 +394,23 @@ class DG2052(pyvisa.resources.MessageBasedResource):
offset: float = 0, # Sets the amplitude offset
phase: int = 0, # Sets the phase shift
):
"""
Sets the output channel to A Ramp (Triangular) Wave
Parameters
---
channel: Literal[1, 2]
The output channel
freq: float, default:1e3
The frequency
amp: float, default:5.0
The Vpp amplitude
offset: float, default:0.0
The V offset
phase: int, default:0
The phase shift
"""
check_bounds(RAMP_RANGE, freq)
check_bounds((0, 360), phase)
logging.debug(
@ -283,6 +438,47 @@ class DG2052(pyvisa.resources.MessageBasedResource):
trigger_slope: SweepTriggerSlope = SweepTriggerSlope.POSITIVE, # Sets the edge type of the trigger input signal (for external trigger only)
trigger_source: SweepTriggerSource = SweepTriggerSource.INTERNAL, # Sets the sweep trigger source
):
"""
Sets the parameters of a signal sweep
Parameters
---
channel: Literal[1, 2]
Sets the output channel of the sweep function
amp: float, default:5
Sets the amplitude of the sweeped signal
offset: float, default:0
Sets the offset voltage of the sweeped signal
phase: int, default:0
Sets the phase shift of the sweeped signal
signal_type: SweepSignalType, default:SweepSignalType.SINE
Sets the type of signal being sweeped
htime_start: float, default:0
Sets the start hold time of the sweep function
htime_stop: float, default:0
Sets the stop hold time of the sweep function
freq_start: float, default:100
Sets the sweep starting frequency
freq_stop: float, default:1e3
Sets the sweep stopping frequency
marker: bool, default:False
Enables/Disables setting the marker frequency manually
freq_marker: float, default:550
Sets the marker frequency at whic the Sync signal changes from high to low
rtime: float, default:0
Sets the return time of the sweep function
time: float, default:1
Sets the sweep time
spacing: SweepSpacing, default:SweepSpacing.LIN
Sets the sweep type
step: int, default:2
Sets the number of steps of the sweep function
trigger_slope: SweepTriggerSlope, default:SweepTriggerSlope.POSITIVE
Sets the edge type of the trigger input signal (for external trigger only)
trigger_source: SweepTriggerSource, default:SweepTriggerSource.INTERNAL
Sets the sweep trigger source
"""
time_bounds: tuple[float, float] = (0, 500)
command_header = f":SOUR{channel}:SWE"
check_bounds(time_bounds, htime_start)
@ -333,4 +529,13 @@ class DG2052(pyvisa.resources.MessageBasedResource):
self.write(f"{command_header}:STAT ON")
def trigger_sweep(self, channel: Literal[1, 2]):
"""
Triggers a sweep manually (Only works if the sweep was setup with `trigger_source` as `SweepTriggerSource.MANUAL`)
Parameters
---
channel: Literal[1, 2]
Sets the output channel of the sweep function
"""
self.write(f":SOUR{channel}:SWE:TRIG:IMM")

View File

@ -1,3 +1,7 @@
"""
Some enums that are used within this package
"""
from .comm_method import CommMethod
from .sweep_spacing import SweepSpacing
from .sweep_trigger_slope import SweepTriggerSlope

View File

@ -1,3 +1,6 @@
"""
Communication Method Enumeration
"""
from enum import Enum
class CommMethod(Enum):

View File

@ -1,3 +1,7 @@
"""
Enumeration representing the different signal types used in a sweep
"""
from enum import Enum
class SweepSignalType(Enum):

View File

@ -1,3 +1,7 @@
"""
The spacings used for the sweep
"""
from enum import Enum
class SweepSpacing(Enum):

View File

@ -1,3 +1,7 @@
"""
The different slopes used when the `sweep_trigger_source` is set to `SweepTriggerSource.EXTERNAL`
"""
from enum import Enum
class SweepTriggerSlope(Enum):

View File

@ -1,3 +1,7 @@
"""
The different sources available to trigger a sweep
"""
from enum import Enum
class SweepTriggerSource(Enum):

View File

@ -1,3 +1,7 @@
"""
A combination of errors used within the package
"""
from .undefined_communication_method_error import UndefinedCommunicationMethodError
from .value_out_of_bounds_error import ValueOutOfBoundsError
from .undefined_value_error import UndefinedValueError

View File

@ -1,3 +1,6 @@
"""
An error type used when the communication method is not in the `CommMethod` enum
"""
class UndefinedCommunicationMethodError(Exception):
def __init__(self, port: str):
method = port.split( "::" )[0]

View File

@ -1,3 +1,6 @@
"""
An error used when the value used is not defined
"""
class UndefinedValueError(Exception):
def __init__(self, value: str, expected: str):
super().__init__( f"ERROR: Undefined Value, expected: {expected}, value: {value}." )

View File

@ -1,3 +1,7 @@
"""
An error used when the value used is out of bounds for the function
"""
class ValueOutOfBoundsError(Exception):
def __init__(self, bounds: tuple[float, float] | tuple[int, int], value: float | int):
super().__init__( f"ERROR: Value out of expected bounds, Min: {bounds[0]}, Max: {bounds[1]}, Value: {value}." )

View File

@ -1,186 +0,0 @@
<html>
<body>
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
<div class="mermaid">
classDiagram
class CommMethod {
name
}
class DG2052 {
comm
port : str
rm
get_output_impedance(channel: Literal[1, 2]) float
get_output_load(channel: Literal[1, 2]) float
get_output_signal(channel: Literal[1, 2]) str
get_output_state(channel: Literal[1, 2]) str
get_output_volt_limits(channel: Literal[1, 2]) tuple[float, float]
is_output_on(channel: Literal[1, 2]) bool
set_dc(channel: Literal[1, 2], offset: float)
set_frequency(channel: Literal[1, 2], freq)
set_output(channel: Literal[1, 2], state: bool)
set_ramp(channel: Literal[1, 2], freq: float, amp: float, offset: float, phase: int)
set_sine_wave(channel: Literal[1, 2], freq: float, amp: float, offset: float, phase: int)
set_square_wave(channel: Literal[1, 2], freq: float, amp: float, offset: float, phase: int)
set_sweep(channel: Literal[1, 2], amp: float, offset: float, phase: int, signal_type: SweepSignalType, htime_start: float, htime_stop: float, freq_start: float, freq_stop: float, marker: bool, freq_marker: float, rtime: float, time: float, spacing: SweepSpacing, step: int, trigger_slope: SweepTriggerSlope, trigger_source: SweepTriggerSource)
toggle_output(channel: Literal[1, 2])
trigger_sweep(channel: Literal[1, 2])
whoami() str
}
class LAN {
name
value
}
class LibraryPath {
arch
found_by : str
path : str
}
class OutputChannel {
name
}
class ResourceManager {
last_status
session
visalib
close() None
ignore_warning() ContextManager
list_opened_resources() List['Resource']
list_resources(query: str) Tuple[str, ...]
list_resources_info(query: str) Dict[str, ResourceInfo]
open_bare_resource(resource_name: str, access_mode: constants.AccessModes, open_timeout: int) Tuple[VISASession, StatusCode]
open_resource(resource_name: str, access_mode: constants.AccessModes, open_timeout: int, resource_pyclass: Optional[Type['Resource']]) 'Resource'
register_resource_class(interface_type: constants.InterfaceType, resource_class: str, python_class: Type['Resource']) None
resource_info(resource_name: str, extended: bool) ResourceInfo
}
class StatusCode {
name
}
class SweepSignalType {
name
}
class SweepSpacing {
name
}
class SweepTriggerSlope {
name
}
class SweepTriggerSource {
name
}
class USB {
name
value
}
class UndefinedCommunicationMethodError {
}
class UndefinedValueError {
}
class ValueOutOfBoundsError {
}
class VisaLibraryBase {
handlers : DefaultDict[VISASession, List[Tuple[VISAHandler, Any, Any, Any]]]
issue_warning_on : Set[StatusCode]
last_status
library_path
resource_manager : Optional['ResourceManager']
assert_interrupt_signal(session: VISASession, mode: constants.AssertSignalInterrupt, status_id: int)* StatusCode
assert_trigger(session: VISASession, protocol: constants.TriggerProtocol)* StatusCode
assert_utility_signal(session: VISASession, line: constants.UtilityBusSignal)* StatusCode
buffer_read(session: VISASession, count: int)* Tuple[bytes, StatusCode]
buffer_write(session: VISASession, data: bytes)* Tuple[int, StatusCode]
clear(session: VISASession)* StatusCode
close(session: Union[VISASession, VISAEventContext, VISARMSession])* StatusCode
disable_event(session: VISASession, event_type: constants.EventType, mechanism: constants.EventMechanism)* StatusCode
discard_events(session: VISASession, event_type: constants.EventType, mechanism: constants.EventMechanism)* StatusCode
enable_event(session: VISASession, event_type: constants.EventType, mechanism: constants.EventMechanism, context: None)* StatusCode
flush(session: VISASession, mask: constants.BufferOperation)* StatusCode
get_attribute(session: Union[VISASession, VISAEventContext, VISARMSession], attribute: Union[constants.ResourceAttribute, constants.EventAttribute])* Tuple[Any, StatusCode]
get_buffer_from_id(job_id: VISAJobID)* Optional[SupportsBytes]
get_debug_info() DebugInfo
get_last_status_in_session(session: Union[VISASession, VISARMSession]) StatusCode
get_library_paths() Iterable[LibraryPath]
gpib_command(session: VISASession, data: bytes)* Tuple[int, StatusCode]
gpib_control_atn(session: VISASession, mode: constants.ATNLineOperation)* StatusCode
gpib_control_ren(session: VISASession, mode: constants.RENLineOperation)* StatusCode
gpib_pass_control(session: VISASession, primary_address: int, secondary_address: int)* StatusCode
gpib_send_ifc(session: VISASession)* StatusCode
handle_return_value(session: Optional[Union[VISAEventContext, VISARMSession, VISASession]], status_code: int) StatusCode
ignore_warning(session: Union[VISASession, VISARMSession]) Iterator
in_16(session: VISASession, space: constants.AddressSpace, offset: int, extended: bool)* Tuple[int, StatusCode]
in_32(session: VISASession, space: constants.AddressSpace, offset: int, extended: bool)* Tuple[int, StatusCode]
in_64(session: VISASession, space: constants.AddressSpace, offset: int, extended: bool)* Tuple[int, StatusCode]
in_8(session: VISASession, space: constants.AddressSpace, offset: int, extended: bool)* Tuple[int, StatusCode]
install_handler(session: VISASession, event_type: constants.EventType, handler: VISAHandler, user_handle: Any)* Tuple[VISAHandler, Any, Any, StatusCode]
install_visa_handler(session: VISASession, event_type: constants.EventType, handler: VISAHandler, user_handle: Any) Any
list_resources(session: VISARMSession, query: str)* Tuple[str, ...]
lock(session: VISASession, lock_type: constants.Lock, timeout: int, requested_key: Optional[str])* Tuple[str, StatusCode]
map_address(session: VISASession, map_space: constants.AddressSpace, map_base: int, map_size: int, access: Literal[False], suggested: Optional[int])* Tuple[int, StatusCode]
map_trigger(session: VISASession, trigger_source: constants.InputTriggerLine, trigger_destination: constants.OutputTriggerLine, mode: None)* StatusCode
memory_allocation(session: VISASession, size: int, extended: bool)* Tuple[int, StatusCode]
memory_free(session: VISASession, offset: int, extended: bool)* StatusCode
move(session: VISASession, source_space: constants.AddressSpace, source_offset: int, source_width: constants.DataWidth, destination_space: constants.AddressSpace, destination_offset: int, destination_width: constants.DataWidth, length: int)* StatusCode
move_asynchronously(session: VISASession, source_space: constants.AddressSpace, source_offset: int, source_width: constants.DataWidth, destination_space: constants.AddressSpace, destination_offset: int, destination_width: constants.DataWidth, length: int)* Tuple[VISAJobID, StatusCode]
move_in(session: VISASession, space: constants.AddressSpace, offset: int, length: int, width: Union[Literal[8, 16, 32, 64], constants.DataWidth], extended: bool) Tuple[List[int], StatusCode]
move_in_16(session: VISASession, space: constants.AddressSpace, offset: int, length: int, extended: bool)* Tuple[List[int], StatusCode]
move_in_32(session: VISASession, space: constants.AddressSpace, offset: int, length: int, extended: bool)* Tuple[List]
move_in_64(session: VISASession, space: constants.AddressSpace, offset: int, length: int, extended: bool)* Tuple[List[int], StatusCode]
move_in_8(session: VISASession, space: constants.AddressSpace, offset: int, length: int, extended: bool)* Tuple[List[int], StatusCode]
move_out(session: VISASession, space: constants.AddressSpace, offset: int, length: int, data: Iterable[int], width: Union[Literal[8, 16, 32, 64], constants.DataWidth], extended: bool) StatusCode
move_out_16(session: VISASession, space: constants.AddressSpace, offset: int, length: int, data: Iterable[int], extended: bool)* StatusCode
move_out_32(session: VISASession, space: constants.AddressSpace, offset: int, length: int, data: Iterable[int], extended: bool)* StatusCode
move_out_64(session: VISASession, space: constants.AddressSpace, offset: int, length: int, data: Iterable[int], extended: bool)* StatusCode
move_out_8(session: VISASession, space: constants.AddressSpace, offset: int, length: int, data: Iterable[int], extended: bool)* StatusCode
open(session: VISARMSession, resource_name: str, access_mode: constants.AccessModes, open_timeout: int)* Tuple[VISASession, StatusCode]
open_default_resource_manager()* Tuple[VISARMSession, StatusCode]
out_16(session: VISASession, space: constants.AddressSpace, offset: int, data: int, extended: bool)* StatusCode
out_32(session: VISASession, space: constants.AddressSpace, offset: int, data: Iterable[int], extended: bool)* StatusCode
out_64(session: VISASession, space: constants.AddressSpace, offset: int, data: Iterable[int], extended: bool)* StatusCode
out_8(session: VISASession, space: constants.AddressSpace, offset: int, data: int, extended: bool)* StatusCode
parse_resource(session: VISARMSession, resource_name: str) Tuple[ResourceInfo, StatusCode]
parse_resource_extended(session: VISARMSession, resource_name: str) Tuple[ResourceInfo, StatusCode]
peek(session: VISASession, address: VISAMemoryAddress, width: Union[Literal[8, 16, 32, 64], constants.DataWidth]) Tuple[int, StatusCode]
peek_16(session: VISASession, address: VISAMemoryAddress)* Tuple[int, StatusCode]
peek_32(session: VISASession, address: VISAMemoryAddress)* Tuple[int, StatusCode]
peek_64(session: VISASession, address: VISAMemoryAddress)* Tuple[int, StatusCode]
peek_8(session: VISASession, address: VISAMemoryAddress)* Tuple[int, StatusCode]
poke(session: VISASession, address: VISAMemoryAddress, width: Union[Literal[8, 16, 32, 64], constants.DataWidth], data: int) StatusCode
poke_16(session: VISASession, address: VISAMemoryAddress, data: int)* StatusCode
poke_32(session: VISASession, address: VISAMemoryAddress, data: int)* StatusCode
poke_64(session: VISASession, address: VISAMemoryAddress, data: int)* StatusCode
poke_8(session: VISASession, address: VISAMemoryAddress, data: int)* StatusCode
read(session: VISASession, count: int)* Tuple[bytes, StatusCode]
read_asynchronously(session: VISASession, count: int)* Tuple[SupportsBytes, VISAJobID, StatusCode]
read_memory(session: VISASession, space: constants.AddressSpace, offset: int, width: Union[Literal[8, 16, 32, 64], constants.DataWidth], extended: bool) Tuple[int, StatusCode]
read_stb(session: VISASession)* Tuple[int, StatusCode]
read_to_file(session: VISASession, filename: str, count: int)* Tuple[int, StatusCode]
set_attribute(session: VISASession, attribute: constants.ResourceAttribute, attribute_state: Any)* StatusCode
set_buffer(session: VISASession, mask: constants.BufferType, size: int)* StatusCode
status_description(session: VISASession, status: StatusCode)* Tuple[str, StatusCode]
terminate(session: VISASession, degree: None, job_id: VISAJobID)* StatusCode
uninstall_all_visa_handlers(session: Optional[VISASession]) None
uninstall_handler(session: VISASession, event_type: constants.EventType, handler: VISAHandler, user_handle: Any)* StatusCode
uninstall_visa_handler(session: VISASession, event_type: constants.EventType, handler: VISAHandler, user_handle: Any) None
unlock(session: VISASession)* StatusCode
unmap_address(session: VISASession)* StatusCode
unmap_trigger(session: VISASession, trigger_source: constants.InputTriggerLine, trigger_destination: constants.OutputTriggerLine)* StatusCode
usb_control_in(session: VISASession, request_type_bitmap_field: int, request_id: int, request_value: int, index: int, length: int)* Tuple[bytes, StatusCode]
usb_control_out(session: VISASession, request_type_bitmap_field: int, request_id: int, request_value: int, index: int, data: bytes)* StatusCode
vxi_command_query(session: VISASession, mode: constants.VXICommands, command: int)* Tuple[int, StatusCode]
wait_on_event(session: VISASession, in_event_type: constants.EventType, timeout: int)* Tuple[constants.EventType, VISAEventContext, StatusCode]
write(session: VISASession, data: bytes)* Tuple[int, StatusCode]
write_asynchronously(session: VISASession, data: bytes)* Tuple[VISAJobID, StatusCode]
write_from_file(session: VISASession, filename: str, count: int)* Tuple[int, StatusCode]
write_memory(session: VISASession, space: constants.AddressSpace, offset: int, data: int, width: Union[Literal[8, 16, 32, 64], constants.DataWidth], extended: bool) StatusCode
}
LAN --* DG2052 : comm
USB --* DG2052 : comm
StatusCode --* VisaLibraryBase : _last_status
ResourceManager --* DG2052 : rm
VisaLibraryBase --* ResourceManager : visalib
LibraryPath --* VisaLibraryBase : library_path
</div>
</body>
</html>

117
uml/classes.svg Normal file
View File

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 10.0.1 (0)
-->
<!-- Title: classes Pages: 1 -->
<svg width="3058pt" height="348pt"
viewBox="0.00 0.00 3057.50 348.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 344)">
<title>classes</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-344 3053.5,-344 3053.5,4 -4,4"/>
<!-- fn_gen.enums.comm_method.CommMethod -->
<g id="node1" class="node">
<title>fn_gen.enums.comm_method.CommMethod</title>
<polygon fill="#99ddff" stroke="#99ddff" points="0,-134.38 0,-205.62 97,-205.62 97,-134.38 0,-134.38"/>
<text text-anchor="start" x="8" y="-188.32" font-family="Times,serif" font-size="14.00">CommMethod</text>
<polyline fill="none" stroke="#99ddff" points="0,-181.88 97,-181.88"/>
<text text-anchor="start" x="33.88" y="-164.57" font-family="Times,serif" font-size="14.00">name</text>
<polyline fill="none" stroke="#99ddff" points="0,-158.12 97,-158.12"/>
<text text-anchor="start" x="46.62" y="-140.82" font-family="Times,serif" font-size="14.00"> </text>
</g>
<!-- fn_gen.dg2052.DG2052 -->
<g id="node2" class="node">
<title>fn_gen.dg2052.DG2052</title>
<polygon fill="#77aadd" stroke="#77aadd" points="115,-0.5 115,-339.5 1946,-339.5 1946,-0.5 115,-0.5"/>
<text text-anchor="start" x="1007.25" y="-322.2" font-family="Times,serif" font-size="14.00">DG2052</text>
<polyline fill="none" stroke="#77aadd" points="115,-315.75 1946,-315.75"/>
<text text-anchor="start" x="967.88" y="-298.45" font-family="Times,serif" font-size="14.00">comm</text>
<text text-anchor="start" x="967.88" y="-282.7" font-family="Times,serif" font-size="14.00">port : str</text>
<text text-anchor="start" x="967.88" y="-266.95" font-family="Times,serif" font-size="14.00">rm : ResourceManager</text>
<polyline fill="none" stroke="#77aadd" points="115,-260.5 1946,-260.5"/>
<text text-anchor="start" x="123" y="-243.2" font-family="Times,serif" font-size="14.00">get_output_impedance(channel: Literal[1, 2]): float</text>
<text text-anchor="start" x="123" y="-227.45" font-family="Times,serif" font-size="14.00">get_output_load(channel: Literal[1, 2]): float</text>
<text text-anchor="start" x="123" y="-211.7" font-family="Times,serif" font-size="14.00">get_output_signal(channel: Literal[1, 2]): str</text>
<text text-anchor="start" x="123" y="-195.95" font-family="Times,serif" font-size="14.00">get_output_state(channel: Literal[1, 2]): str</text>
<text text-anchor="start" x="123" y="-180.2" font-family="Times,serif" font-size="14.00">get_output_volt_limits(channel: Literal[1, 2]): tuple[float, float]</text>
<text text-anchor="start" x="123" y="-164.45" font-family="Times,serif" font-size="14.00">is_output_on(channel: Literal[1, 2]): bool</text>
<text text-anchor="start" x="123" y="-148.7" font-family="Times,serif" font-size="14.00">set_dc(channel: Literal[1, 2], offset: float)</text>
<text text-anchor="start" x="123" y="-132.95" font-family="Times,serif" font-size="14.00">set_frequency(channel: Literal[1, 2], freq)</text>
<text text-anchor="start" x="123" y="-117.2" font-family="Times,serif" font-size="14.00">set_output(channel: Literal[1, 2], state: bool)</text>
<text text-anchor="start" x="123" y="-101.45" font-family="Times,serif" font-size="14.00">set_ramp(channel: Literal[1, 2], freq: float, amp: float, offset: float, phase: int)</text>
<text text-anchor="start" x="123" y="-85.7" font-family="Times,serif" font-size="14.00">set_sine_wave(channel: Literal[1, 2], freq: float, amp: float, offset: float, phase: int)</text>
<text text-anchor="start" x="123" y="-69.95" font-family="Times,serif" font-size="14.00">set_square_wave(channel: Literal[1, 2], freq: float, amp: float, offset: float, phase: int)</text>
<text text-anchor="start" x="123" y="-54.2" font-family="Times,serif" font-size="14.00">set_sweep(channel: Literal[1, 2], amp: float, offset: float, phase: int, signal_type: SweepSignalType, htime_start: float, htime_stop: float, freq_start: float, freq_stop: float, marker: bool, freq_marker: float, rtime: float, time: float, spacing: SweepSpacing, step: int, trigger_slope: SweepTriggerSlope, trigger_source: SweepTriggerSource)</text>
<text text-anchor="start" x="123" y="-38.45" font-family="Times,serif" font-size="14.00">toggle_output(channel: Literal[1, 2])</text>
<text text-anchor="start" x="123" y="-22.7" font-family="Times,serif" font-size="14.00">trigger_sweep(channel: Literal[1, 2])</text>
<text text-anchor="start" x="123" y="-6.95" font-family="Times,serif" font-size="14.00">whoami(): str</text>
</g>
<!-- fn_gen.enums.sweep_signal_type.SweepSignalType -->
<g id="node3" class="node">
<title>fn_gen.enums.sweep_signal_type.SweepSignalType</title>
<polygon fill="#99ddff" stroke="#99ddff" points="1963.75,-134.38 1963.75,-205.62 2077.25,-205.62 2077.25,-134.38 1963.75,-134.38"/>
<text text-anchor="start" x="1971.75" y="-188.32" font-family="Times,serif" font-size="14.00">SweepSignalType</text>
<polyline fill="none" stroke="#99ddff" points="1963.75,-181.88 2077.25,-181.88"/>
<text text-anchor="start" x="2005.88" y="-164.57" font-family="Times,serif" font-size="14.00">name</text>
<polyline fill="none" stroke="#99ddff" points="1963.75,-158.12 2077.25,-158.12"/>
<text text-anchor="start" x="2018.62" y="-140.82" font-family="Times,serif" font-size="14.00"> </text>
</g>
<!-- fn_gen.enums.sweep_spacing.SweepSpacing -->
<g id="node4" class="node">
<title>fn_gen.enums.sweep_spacing.SweepSpacing</title>
<polygon fill="#99ddff" stroke="#99ddff" points="2095.12,-134.38 2095.12,-205.62 2189.88,-205.62 2189.88,-134.38 2095.12,-134.38"/>
<text text-anchor="start" x="2103.12" y="-188.32" font-family="Times,serif" font-size="14.00">SweepSpacing</text>
<polyline fill="none" stroke="#99ddff" points="2095.12,-181.88 2189.88,-181.88"/>
<text text-anchor="start" x="2127.88" y="-164.57" font-family="Times,serif" font-size="14.00">name</text>
<polyline fill="none" stroke="#99ddff" points="2095.12,-158.12 2189.88,-158.12"/>
<text text-anchor="start" x="2140.62" y="-140.82" font-family="Times,serif" font-size="14.00"> </text>
</g>
<!-- fn_gen.enums.sweep_trigger_slope.SweepTriggerSlope -->
<g id="node5" class="node">
<title>fn_gen.enums.sweep_trigger_slope.SweepTriggerSlope</title>
<polygon fill="#99ddff" stroke="#99ddff" points="2208.25,-134.38 2208.25,-205.62 2330.75,-205.62 2330.75,-134.38 2208.25,-134.38"/>
<text text-anchor="start" x="2216.25" y="-188.32" font-family="Times,serif" font-size="14.00">SweepTriggerSlope</text>
<polyline fill="none" stroke="#99ddff" points="2208.25,-181.88 2330.75,-181.88"/>
<text text-anchor="start" x="2254.88" y="-164.57" font-family="Times,serif" font-size="14.00">name</text>
<polyline fill="none" stroke="#99ddff" points="2208.25,-158.12 2330.75,-158.12"/>
<text text-anchor="start" x="2267.62" y="-140.82" font-family="Times,serif" font-size="14.00"> </text>
</g>
<!-- fn_gen.enums.sweep_trigger_source.SweepTriggerSource -->
<g id="node6" class="node">
<title>fn_gen.enums.sweep_trigger_source.SweepTriggerSource</title>
<polygon fill="#99ddff" stroke="#99ddff" points="2348.88,-134.38 2348.88,-205.62 2478.12,-205.62 2478.12,-134.38 2348.88,-134.38"/>
<text text-anchor="start" x="2356.88" y="-188.32" font-family="Times,serif" font-size="14.00">SweepTriggerSource</text>
<polyline fill="none" stroke="#99ddff" points="2348.88,-181.88 2478.12,-181.88"/>
<text text-anchor="start" x="2398.88" y="-164.57" font-family="Times,serif" font-size="14.00">name</text>
<polyline fill="none" stroke="#99ddff" points="2348.88,-158.12 2478.12,-158.12"/>
<text text-anchor="start" x="2411.62" y="-140.82" font-family="Times,serif" font-size="14.00"> </text>
</g>
<!-- fn_gen.errors.undefined_communication_method_error.UndefinedCommunicationMethodError -->
<g id="node7" class="node">
<title>fn_gen.errors.undefined_communication_method_error.UndefinedCommunicationMethodError</title>
<polygon fill="#44bb99" stroke="#44bb99" points="2495.88,-146.25 2495.88,-193.75 2727.12,-193.75 2727.12,-146.25 2495.88,-146.25"/>
<text text-anchor="start" x="2503.88" y="-176.45" font-family="Times,serif" font-size="14.00" fill="red">UndefinedCommunicationMethodError</text>
<polyline fill="none" stroke="#44bb99" points="2495.88,-170 2727.12,-170"/>
<polyline fill="none" stroke="#44bb99" points="2495.88,-170 2727.12,-170"/>
<text text-anchor="start" x="2609.62" y="-152.7" font-family="Times,serif" font-size="14.00" fill="red"> </text>
</g>
<!-- fn_gen.errors.undefined_value_error.UndefinedValueError -->
<g id="node8" class="node">
<title>fn_gen.errors.undefined_value_error.UndefinedValueError</title>
<polygon fill="#44bb99" stroke="#44bb99" points="2745.38,-146.25 2745.38,-193.75 2877.62,-193.75 2877.62,-146.25 2745.38,-146.25"/>
<text text-anchor="start" x="2753.38" y="-176.45" font-family="Times,serif" font-size="14.00" fill="red">UndefinedValueError</text>
<polyline fill="none" stroke="#44bb99" points="2745.38,-170 2877.62,-170"/>
<polyline fill="none" stroke="#44bb99" points="2745.38,-170 2877.62,-170"/>
<text text-anchor="start" x="2809.62" y="-152.7" font-family="Times,serif" font-size="14.00" fill="red"> </text>
</g>
<!-- fn_gen.errors.value_out_of_bounds_error.ValueOutOfBoundsError -->
<g id="node9" class="node">
<title>fn_gen.errors.value_out_of_bounds_error.ValueOutOfBoundsError</title>
<polygon fill="#44bb99" stroke="#44bb99" points="2895.5,-146.25 2895.5,-193.75 3049.5,-193.75 3049.5,-146.25 2895.5,-146.25"/>
<text text-anchor="start" x="2903.5" y="-176.45" font-family="Times,serif" font-size="14.00" fill="red">ValueOutOfBoundsError</text>
<polyline fill="none" stroke="#44bb99" points="2895.5,-170 3049.5,-170"/>
<polyline fill="none" stroke="#44bb99" points="2895.5,-170 3049.5,-170"/>
<text text-anchor="start" x="2970.62" y="-152.7" font-family="Times,serif" font-size="14.00" fill="red"> </text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.8 KiB

View File

@ -1,54 +0,0 @@
<html>
<body>
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
<div class="mermaid">
classDiagram
class fn_gen {
}
class common {
}
class dg2052 {
}
class enums {
}
class comm_method {
}
class output_channel {
}
class sweep_signal_type {
}
class sweep_spacing {
}
class sweep_trigger_slope {
}
class sweep_trigger_source {
}
class errors {
}
class undefined_communication_method_error {
}
class undefined_value_error {
}
class value_out_of_bounds_error {
}
fn_gen --> dg2052
fn_gen --> enums
fn_gen --> errors
common --> errors
dg2052 --> common
dg2052 --> enums
dg2052 --> errors
enums --> comm_method
enums --> output_channel
enums --> sweep_signal_type
enums --> sweep_spacing
enums --> sweep_trigger_slope
enums --> sweep_trigger_source
errors --> undefined_communication_method_error
errors --> undefined_value_error
errors --> value_out_of_bounds_error
</div>
</body>
</html>

181
uml/packages.svg Normal file
View File

@ -0,0 +1,181 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 10.0.1 (0)
-->
<!-- Title: packages Pages: 1 -->
<svg width="1557pt" height="332pt"
viewBox="0.00 0.00 1557.12 332.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 328)">
<title>packages</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-328 1553.12,-328 1553.12,4 -4,4"/>
<!-- fn_gen -->
<g id="node1" class="node">
<title>fn_gen</title>
<polygon fill="#77aadd" stroke="#77aadd" points="588.75,-36 534.75,-36 534.75,0 588.75,0 588.75,-36"/>
<text text-anchor="middle" x="561.75" y="-12.57" font-family="Times,serif" font-size="14.00">fn_gen</text>
</g>
<!-- fn_gen.dg2052 -->
<g id="node3" class="node">
<title>fn_gen.dg2052</title>
<polygon fill="#77aadd" stroke="#77aadd" points="610.62,-108 512.88,-108 512.88,-72 610.62,-72 610.62,-108"/>
<text text-anchor="middle" x="561.75" y="-84.58" font-family="Times,serif" font-size="14.00">fn_gen.dg2052</text>
</g>
<!-- fn_gen&#45;&gt;fn_gen.dg2052 -->
<g id="edge1" class="edge">
<title>fn_gen&#45;&gt;fn_gen.dg2052</title>
<path fill="none" stroke="black" d="M561.75,-36.3C561.75,-43.68 561.75,-52.48 561.75,-60.75"/>
<polygon fill="black" stroke="black" points="561.75,-70.68 557.25,-60.68 561.75,-66.9 561.75,-60.68 561.75,-60.68 561.75,-60.68 561.75,-66.9 566.25,-60.68 561.75,-70.68"/>
</g>
<!-- fn_gen.enums -->
<g id="node4" class="node">
<title>fn_gen.enums</title>
<polygon fill="#99ddff" stroke="#99ddff" points="855,-180 762.5,-180 762.5,-144 855,-144 855,-180"/>
<text text-anchor="middle" x="808.75" y="-156.57" font-family="Times,serif" font-size="14.00">fn_gen.enums</text>
</g>
<!-- fn_gen&#45;&gt;fn_gen.enums -->
<g id="edge2" class="edge">
<title>fn_gen&#45;&gt;fn_gen.enums</title>
<path fill="none" stroke="black" d="M589.13,-34.74C632.81,-59.85 718.5,-109.11 768.96,-138.12"/>
<polygon fill="black" stroke="black" points="777.5,-143.04 766.59,-141.95 774.22,-141.15 768.83,-138.05 768.83,-138.05 768.83,-138.05 774.22,-141.15 771.07,-134.15 777.5,-143.04"/>
</g>
<!-- fn_gen.errors -->
<g id="node10" class="node">
<title>fn_gen.errors</title>
<polygon fill="#44bb99" stroke="#44bb99" points="487.12,-252 398.38,-252 398.38,-216 487.12,-216 487.12,-252"/>
<text text-anchor="middle" x="442.75" y="-228.57" font-family="Times,serif" font-size="14.00">fn_gen.errors</text>
</g>
<!-- fn_gen&#45;&gt;fn_gen.errors -->
<g id="edge3" class="edge">
<title>fn_gen&#45;&gt;fn_gen.errors</title>
<path fill="none" stroke="black" d="M538.77,-36.31C527.19,-45.89 513.56,-58.55 503.75,-72 473.69,-113.23 456.59,-171.06 448.54,-205.02"/>
<polygon fill="black" stroke="black" points="446.42,-214.38 444.24,-203.63 447.26,-210.69 448.63,-204.62 448.63,-204.62 448.63,-204.62 447.26,-210.69 453.02,-205.62 446.42,-214.38"/>
</g>
<!-- fn_gen.common -->
<g id="node2" class="node">
<title>fn_gen.common</title>
<polygon fill="#77aadd" stroke="#77aadd" points="614.38,-180 509.12,-180 509.12,-144 614.38,-144 614.38,-180"/>
<text text-anchor="middle" x="561.75" y="-156.57" font-family="Times,serif" font-size="14.00">fn_gen.common</text>
</g>
<!-- fn_gen.common&#45;&gt;fn_gen.errors -->
<g id="edge4" class="edge">
<title>fn_gen.common&#45;&gt;fn_gen.errors</title>
<path fill="none" stroke="black" d="M532.03,-180.48C516.72,-189.49 497.87,-200.58 481.44,-210.24"/>
<polygon fill="black" stroke="black" points="473.14,-215.12 479.48,-206.17 476.4,-213.2 481.76,-210.05 481.76,-210.05 481.76,-210.05 476.4,-213.2 484.04,-213.93 473.14,-215.12"/>
</g>
<!-- fn_gen.dg2052&#45;&gt;fn_gen.common -->
<g id="edge5" class="edge">
<title>fn_gen.dg2052&#45;&gt;fn_gen.common</title>
<path fill="none" stroke="black" d="M561.75,-108.3C561.75,-115.68 561.75,-124.48 561.75,-132.75"/>
<polygon fill="black" stroke="black" points="561.75,-142.68 557.25,-132.68 561.75,-138.9 561.75,-132.68 561.75,-132.68 561.75,-132.68 561.75,-138.9 566.25,-132.68 561.75,-142.68"/>
</g>
<!-- fn_gen.dg2052&#45;&gt;fn_gen.enums -->
<g id="edge6" class="edge">
<title>fn_gen.dg2052&#45;&gt;fn_gen.enums</title>
<path fill="none" stroke="black" d="M610.84,-104.91C651.35,-116.39 708.89,-132.7 751.49,-144.77"/>
<polygon fill="black" stroke="black" points="761.08,-147.49 750.24,-149.09 757.45,-146.46 751.46,-144.76 751.46,-144.76 751.46,-144.76 757.45,-146.46 752.69,-140.44 761.08,-147.49"/>
</g>
<!-- fn_gen.dg2052&#45;&gt;fn_gen.errors -->
<g id="edge7" class="edge">
<title>fn_gen.dg2052&#45;&gt;fn_gen.errors</title>
<path fill="none" stroke="black" d="M538.2,-108.42C525.95,-118.12 511.19,-130.87 499.75,-144 483.07,-163.15 467.77,-187.6 457.23,-206.02"/>
<polygon fill="black" stroke="black" points="452.48,-214.51 453.44,-203.58 454.33,-211.21 457.37,-205.78 457.37,-205.78 457.37,-205.78 454.33,-211.21 461.29,-207.98 452.48,-214.51"/>
</g>
<!-- fn_gen.enums.comm_method -->
<g id="node5" class="node">
<title>fn_gen.enums.comm_method</title>
<polygon fill="#99ddff" stroke="#99ddff" points="1549.12,-252 1370.38,-252 1370.38,-216 1549.12,-216 1549.12,-252"/>
<text text-anchor="middle" x="1459.75" y="-228.57" font-family="Times,serif" font-size="14.00">fn_gen.enums.comm_method</text>
</g>
<!-- fn_gen.enums&#45;&gt;fn_gen.enums.comm_method -->
<g id="edge8" class="edge">
<title>fn_gen.enums&#45;&gt;fn_gen.enums.comm_method</title>
<path fill="none" stroke="black" d="M855.5,-166.27C949.15,-173.09 1166.61,-190.22 1359.18,-215.71"/>
<polygon fill="black" stroke="black" points="1368.86,-217 1358.36,-220.14 1365.11,-216.5 1358.95,-215.68 1358.95,-215.68 1358.95,-215.68 1365.11,-216.5 1359.55,-211.22 1368.86,-217"/>
</g>
<!-- fn_gen.enums.sweep_signal_type -->
<g id="node6" class="node">
<title>fn_gen.enums.sweep_signal_type</title>
<polygon fill="#99ddff" stroke="#99ddff" points="702.5,-252 505,-252 505,-216 702.5,-216 702.5,-252"/>
<text text-anchor="middle" x="603.75" y="-228.57" font-family="Times,serif" font-size="14.00">fn_gen.enums.sweep_signal_type</text>
</g>
<!-- fn_gen.enums&#45;&gt;fn_gen.enums.sweep_signal_type -->
<g id="edge9" class="edge">
<title>fn_gen.enums&#45;&gt;fn_gen.enums.sweep_signal_type</title>
<path fill="none" stroke="black" d="M762.23,-178.88C733.47,-188.71 696.22,-201.42 665.07,-212.06"/>
<polygon fill="black" stroke="black" points="655.91,-215.19 663.92,-207.7 659.49,-213.97 665.37,-211.96 665.37,-211.96 665.37,-211.96 659.49,-213.97 666.83,-216.22 655.91,-215.19"/>
</g>
<!-- fn_gen.enums.sweep_spacing -->
<g id="node7" class="node">
<title>fn_gen.enums.sweep_spacing</title>
<polygon fill="#99ddff" stroke="#99ddff" points="896.62,-252 720.88,-252 720.88,-216 896.62,-216 896.62,-252"/>
<text text-anchor="middle" x="808.75" y="-228.57" font-family="Times,serif" font-size="14.00">fn_gen.enums.sweep_spacing</text>
</g>
<!-- fn_gen.enums&#45;&gt;fn_gen.enums.sweep_spacing -->
<g id="edge10" class="edge">
<title>fn_gen.enums&#45;&gt;fn_gen.enums.sweep_spacing</title>
<path fill="none" stroke="black" d="M808.75,-180.3C808.75,-187.68 808.75,-196.48 808.75,-204.75"/>
<polygon fill="black" stroke="black" points="808.75,-214.68 804.25,-204.68 808.75,-210.9 808.75,-204.68 808.75,-204.68 808.75,-204.68 808.75,-210.9 813.25,-204.68 808.75,-214.68"/>
</g>
<!-- fn_gen.enums.sweep_trigger_slope -->
<g id="node8" class="node">
<title>fn_gen.enums.sweep_trigger_slope</title>
<polygon fill="#99ddff" stroke="#99ddff" points="1120.62,-252 914.88,-252 914.88,-216 1120.62,-216 1120.62,-252"/>
<text text-anchor="middle" x="1017.75" y="-228.57" font-family="Times,serif" font-size="14.00">fn_gen.enums.sweep_trigger_slope</text>
</g>
<!-- fn_gen.enums&#45;&gt;fn_gen.enums.sweep_trigger_slope -->
<g id="edge11" class="edge">
<title>fn_gen.enums&#45;&gt;fn_gen.enums.sweep_trigger_slope</title>
<path fill="none" stroke="black" d="M855.39,-178.62C884.79,-188.47 923.12,-201.3 955.14,-212.03"/>
<polygon fill="black" stroke="black" points="964.59,-215.19 953.68,-216.29 961,-213.99 955.11,-212.02 955.11,-212.02 955.11,-212.02 961,-213.99 956.53,-207.75 964.59,-215.19"/>
</g>
<!-- fn_gen.enums.sweep_trigger_source -->
<g id="node9" class="node">
<title>fn_gen.enums.sweep_trigger_source</title>
<polygon fill="#99ddff" stroke="#99ddff" points="1352.38,-252 1139.12,-252 1139.12,-216 1352.38,-216 1352.38,-252"/>
<text text-anchor="middle" x="1245.75" y="-228.57" font-family="Times,serif" font-size="14.00">fn_gen.enums.sweep_trigger_source</text>
</g>
<!-- fn_gen.enums&#45;&gt;fn_gen.enums.sweep_trigger_source -->
<g id="edge12" class="edge">
<title>fn_gen.enums&#45;&gt;fn_gen.enums.sweep_trigger_source</title>
<path fill="none" stroke="black" d="M855.1,-170.42C919.42,-180.73 1037.92,-199.71 1127.61,-214.08"/>
<polygon fill="black" stroke="black" points="1137.47,-215.66 1126.89,-218.52 1133.74,-215.06 1127.6,-214.07 1127.6,-214.07 1127.6,-214.07 1133.74,-215.06 1128.31,-209.63 1137.47,-215.66"/>
</g>
<!-- fn_gen.errors.undefined_communication_method_error -->
<g id="node11" class="node">
<title>fn_gen.errors.undefined_communication_method_error</title>
<polygon fill="#44bb99" stroke="#44bb99" points="317.5,-324 0,-324 0,-288 317.5,-288 317.5,-324"/>
<text text-anchor="middle" x="158.75" y="-300.57" font-family="Times,serif" font-size="14.00">fn_gen.errors.undefined_communication_method_error</text>
</g>
<!-- fn_gen.errors&#45;&gt;fn_gen.errors.undefined_communication_method_error -->
<g id="edge13" class="edge">
<title>fn_gen.errors&#45;&gt;fn_gen.errors.undefined_communication_method_error</title>
<path fill="none" stroke="black" d="M398.06,-246.01C355.92,-256.4 291.73,-272.22 240.44,-284.86"/>
<polygon fill="black" stroke="black" points="230.89,-287.22 239.52,-280.46 234.56,-286.31 240.6,-284.83 240.6,-284.83 240.6,-284.83 234.56,-286.31 241.68,-289.2 230.89,-287.22"/>
</g>
<!-- fn_gen.errors.undefined_value_error -->
<g id="node12" class="node">
<title>fn_gen.errors.undefined_value_error</title>
<polygon fill="#44bb99" stroke="#44bb99" points="549.75,-324 335.75,-324 335.75,-288 549.75,-288 549.75,-324"/>
<text text-anchor="middle" x="442.75" y="-300.57" font-family="Times,serif" font-size="14.00">fn_gen.errors.undefined_value_error</text>
</g>
<!-- fn_gen.errors&#45;&gt;fn_gen.errors.undefined_value_error -->
<g id="edge14" class="edge">
<title>fn_gen.errors&#45;&gt;fn_gen.errors.undefined_value_error</title>
<path fill="none" stroke="black" d="M442.75,-252.3C442.75,-259.68 442.75,-268.48 442.75,-276.75"/>
<polygon fill="black" stroke="black" points="442.75,-286.68 438.25,-276.68 442.75,-282.9 442.75,-276.68 442.75,-276.68 442.75,-276.68 442.75,-282.9 447.25,-276.68 442.75,-286.68"/>
</g>
<!-- fn_gen.errors.value_out_of_bounds_error -->
<g id="node13" class="node">
<title>fn_gen.errors.value_out_of_bounds_error</title>
<polygon fill="#44bb99" stroke="#44bb99" points="810,-324 567.5,-324 567.5,-288 810,-288 810,-324"/>
<text text-anchor="middle" x="688.75" y="-300.57" font-family="Times,serif" font-size="14.00">fn_gen.errors.value_out_of_bounds_error</text>
</g>
<!-- fn_gen.errors&#45;&gt;fn_gen.errors.value_out_of_bounds_error -->
<g id="edge15" class="edge">
<title>fn_gen.errors&#45;&gt;fn_gen.errors.value_out_of_bounds_error</title>
<path fill="none" stroke="black" d="M487.53,-249.51C490.31,-250.36 493.06,-251.2 495.75,-252 533.78,-263.32 576.28,-275.08 611.7,-284.64"/>
<polygon fill="black" stroke="black" points="621.28,-287.22 610.45,-288.97 617.62,-286.24 611.62,-284.62 611.62,-284.62 611.62,-284.62 617.62,-286.24 612.79,-280.28 621.28,-287.22"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB