diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/analog_2enums_8hpp.html b/analog_2enums_8hpp.html new file mode 100644 index 00000000..c6853e03 --- /dev/null +++ b/analog_2enums_8hpp.html @@ -0,0 +1,159 @@ + + + + + + + +libm2k: enums.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Enumerations
+
+
analog/enums.hpp File Reference
+
+
+ +

Analogical enumerations. +More...

+
#include <vector>
+#include <string>
+#include <memory>
+
+Include dependency graph for analog/enums.hpp:
+
+
+ + + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + +
+
+

Go to the source code of this file.

+ + + + + +

+Classes

struct  libm2k::analog::DMM_READING
 The structure of a DMM. More...
 
+ + + + + + + +

+Enumerations

enum  libm2k::analog::ANALOG_IN_CHANNEL {
+  ANALOG_IN_CHANNEL_1 = 0, +
+  ANALOG_IN_CHANNEL_2 = 1 +
+ }
 Indexes of the channels. More...
 
enum  libm2k::analog::M2K_RANGE {
+  PLUS_MINUS_25V = 0, +
+  PLUS_MINUS_2_5V = 1 +
+ }
 Range of the signal's amplitude.
 
+

Detailed Description

+

Analogical enumerations.

+

Enumeration Type Documentation

+ +

◆ ANALOG_IN_CHANNEL

+ +
+
+ +

Indexes of the channels.

+
Note
Each channel can be accessed through its index
+ +
+
+
+ + + + diff --git a/analog_2enums_8hpp__dep__incl.map b/analog_2enums_8hpp__dep__incl.map new file mode 100644 index 00000000..4c594da8 --- /dev/null +++ b/analog_2enums_8hpp__dep__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/analog_2enums_8hpp__dep__incl.md5 b/analog_2enums_8hpp__dep__incl.md5 new file mode 100644 index 00000000..8f56d619 --- /dev/null +++ b/analog_2enums_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +5f70060b3ab39b5ed2ed5a693b1e9134 \ No newline at end of file diff --git a/analog_2enums_8hpp__dep__incl.png b/analog_2enums_8hpp__dep__incl.png new file mode 100644 index 00000000..78b7c8ce Binary files /dev/null and b/analog_2enums_8hpp__dep__incl.png differ diff --git a/analog_2enums_8hpp__incl.map b/analog_2enums_8hpp__incl.map new file mode 100644 index 00000000..a9bc19f1 --- /dev/null +++ b/analog_2enums_8hpp__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/analog_2enums_8hpp__incl.md5 b/analog_2enums_8hpp__incl.md5 new file mode 100644 index 00000000..782e1039 --- /dev/null +++ b/analog_2enums_8hpp__incl.md5 @@ -0,0 +1 @@ +b86583060a685d9d13c11c441d45a727 \ No newline at end of file diff --git a/analog_2enums_8hpp__incl.png b/analog_2enums_8hpp__incl.png new file mode 100644 index 00000000..2325ad6f Binary files /dev/null and b/analog_2enums_8hpp__incl.png differ diff --git a/analog_2enums_8hpp_source.html b/analog_2enums_8hpp_source.html new file mode 100644 index 00000000..ff6b4c02 --- /dev/null +++ b/analog_2enums_8hpp_source.html @@ -0,0 +1,88 @@ + + + + + + + +libm2k: enums.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
analog/enums.hpp
+
+
+Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019 Analog Devices Inc.
3  *
4  * This file is part of libm2k
5  * (see http://www.github.com/analogdevicesinc/libm2k).
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as published by
9  * the Free Software Foundation, either version 2.1 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef ENUMS_ANALOG_HPP
23 #define ENUMS_ANALOG_HPP
24 
25 #include <vector>
26 #include <string>
27 #include <memory>
28 
34 namespace libm2k {
35 namespace analog {
36 
37 
43  struct DMM_READING {
44  std::string name;
45  std::string id;
46  double value;
47  std::string unit_name;
48  std::string unit_symbol;
49  };
50 
51 
60  ANALOG_IN_CHANNEL_1 = 0,
61  ANALOG_IN_CHANNEL_2 = 1
62  };
63 
64 
70  enum M2K_RANGE {
71  PLUS_MINUS_25V = 0,
72  PLUS_MINUS_2_5V = 1
73  };
74 }
75 }
76 
77 
78 #endif
std::string name
The name of the channel.
Definition: analog/enums.hpp:44
+
The structure of a DMM.
Definition: analog/enums.hpp:43
+
std::string unit_symbol
Unit symbol.
Definition: analog/enums.hpp:48
+
std::string id
Channel's id.
Definition: analog/enums.hpp:45
+
std::string unit_name
Unit of measurement.
Definition: analog/enums.hpp:47
+
ANALOG_IN_CHANNEL
Indexes of the channels.
Definition: analog/enums.hpp:59
+
double value
The measured value.
Definition: analog/enums.hpp:46
+
M2K_RANGE
Range of the signal's amplitude.
Definition: analog/enums.hpp:70
+
+ + + + diff --git a/annotated.html b/annotated.html new file mode 100644 index 00000000..75465a06 --- /dev/null +++ b/annotated.html @@ -0,0 +1,97 @@ + + + + + + + +libm2k: Class List + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + +
 Nlibm2k
 Nanalog
 CDMMControls the digital multimeter
 CDMM_READINGThe structure of a DMM
 CM2kAnalogInControls the analogical input compound
 CM2kAnalogOutControls the analogical output compound
 CM2kPowerSupplyControls the power supply
 Ncontext
 CContextControls the IIO context
 CM2kControls the ADALM2000
 Ndigital
 CM2kDigitalControls the digital input and output segment
 CCALIBRATION_PARAMETERSCalibration parameters of m2k
 CCONTEXT_INFOAdditional information about the context
 CIIO_CONTEXT_VERSIONThe version of the backend
 CM2kHardwareTriggerControls the hardware trigger for ADALM2000
 CSETTINGSTriggering system
+
+
+ + + + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 00000000..224b29aa Binary files /dev/null and b/bc_s.png differ diff --git a/bdwn.png b/bdwn.png new file mode 100644 index 00000000..940a0b95 Binary files /dev/null and b/bdwn.png differ diff --git a/classes.html b/classes.html new file mode 100644 index 00000000..77a7c339 --- /dev/null +++ b/classes.html @@ -0,0 +1,93 @@ + + + + + + + +libm2k: Class Index + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
c | d | i | m | s
+ + + + + + + + + +
  c  
+
  d  
+
  m  
+
M2kDigital (libm2k::digital)   
M2kHardwareTrigger (libm2k)   
CALIBRATION_PARAMETERS (libm2k)   DMM (libm2k::analog)   M2k (libm2k::context)   M2kPowerSupply (libm2k::analog)   
Context (libm2k::context)   DMM_READING (libm2k::analog)   M2kAnalogIn (libm2k::analog)   
  s  
+
CONTEXT_INFO (libm2k)   
  i  
+
M2kAnalogOut (libm2k::analog)   
SETTINGS (libm2k)   
IIO_CONTEXT_VERSION (libm2k)   
+
c | d | i | m | s
+
+ + + + diff --git a/classlibm2k_1_1_m2k_hardware_trigger-members.html b/classlibm2k_1_1_m2k_hardware_trigger-members.html new file mode 100644 index 00000000..9eca96f8 --- /dev/null +++ b/classlibm2k_1_1_m2k_hardware_trigger-members.html @@ -0,0 +1,125 @@ + + + + + + + +libm2k: Member List + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libm2k::M2kHardwareTrigger Member List
+
+
+ +

This is the complete list of members for libm2k::M2kHardwareTrigger, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
getAnalogCondition(unsigned int chnIdx)=0libm2k::M2kHardwareTriggerpure virtual
getAnalogDelay() const =0libm2k::M2kHardwareTriggerpure virtual
getAnalogExternalCondition(unsigned int chnIdx)=0libm2k::M2kHardwareTriggerpure virtual
getAnalogExternalOutSelect()libm2k::M2kHardwareTriggervirtual
getAnalogHysteresis(unsigned int chnIdx)=0libm2k::M2kHardwareTriggerpure virtual
getAnalogLevel(unsigned int chnIdx)=0libm2k::M2kHardwareTriggerpure virtual
getAnalogLevelRaw(unsigned int chnIdx)=0libm2k::M2kHardwareTriggerpure virtual
getAnalogMode(unsigned int chnIdx)=0libm2k::M2kHardwareTriggerpure virtual
getAnalogOutTriggerCondition() const =0libm2k::M2kHardwareTriggerpure virtual
getAnalogOutTriggerSource() const =0libm2k::M2kHardwareTriggerpure virtual
getAnalogOutTriggerStatus() const =0libm2k::M2kHardwareTriggerpure virtual
getAnalogSource()=0libm2k::M2kHardwareTriggerpure virtual
getAnalogSourceChannel()=0libm2k::M2kHardwareTriggerpure virtual
getAnalogStreamingFlag()=0libm2k::M2kHardwareTriggerpure virtual
getDigitalCondition(unsigned int chnIdx)=0libm2k::M2kHardwareTriggerpure virtual
getDigitalCondition(libm2k::digital::DIO_CHANNEL chnIdx)=0libm2k::M2kHardwareTriggerpure virtual
getDigitalDelay() const =0libm2k::M2kHardwareTriggerpure virtual
getDigitalExternalCondition() const =0libm2k::M2kHardwareTriggerpure virtual
getDigitalMode()=0libm2k::M2kHardwareTriggerpure virtual
getDigitalSource() constlibm2k::M2kHardwareTriggervirtual
getDigitalStreamingFlag()=0libm2k::M2kHardwareTriggerpure virtual
setAnalogCondition(unsigned int chnIdx, M2K_TRIGGER_CONDITION_ANALOG cond)=0libm2k::M2kHardwareTriggerpure virtual
setAnalogDelay(int delay)=0libm2k::M2kHardwareTriggerpure virtual
setAnalogExternalCondition(unsigned int chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond)=0libm2k::M2kHardwareTriggerpure virtual
setAnalogExternalOutSelect(M2K_TRIGGER_OUT_SELECT output_select)libm2k::M2kHardwareTriggervirtual
setAnalogHysteresis(unsigned int chnIdx, double hysteresis)=0libm2k::M2kHardwareTriggerpure virtual
setAnalogLevel(unsigned int chnIdx, double v_level)=0libm2k::M2kHardwareTriggerpure virtual
setAnalogLevelRaw(unsigned int chnIdx, int level)=0libm2k::M2kHardwareTriggerpure virtual
setAnalogMode(unsigned int chnIdx, M2K_TRIGGER_MODE mode)=0libm2k::M2kHardwareTriggerpure virtual
setAnalogOutTriggerCondition(M2K_TRIGGER_CONDITION_OUT condition)=0libm2k::M2kHardwareTriggerpure virtual
setAnalogOutTriggerSource(M2K_TRIGGER_SOURCE_OUT src)=0libm2k::M2kHardwareTriggerpure virtual
setAnalogOutTriggerStatus(M2K_TRIGGER_STATUS_ANALOG_OUT status)=0libm2k::M2kHardwareTriggerpure virtual
setAnalogSource(M2K_TRIGGER_SOURCE_ANALOG src)=0libm2k::M2kHardwareTriggerpure virtual
setAnalogSourceChannel(unsigned int chnIdx)=0libm2k::M2kHardwareTriggerpure virtual
setAnalogStreamingFlag(bool enable)=0libm2k::M2kHardwareTriggerpure virtual
setDigitalCondition(unsigned int chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond)=0libm2k::M2kHardwareTriggerpure virtual
setDigitalCondition(libm2k::digital::DIO_CHANNEL chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond)=0libm2k::M2kHardwareTriggerpure virtual
setDigitalDelay(int delay)=0libm2k::M2kHardwareTriggerpure virtual
setDigitalExternalCondition(M2K_TRIGGER_CONDITION_DIGITAL cond)=0libm2k::M2kHardwareTriggerpure virtual
setDigitalMode(libm2k::digital::DIO_TRIGGER_MODE mode)=0libm2k::M2kHardwareTriggerpure virtual
setDigitalSource(M2K_TRIGGER_SOURCE_DIGITAL external_src)libm2k::M2kHardwareTriggervirtual
setDigitalStreamingFlag(bool enable)=0libm2k::M2kHardwareTriggerpure virtual
+ + + + diff --git a/classlibm2k_1_1_m2k_hardware_trigger.html b/classlibm2k_1_1_m2k_hardware_trigger.html new file mode 100644 index 00000000..2dad5f3a --- /dev/null +++ b/classlibm2k_1_1_m2k_hardware_trigger.html @@ -0,0 +1,225 @@ + + + + + + + +libm2k: libm2k::M2kHardwareTrigger Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +List of all members
+
+
libm2k::M2kHardwareTrigger Class Referenceabstract
+
+
+ +

Controls the hardware trigger for ADALM2000. + More...

+ +

#include <libm2k/m2khardwaretrigger.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual int getAnalogLevelRaw (unsigned int chnIdx)=0
 Get the raw analog trigger level for one channel. More...
 
virtual void setAnalogLevelRaw (unsigned int chnIdx, int level)=0
 Set the raw analog trigger level for one channel. More...
 
virtual void setAnalogLevel (unsigned int chnIdx, double v_level)=0
 Set the analog trigger level for one channel. More...
 
virtual double getAnalogLevel (unsigned int chnIdx)=0
 Get the analog trigger level for one channel. More...
 
virtual double getAnalogHysteresis (unsigned int chnIdx)=0
 Get the analog hysteresis value for one channel. More...
 
virtual void setAnalogHysteresis (unsigned int chnIdx, double hysteresis)=0
 Set the analog hysteresis value for one channel. More...
 
virtual M2K_TRIGGER_CONDITION_ANALOG getAnalogCondition (unsigned int chnIdx)=0
 Get the trigger condition for the analog trigger on a specific channel. More...
 
virtual void setAnalogCondition (unsigned int chnIdx, M2K_TRIGGER_CONDITION_ANALOG cond)=0
 Set the trigger condition for the analog trigger on a specific channel. More...
 
virtual M2K_TRIGGER_CONDITION_DIGITAL getDigitalCondition (unsigned int chnIdx)=0
 Get the trigger condition for the digital trigger on a specific channel. More...
 
virtual M2K_TRIGGER_CONDITION_DIGITAL getDigitalCondition (libm2k::digital::DIO_CHANNEL chnIdx)=0
 Get the trigger condition for the digital trigger on a specific channel. More...
 
virtual void setDigitalCondition (unsigned int chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond)=0
 Set the trigger condition for the digital trigger on a specific channel. More...
 
virtual void setDigitalCondition (libm2k::digital::DIO_CHANNEL chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond)=0
 Set the trigger condition for the digital trigger on a specific channel. More...
 
virtual M2K_TRIGGER_MODE getAnalogMode (unsigned int chnIdx)=0
 Get the mode for the analog trigger on a specific channel. More...
 
virtual void setAnalogMode (unsigned int chnIdx, M2K_TRIGGER_MODE mode)=0
 Set the mode for the analog trigger on a specific channel. More...
 
virtual libm2k::digital::DIO_TRIGGER_MODE getDigitalMode ()=0
 Get the mode for the digital trigger. More...
 
virtual void setDigitalMode (libm2k::digital::DIO_TRIGGER_MODE mode)=0
 Set the mode for the digital trigger. More...
 
virtual M2K_TRIGGER_SOURCE_ANALOG getAnalogSource ()=0
 Get the source of the analog trigger. More...
 
virtual void setAnalogSource (M2K_TRIGGER_SOURCE_ANALOG src)=0
 Set the source of the analog trigger. More...
 
virtual int getAnalogSourceChannel ()=0
 Get the channel source of the analog trigger. More...
 
virtual void setAnalogSourceChannel (unsigned int chnIdx)=0
 Set the channel source of the analog trigger. More...
 
virtual int getAnalogDelay () const =0
 Get the analog trigger delay. More...
 
virtual void setAnalogDelay (int delay)=0
 Set the analog trigger delay. More...
 
virtual int getDigitalDelay () const =0
 Get the digital trigger delay. More...
 
virtual void setDigitalDelay (int delay)=0
 Set the digital trigger delay. More...
 
virtual void setAnalogStreamingFlag (bool enable)=0
 Set the streaming flag for the analog part. More...
 
virtual bool getAnalogStreamingFlag ()=0
 Get the streaming flag for the analog part. More...
 
virtual void setDigitalStreamingFlag (bool enable)=0
 Set the streaming flag for the digital part. More...
 
virtual bool getDigitalStreamingFlag ()=0
 Get the streaming flag for the digital part. More...
 
virtual M2K_TRIGGER_CONDITION_DIGITAL getAnalogExternalCondition (unsigned int chnIdx)=0
 getAnalogExternalCondition More...
 
virtual void setAnalogExternalCondition (unsigned int chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond)=0
 setAnalogExternalCondition More...
 
virtual M2K_TRIGGER_CONDITION_DIGITAL getDigitalExternalCondition () const =0
 getDigitalExternalCondition More...
 
virtual void setDigitalExternalCondition (M2K_TRIGGER_CONDITION_DIGITAL cond)=0
 setDigitalExternalCondition More...
 
virtual void setAnalogExternalOutSelect (M2K_TRIGGER_OUT_SELECT output_select)
 Select what should be redirected on the TO (trigger out) pin.
+ The options are (none, trigger in, digital in, analog in).
+. More...
 
virtual M2K_TRIGGER_OUT_SELECT getAnalogExternalOutSelect ()
 Check which trigger events are forwarded on the TO (trigger out) pin. More...
 
virtual void setDigitalSource (M2K_TRIGGER_SOURCE_DIGITAL external_src)
 Select which interface triggers the DigitalIn. More...
 
virtual M2K_TRIGGER_SOURCE_DIGITAL getDigitalSource () const
 Check which is the source of the DigitalIn interface trigger event. More...
 
virtual void setAnalogOutTriggerSource (M2K_TRIGGER_SOURCE_OUT src)=0
 Select which interface triggers the AnalogOut. More...
 
virtual M2K_TRIGGER_SOURCE_OUT getAnalogOutTriggerSource () const =0
 Returns the source of the AnalogOut trigger event. More...
 
virtual void setAnalogOutTriggerCondition (M2K_TRIGGER_CONDITION_OUT condition)=0
 Configures the triggering condition when the source of the AnalogOut trigger event is set to TRIGGER_TI_0. More...
 
virtual M2K_TRIGGER_CONDITION_OUT getAnalogOutTriggerCondition () const =0
 Returns the condition of the AnalogOut trigger event when the source is TI. More...
 
virtual void setAnalogOutTriggerStatus (M2K_TRIGGER_STATUS_ANALOG_OUT status)=0
 Defines the action to be performed when a trigger event occurs. More...
 
virtual M2K_TRIGGER_STATUS_ANALOG_OUT getAnalogOutTriggerStatus () const =0
 Returns the action that is performed when a trigger event occurs. More...
 
+

Detailed Description

+

Controls the hardware trigger for ADALM2000.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classlibm2k_1_1analog_1_1_d_m_m-members.html b/classlibm2k_1_1analog_1_1_d_m_m-members.html new file mode 100644 index 00000000..f66e6c2f --- /dev/null +++ b/classlibm2k_1_1analog_1_1_d_m_m-members.html @@ -0,0 +1,88 @@ + + + + + + + +libm2k: Member List + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libm2k::analog::DMM Member List
+
+
+ +

This is the complete list of members for libm2k::analog::DMM, including all inherited members.

+ + + + + + +
getAllChannels()=0libm2k::analog::DMMpure virtual
getName()=0libm2k::analog::DMMpure virtual
readAll()=0libm2k::analog::DMMpure virtual
readChannel(unsigned int index)=0libm2k::analog::DMMpure virtual
readChannel(std::string chn_name)=0libm2k::analog::DMMpure virtual
+ + + + diff --git a/classlibm2k_1_1analog_1_1_d_m_m.html b/classlibm2k_1_1analog_1_1_d_m_m.html new file mode 100644 index 00000000..5ffb48c9 --- /dev/null +++ b/classlibm2k_1_1analog_1_1_d_m_m.html @@ -0,0 +1,112 @@ + + + + + + + +libm2k: libm2k::analog::DMM Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +List of all members
+
+
libm2k::analog::DMM Class Referenceabstract
+
+
+ +

Controls the digital multimeter. + More...

+ +

#include <libm2k/analog/dmm.hpp>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual std::vector< std::string > getAllChannels ()=0
 Retrieve all channels. More...
 
virtual libm2k::analog::DMM_READING readChannel (unsigned int index)=0
 Retrieve additional information about the given channel. More...
 
virtual libm2k::analog::DMM_READING readChannel (std::string chn_name)=0
 Retrieve additional information about the given channel. More...
 
virtual std::vector< libm2k::analog::DMM_READINGreadAll ()=0
 Retrieve additional information about all channels. More...
 
virtual std::string getName ()=0
 Retrieve the device's name. More...
 
+

Detailed Description

+

Controls the digital multimeter.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classlibm2k_1_1analog_1_1_m2k_analog_in-members.html b/classlibm2k_1_1analog_1_1_m2k_analog_in-members.html new file mode 100644 index 00000000..ce0c9d4f --- /dev/null +++ b/classlibm2k_1_1analog_1_1_m2k_analog_in-members.html @@ -0,0 +1,131 @@ + + + + + + + +libm2k: Member List + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libm2k::analog::M2kAnalogIn Member List
+
+
+ +

This is the complete list of members for libm2k::analog::M2kAnalogIn, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cancelAcquisition()=0libm2k::analog::M2kAnalogInpure virtual
convertRawToVolts(unsigned int channel, short raw)=0libm2k::analog::M2kAnalogInpure virtual
convertVoltsToRaw(unsigned int channel, double voltage)=0libm2k::analog::M2kAnalogInpure virtual
enableChannel(unsigned int chnIdx, bool enable)=0libm2k::analog::M2kAnalogInpure virtual
getAvailableRanges()=0libm2k::analog::M2kAnalogInpure virtual
getAvailableSampleRates()=0libm2k::analog::M2kAnalogInpure virtual
getChannelName(unsigned int channel)=0libm2k::analog::M2kAnalogInpure virtual
getFilterCompensation(double samplerate)=0libm2k::analog::M2kAnalogInpure virtual
getHysteresisRange(ANALOG_IN_CHANNEL chn)=0libm2k::analog::M2kAnalogInpure virtual
getIioObjects()=0libm2k::analog::M2kAnalogInpure virtual
getKernelBuffersCount() const =0libm2k::analog::M2kAnalogInpure virtual
getMaximumSamplerate()=0libm2k::analog::M2kAnalogInpure virtual
getName()=0libm2k::analog::M2kAnalogInpure virtual
getNbChannels()=0libm2k::analog::M2kAnalogInpure virtual
getOversamplingRatio()=0libm2k::analog::M2kAnalogInpure virtual
getOversamplingRatio(unsigned int chn_idx)=0libm2k::analog::M2kAnalogInpure virtual
getRange(libm2k::analog::ANALOG_IN_CHANNEL channel)=0libm2k::analog::M2kAnalogInpure virtual
getRangeLimits(libm2k::analog::M2K_RANGE range)=0libm2k::analog::M2kAnalogInpure virtual
getSampleRate()=0libm2k::analog::M2kAnalogInpure virtual
getSamples(unsigned int nb_samples)=0libm2k::analog::M2kAnalogInpure virtual
getSamples(std::vector< std::vector< double >> &data, unsigned int nb_samples)=0libm2k::analog::M2kAnalogInpure virtual
getSamplesInterleaved(unsigned int nb_samples_per_channel)=0libm2k::analog::M2kAnalogInpure virtual
getSamplesInterleaved_matlab(unsigned int nb_samples)=0libm2k::analog::M2kAnalogInpure virtual
getSamplesRaw(unsigned int nb_samples)=0libm2k::analog::M2kAnalogInpure virtual
getSamplesRawInterleaved(unsigned int nb_samples_per_channel)=0libm2k::analog::M2kAnalogInpure virtual
getSamplesRawInterleaved_matlab(unsigned int nb_samples)=0libm2k::analog::M2kAnalogInpure virtual
getScalingFactor(libm2k::analog::ANALOG_IN_CHANNEL ch)=0libm2k::analog::M2kAnalogInpure virtual
getTrigger()=0libm2k::analog::M2kAnalogInpure virtual
getValueForRange(M2K_RANGE range)=0libm2k::analog::M2kAnalogInpure virtual
getVerticalOffset(ANALOG_IN_CHANNEL channel)=0libm2k::analog::M2kAnalogInpure virtual
getVoltage(unsigned int ch)=0libm2k::analog::M2kAnalogInpure virtual
getVoltage(libm2k::analog::ANALOG_IN_CHANNEL ch)=0libm2k::analog::M2kAnalogInpure virtual
getVoltage()=0libm2k::analog::M2kAnalogInpure virtual
getVoltageP()=0libm2k::analog::M2kAnalogInpure virtual
getVoltageRaw(unsigned int ch)=0libm2k::analog::M2kAnalogInpure virtual
getVoltageRaw(libm2k::analog::ANALOG_IN_CHANNEL ch)=0libm2k::analog::M2kAnalogInpure virtual
getVoltageRaw()=0libm2k::analog::M2kAnalogInpure virtual
getVoltageRawP()=0libm2k::analog::M2kAnalogInpure virtual
isChannelEnabled(unsigned int chnIdx)=0libm2k::analog::M2kAnalogInpure virtual
setKernelBuffersCount(unsigned int count)=0libm2k::analog::M2kAnalogInpure virtual
setOversamplingRatio(int oversampling)=0libm2k::analog::M2kAnalogInpure virtual
setOversamplingRatio(unsigned int chn_idx, int oversampling)=0libm2k::analog::M2kAnalogInpure virtual
setRange(ANALOG_IN_CHANNEL channel, M2K_RANGE range)=0libm2k::analog::M2kAnalogInpure virtual
setRange(ANALOG_IN_CHANNEL channel, double min, double max)=0libm2k::analog::M2kAnalogInpure virtual
setSampleRate(double samplerate)=0libm2k::analog::M2kAnalogInpure virtual
setVerticalOffset(ANALOG_IN_CHANNEL channel, double vertOffset)=0libm2k::analog::M2kAnalogInpure virtual
startAcquisition(unsigned int nb_samples)=0libm2k::analog::M2kAnalogInpure virtual
stopAcquisition()=0libm2k::analog::M2kAnalogInpure virtual
+ + + + diff --git a/classlibm2k_1_1analog_1_1_m2k_analog_in.html b/classlibm2k_1_1analog_1_1_m2k_analog_in.html new file mode 100644 index 00000000..86b3613c --- /dev/null +++ b/classlibm2k_1_1analog_1_1_m2k_analog_in.html @@ -0,0 +1,242 @@ + + + + + + + +libm2k: libm2k::analog::M2kAnalogIn Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +List of all members
+
+
libm2k::analog::M2kAnalogIn Class Referenceabstract
+
+
+ +

Controls the analogical input compound. + More...

+ +

#include <libm2k/analog/m2kanalogin.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual void startAcquisition (unsigned int nb_samples)=0
 Create the buffer for both channels and start the acquisition. More...
 
+virtual void stopAcquisition ()=0
 Destroy the buffer and stop the acquisition.
 
virtual std::vector< std::vector< double > > getSamples (unsigned int nb_samples)=0
 Retrieve a specific number of samples from each channel. More...
 
virtual std::vector< std::vector< double > > getSamplesRaw (unsigned int nb_samples)=0
 Retrieve a specific number of raw samples from each channel. More...
 
virtual const double * getSamplesInterleaved (unsigned int nb_samples_per_channel)=0
 Retrieve a specific number of samples from each channel. More...
 
virtual const short * getSamplesRawInterleaved (unsigned int nb_samples_per_channel)=0
 Retrieve a specific number of raw samples from each channel. More...
 
virtual const double * getSamplesInterleaved_matlab (unsigned int nb_samples)=0
 Retrieve a specific number of samples from both channels. More...
 
virtual const short * getSamplesRawInterleaved_matlab (unsigned int nb_samples)=0
 Retrieve a specific number of raw samples from both channels. More...
 
virtual short getVoltageRaw (unsigned int ch)=0
 Retrieve the average raw value of the given channel. More...
 
virtual double getVoltage (unsigned int ch)=0
 Retrieve the average voltage of the given channel. More...
 
virtual short getVoltageRaw (libm2k::analog::ANALOG_IN_CHANNEL ch)=0
 Retrieve the average raw value of the given channel. More...
 
virtual double getVoltage (libm2k::analog::ANALOG_IN_CHANNEL ch)=0
 Retrieve the average voltage of the given channel. More...
 
virtual std::vector< short > getVoltageRaw ()=0
 Retrieve the average raw value for each channel. More...
 
virtual std::vector< double > getVoltage ()=0
 Retrieve the average voltage for each channel. More...
 
virtual const short * getVoltageRawP ()=0
 Retrieve the average raw value for both channels. More...
 
virtual const double * getVoltageP ()=0
 Retrieve the average voltage for both channels. More...
 
virtual void setVerticalOffset (ANALOG_IN_CHANNEL channel, double vertOffset)=0
 Set the vertical offset, in Volts, of a specific channel. More...
 
virtual double getVerticalOffset (ANALOG_IN_CHANNEL channel)=0
 getVerticalOffset More...
 
virtual double getScalingFactor (libm2k::analog::ANALOG_IN_CHANNEL ch)=0
 Retrieve the scaling factor. More...
 
virtual void setRange (ANALOG_IN_CHANNEL channel, M2K_RANGE range)=0
 Set the range for the given channel. More...
 
virtual void setRange (ANALOG_IN_CHANNEL channel, double min, double max)=0
 Set the range for the given channel. More...
 
virtual libm2k::analog::M2K_RANGE getRange (libm2k::analog::ANALOG_IN_CHANNEL channel)=0
 Retrieve the range for the given channel. More...
 
virtual std::pair< double, double > getRangeLimits (libm2k::analog::M2K_RANGE range)=0
 Retrieve the bounds for the given range. More...
 
virtual std::vector< std::pair< std::string, std::pair< double, double > > > getAvailableRanges ()=0
 Retrieve all ranges that are available. More...
 
virtual int getOversamplingRatio ()=0
 Retrieve the global oversampling ratio. More...
 
virtual int getOversamplingRatio (unsigned int chn_idx)=0
 Retrieve the oversampling ratio for the given channel. More...
 
virtual int setOversamplingRatio (int oversampling)=0
 Set the global oversampling ratio. More...
 
virtual int setOversamplingRatio (unsigned int chn_idx, int oversampling)=0
 Set the oversampling ratio for the given channel. More...
 
virtual double getSampleRate ()=0
 Retrieve the global sample rate. More...
 
virtual std::vector< double > getAvailableSampleRates ()=0
 getAvailableSampleRates More...
 
virtual double setSampleRate (double samplerate)=0
 Set the global sample rate. More...
 
virtual std::pair< double, double > getHysteresisRange (ANALOG_IN_CHANNEL chn)=0
 Retrieve the bounds of the analogical trigger's hysteresis for the given channel. More...
 
virtual double getFilterCompensation (double samplerate)=0
 Retrieve the filter compensation for the given sample rate. More...
 
virtual double getValueForRange (M2K_RANGE range)=0
 Retrieve the numeric value corresponding to the given range. More...
 
virtual double convertRawToVolts (unsigned int channel, short raw)=0
 Convert the raw value of a sample into volts. More...
 
virtual short convertVoltsToRaw (unsigned int channel, double voltage)=0
 Convert the voltage value of a sample into raw. More...
 
virtual unsigned int getNbChannels ()=0
 Retrieve the number of analogical channels. More...
 
virtual std::string getName ()=0
 Retrieve the name of the device. More...
 
virtual void enableChannel (unsigned int chnIdx, bool enable)=0
 Enable or disable the given channel. More...
 
virtual bool isChannelEnabled (unsigned int chnIdx)=0
 Retrieve the state of the given channel. More...
 
virtual void cancelAcquisition ()=0
 Cancel all buffer operations. More...
 
virtual void setKernelBuffersCount (unsigned int count)=0
 Set the kernel buffers to a specific value. More...
 
virtual unsigned int getKernelBuffersCount () const =0
 Get the number of kernel buffers. More...
 
virtual libm2k::M2kHardwareTriggergetTrigger ()=0
 Get the hardware trigger handler. More...
 
virtual struct IIO_OBJECTS getIioObjects ()=0
 Get access to IIO channels, buffers, devices and context. Can be used when debugging directly with libiio. More...
 
virtual void getSamples (std::vector< std::vector< double >> &data, unsigned int nb_samples)=0
 Retrieve a specific number of samples from each channel. More...
 
virtual std::string getChannelName (unsigned int channel)=0
 Get the channel name for each ADC channel. More...
 
virtual double getMaximumSamplerate ()=0
 Get the maximum samplerate for the ADC. More...
 
+

Detailed Description

+

Controls the analogical input compound.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classlibm2k_1_1analog_1_1_m2k_analog_out-members.html b/classlibm2k_1_1analog_1_1_m2k_analog_out-members.html new file mode 100644 index 00000000..21ed2939 --- /dev/null +++ b/classlibm2k_1_1analog_1_1_m2k_analog_out-members.html @@ -0,0 +1,125 @@ + + + + + + + +libm2k: Member List + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libm2k::analog::M2kAnalogOut Member List
+
+
+ +

This is the complete list of members for libm2k::analog::M2kAnalogOut, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cancelBuffer()=0libm2k::analog::M2kAnalogOutpure virtual
cancelBuffer(unsigned int chn)=0libm2k::analog::M2kAnalogOutpure virtual
convertRawToVolts(unsigned int channel, short raw)=0libm2k::analog::M2kAnalogOutpure virtual
convertVoltsToRaw(unsigned int channel, double voltage)=0libm2k::analog::M2kAnalogOutpure virtual
enableChannel(unsigned int chnIdx, bool enable)=0libm2k::analog::M2kAnalogOutpure virtual
getAvailableSampleRates(unsigned int chn)=0libm2k::analog::M2kAnalogOutpure virtual
getBufferRearmOnTrigger() const =0libm2k::analog::M2kAnalogOutpure virtual
getChannelName(unsigned int channel)=0libm2k::analog::M2kAnalogOutpure virtual
getCyclic(unsigned int chn)=0libm2k::analog::M2kAnalogOutpure virtual
getFilterCompensation(double samplerate)=0libm2k::analog::M2kAnalogOutpure virtual
getIioObjects()=0libm2k::analog::M2kAnalogOutpure virtual
getKernelBuffersCount(unsigned int chnIdx) const =0libm2k::analog::M2kAnalogOutpure virtual
getMaximumSamplerate(unsigned int chn_idx)=0libm2k::analog::M2kAnalogOutpure virtual
getNbChannels()=0libm2k::analog::M2kAnalogOutpure virtual
getOversamplingRatio()=0libm2k::analog::M2kAnalogOutpure virtual
getOversamplingRatio(unsigned int chn)=0libm2k::analog::M2kAnalogOutpure virtual
getSampleRate()=0libm2k::analog::M2kAnalogOutpure virtual
getSampleRate(unsigned int chn)=0libm2k::analog::M2kAnalogOutpure virtual
getScalingFactor(unsigned int chn)=0libm2k::analog::M2kAnalogOutpure virtual
getTrigger()=0libm2k::analog::M2kAnalogOutpure virtual
isChannelEnabled(unsigned int chnIdx)=0libm2k::analog::M2kAnalogOutpure virtual
isPushDone(unsigned int chnIdx) const =0libm2k::analog::M2kAnalogOutpure virtual
push(unsigned int chnIdx, std::vector< double > const &data)=0libm2k::analog::M2kAnalogOutpure virtual
push(std::vector< std::vector< double >> const &data)=0libm2k::analog::M2kAnalogOutpure virtual
pushBytes(unsigned int chnIdx, double *data, unsigned int nb_samples)=0libm2k::analog::M2kAnalogOutpure virtual
pushInterleaved(double *data, unsigned int nb_channels, unsigned int nb_samples)=0libm2k::analog::M2kAnalogOutpure virtual
pushRaw(unsigned int chnIdx, std::vector< short > const &data)=0libm2k::analog::M2kAnalogOutpure virtual
pushRaw(std::vector< std::vector< short >> const &data)=0libm2k::analog::M2kAnalogOutpure virtual
pushRawBytes(unsigned int chnIdx, short *data, unsigned int nb_samples)=0libm2k::analog::M2kAnalogOutpure virtual
pushRawInterleaved(short *data, unsigned int nb_channels, unsigned int nb_samples)=0libm2k::analog::M2kAnalogOutpure virtual
setBufferRearmOnTrigger(bool enable)=0libm2k::analog::M2kAnalogOutpure virtual
setCyclic(bool en)=0libm2k::analog::M2kAnalogOutpure virtual
setCyclic(unsigned int chn, bool en)=0libm2k::analog::M2kAnalogOutpure virtual
setKernelBuffersCount(unsigned int chnIdx, unsigned int count)=0libm2k::analog::M2kAnalogOutpure virtual
setOversamplingRatio(std::vector< int > oversampling_ratio)=0libm2k::analog::M2kAnalogOutpure virtual
setOversamplingRatio(unsigned int chn, int oversampling_ratio)=0libm2k::analog::M2kAnalogOutpure virtual
setSampleRate(std::vector< double > samplerates)=0libm2k::analog::M2kAnalogOutpure virtual
setSampleRate(unsigned int chn, double samplerate)=0libm2k::analog::M2kAnalogOutpure virtual
setVoltage(unsigned int chn_idx, double volts)=0libm2k::analog::M2kAnalogOutpure virtual
setVoltageRaw(unsigned int chn_idx, unsigned short raw)=0libm2k::analog::M2kAnalogOutpure virtual
stop()=0libm2k::analog::M2kAnalogOutpure virtual
stop(unsigned int chn)=0libm2k::analog::M2kAnalogOutpure virtual
+ + + + diff --git a/classlibm2k_1_1analog_1_1_m2k_analog_out.html b/classlibm2k_1_1analog_1_1_m2k_analog_out.html new file mode 100644 index 00000000..af9aa7e7 --- /dev/null +++ b/classlibm2k_1_1analog_1_1_m2k_analog_out.html @@ -0,0 +1,223 @@ + + + + + + + +libm2k: libm2k::analog::M2kAnalogOut Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +List of all members
+
+
libm2k::analog::M2kAnalogOut Class Referenceabstract
+
+
+ +

Controls the analogical output compound. + More...

+ +

#include <libm2k/analog/m2kanalogout.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual std::vector< int > getOversamplingRatio ()=0
 Retrieve the global oversampling ratio. More...
 
virtual int getOversamplingRatio (unsigned int chn)=0
 Retrieve the oversampling ratio for the given channel. More...
 
virtual std::vector< int > setOversamplingRatio (std::vector< int > oversampling_ratio)=0
 Set the value of the oversampling ratio for each channel. More...
 
virtual int setOversamplingRatio (unsigned int chn, int oversampling_ratio)=0
 Set the oversampling ratio for the given channel. More...
 
virtual std::vector< double > getSampleRate ()=0
 Retrieve the sample rate of both DACs. More...
 
virtual double getSampleRate (unsigned int chn)=0
 Retrieve the sample rate for the given channel. More...
 
virtual std::vector< double > getAvailableSampleRates (unsigned int chn)=0
 getAvailableSampleRates More...
 
virtual std::vector< double > setSampleRate (std::vector< double > samplerates)=0
 Set the sample rate for both channels. More...
 
virtual double setSampleRate (unsigned int chn, double samplerate)=0
 Set the sample rate for the given channel. More...
 
virtual void setCyclic (bool en)=0
 Enable or disable the cyclic mode for all digital channels. More...
 
virtual void setCyclic (unsigned int chn, bool en)=0
 Enable or disable the cyclic mode for all digital channels. More...
 
virtual bool getCyclic (unsigned int chn)=0
 Retrieve the value of the cyclic mode. More...
 
virtual double getScalingFactor (unsigned int chn)=0
 Retrieve the scaling factor for the given channel. More...
 
virtual double getFilterCompensation (double samplerate)=0
 Retrieve the filter compensation for the given sample rate. More...
 
virtual void pushBytes (unsigned int chnIdx, double *data, unsigned int nb_samples)=0
 Send the samples to the given channel. More...
 
virtual void pushRawBytes (unsigned int chnIdx, short *data, unsigned int nb_samples)=0
 Send the samples to the given channel. More...
 
virtual void pushInterleaved (double *data, unsigned int nb_channels, unsigned int nb_samples)=0
 Send samples to all the channels. More...
 
virtual void pushRawInterleaved (short *data, unsigned int nb_channels, unsigned int nb_samples)=0
 Send samples to all the channels. More...
 
virtual void push (unsigned int chnIdx, std::vector< double > const &data)=0
 Send the samples to the given channel. More...
 
virtual void pushRaw (unsigned int chnIdx, std::vector< short > const &data)=0
 Send the samples to the given channel. More...
 
virtual void push (std::vector< std::vector< double >> const &data)=0
 Send samples to channels. More...
 
virtual void pushRaw (std::vector< std::vector< short >> const &data)=0
 Send samples to channels. More...
 
virtual void stop ()=0
 Stop all channels from sending the signals. More...
 
virtual void stop (unsigned int chn)=0
 Stop the given channels from sending the signals. More...
 
virtual void cancelBuffer ()=0
 Cancel all buffer operations of enabled channels. More...
 
virtual void cancelBuffer (unsigned int chn)=0
 Cancel all buffer operations of the given channel. More...
 
virtual void enableChannel (unsigned int chnIdx, bool enable)=0
 Enable or disable the given digital channel. More...
 
virtual bool isChannelEnabled (unsigned int chnIdx)=0
 Check if the given channel is enabled. More...
 
virtual bool isPushDone (unsigned int chnIdx) const =0
 Check if the generation of the signal (only for non-cyclic buffer) is done. More...
 
virtual void setKernelBuffersCount (unsigned int chnIdx, unsigned int count)=0
 Set the kernel buffers to a specific value. More...
 
virtual unsigned int getKernelBuffersCount (unsigned int chnIdx) const =0
 Get the number of kernel buffers. More...
 
virtual short convertVoltsToRaw (unsigned int channel, double voltage)=0
 Convert the volts value of a sample into raw. More...
 
virtual double convertRawToVolts (unsigned int channel, short raw)=0
 Convert the raw value of a sample into volts. More...
 
virtual struct IIO_OBJECTS getIioObjects ()=0
 Get access to IIO channels, buffers, devices and context. More...
 
virtual unsigned int getNbChannels ()=0
 Retrieve the number of analogical channels. More...
 
virtual std::string getChannelName (unsigned int channel)=0
 Get the channel name for each DAC channel. More...
 
virtual double getMaximumSamplerate (unsigned int chn_idx)=0
 Get the maximum samplerate for the DAC. More...
 
virtual unsigned short setVoltage (unsigned int chn_idx, double volts)=0
 Sets the voltage output of the DAC channel. More...
 
virtual unsigned short setVoltageRaw (unsigned int chn_idx, unsigned short raw)=0
 Sets the raw output of the DAC channel. More...
 
virtual libm2k::M2kHardwareTriggergetTrigger ()=0
 Get the hardware trigger handler. More...
 
virtual void setBufferRearmOnTrigger (bool enable)=0
 Allows sequential output of multiple buffers with each trigger event. More...
 
virtual bool getBufferRearmOnTrigger () const =0
 Retrieve the value of the attribute that controls buffer rearm on trigger. More...
 
+

Detailed Description

+

Controls the analogical output compound.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classlibm2k_1_1analog_1_1_m2k_power_supply-members.html b/classlibm2k_1_1analog_1_1_m2k_power_supply-members.html new file mode 100644 index 00000000..d7b6b159 --- /dev/null +++ b/classlibm2k_1_1analog_1_1_m2k_power_supply-members.html @@ -0,0 +1,88 @@ + + + + + + + +libm2k: Member List + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libm2k::analog::M2kPowerSupply Member List
+
+
+ +

This is the complete list of members for libm2k::analog::M2kPowerSupply, including all inherited members.

+ + + + + + +
anyChannelEnabled()=0libm2k::analog::M2kPowerSupplypure virtual
enableAll(bool en)=0libm2k::analog::M2kPowerSupplypure virtual
enableChannel(unsigned int chn, bool en)=0libm2k::analog::M2kPowerSupplypure virtual
pushChannel(unsigned int chn, double value, bool calibrated=true)=0libm2k::analog::M2kPowerSupplypure virtual
readChannel(unsigned int chn, bool calibrated=true)=0libm2k::analog::M2kPowerSupplypure virtual
+ + + + diff --git a/classlibm2k_1_1analog_1_1_m2k_power_supply.html b/classlibm2k_1_1analog_1_1_m2k_power_supply.html new file mode 100644 index 00000000..3424279c --- /dev/null +++ b/classlibm2k_1_1analog_1_1_m2k_power_supply.html @@ -0,0 +1,112 @@ + + + + + + + +libm2k: libm2k::analog::M2kPowerSupply Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +List of all members
+
+
libm2k::analog::M2kPowerSupply Class Referenceabstract
+
+
+ +

Controls the power supply. + More...

+ +

#include <libm2k/analog/m2kpowersupply.hpp>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual void enableChannel (unsigned int chn, bool en)=0
 Enable or disable the given channel. More...
 
virtual void enableAll (bool en)=0
 Enable or disable all channels. More...
 
virtual double readChannel (unsigned int chn, bool calibrated=true)=0
 Retrieve the value of a given channel. More...
 
virtual void pushChannel (unsigned int chn, double value, bool calibrated=true)=0
 Set the voltage for the given channel. More...
 
virtual bool anyChannelEnabled ()=0
 Check if there is at least one enabled channel. More...
 
+

Detailed Description

+

Controls the power supply.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classlibm2k_1_1context_1_1_context-members.html b/classlibm2k_1_1context_1_1_context-members.html new file mode 100644 index 00000000..bac458d0 --- /dev/null +++ b/classlibm2k_1_1context_1_1_context-members.html @@ -0,0 +1,100 @@ + + + + + + + +libm2k: Member List + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libm2k::context::Context Member List
+
+
+ +

This is the complete list of members for libm2k::context::Context, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
getAllDevices() const =0libm2k::context::Contextpure virtual
getAllDmm()=0libm2k::context::Contextpure virtual
getAvailableContextAttributes()=0libm2k::context::Contextpure virtual
getContextAttributeValue(std::string attr)=0libm2k::context::Contextpure virtual
getContextDescription()=0libm2k::context::Contextpure virtual
getDMM(unsigned int index)=0libm2k::context::Contextpure virtual
getDMM(std::string name)=0libm2k::context::Contextpure virtual
getDmmCount()=0libm2k::context::Contextpure virtual
getFirmwareVersion()=0libm2k::context::Contextpure virtual
getIioContext()=0libm2k::context::Contextpure virtual
getIioContextVersion()=0libm2k::context::Contextpure virtual
getSerialNumber()=0libm2k::context::Contextpure virtual
getUri()=0libm2k::context::Contextpure virtual
logAllAttributes() const =0libm2k::context::Contextpure virtual
setTimeout(unsigned int timeout)=0libm2k::context::Contextpure virtual
toGeneric()=0libm2k::context::Contextpure virtual
toM2k()=0libm2k::context::Contextpure virtual
+ + + + diff --git a/classlibm2k_1_1context_1_1_context.html b/classlibm2k_1_1context_1_1_context.html new file mode 100644 index 00000000..f959567b --- /dev/null +++ b/classlibm2k_1_1context_1_1_context.html @@ -0,0 +1,155 @@ + + + + + + + +libm2k: libm2k::context::Context Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +List of all members
+
+
libm2k::context::Context Class Referenceabstract
+
+
+ +

Controls the IIO context. + More...

+ +

#include <libm2k/context.hpp>

+
+Inheritance diagram for libm2k::context::Context:
+
+
Inheritance graph
+ + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual std::string getUri ()=0
 Get the URI of the current context. More...
 
virtual libm2k::analog::DMMgetDMM (unsigned int index)=0
 Retrieve the DMM object at a certain index. More...
 
virtual libm2k::analog::DMMgetDMM (std::string name)=0
 Retrieve the DMM object which has the provided name. More...
 
virtual std::vector< libm2k::analog::DMM * > getAllDmm ()=0
 Retrieve all the DMM objects. More...
 
virtual std::vector< std::string > getAvailableContextAttributes ()=0
 Retrieve all the available context attributes. More...
 
virtual std::string getContextAttributeValue (std::string attr)=0
 Retrieve the value of one context attribute. More...
 
virtual std::string getContextDescription ()=0
 Retrieve a detailed context description. More...
 
virtual std::string getSerialNumber ()=0
 Retrieve the current context serial number. More...
 
virtual std::unordered_set< std::string > getAllDevices () const =0
 Retrieve all the available devices. More...
 
virtual void logAllAttributes () const =0
 Log all the attributes. More...
 
virtual M2ktoM2k ()=0
 Convert the current context to M2k context, if possible. More...
 
virtual Generic * toGeneric ()=0
 Convert the current context to Generic context, if possible. More...
 
virtual unsigned int getDmmCount ()=0
 Retrieve the number of DMM objects. More...
 
virtual std::string getFirmwareVersion ()=0
 Retrieve the firmware version of the current context. More...
 
virtual const struct libm2k::IIO_CONTEXT_VERSION getIioContextVersion ()=0
 
virtual struct iio_context * getIioContext ()=0
 
virtual void setTimeout (unsigned int timeout)=0
 Set a timeout for I/O operations. More...
 
+

Detailed Description

+

Controls the IIO context.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classlibm2k_1_1context_1_1_context__inherit__graph.map b/classlibm2k_1_1context_1_1_context__inherit__graph.map new file mode 100644 index 00000000..2fda013e --- /dev/null +++ b/classlibm2k_1_1context_1_1_context__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classlibm2k_1_1context_1_1_context__inherit__graph.md5 b/classlibm2k_1_1context_1_1_context__inherit__graph.md5 new file mode 100644 index 00000000..57cfa44c --- /dev/null +++ b/classlibm2k_1_1context_1_1_context__inherit__graph.md5 @@ -0,0 +1 @@ +4588cb8527620de8ee57a2de15ea603b \ No newline at end of file diff --git a/classlibm2k_1_1context_1_1_context__inherit__graph.png b/classlibm2k_1_1context_1_1_context__inherit__graph.png new file mode 100644 index 00000000..5a80ee7c Binary files /dev/null and b/classlibm2k_1_1context_1_1_context__inherit__graph.png differ diff --git a/classlibm2k_1_1context_1_1_m2k-members.html b/classlibm2k_1_1context_1_1_m2k-members.html new file mode 100644 index 00000000..c8a54fed --- /dev/null +++ b/classlibm2k_1_1context_1_1_m2k-members.html @@ -0,0 +1,125 @@ + + + + + + + +libm2k: Member List + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libm2k::context::M2k Member List
+
+
+ +

This is the complete list of members for libm2k::context::M2k, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
calibrateADC()=0libm2k::context::M2kpure virtual
calibrateDAC()=0libm2k::context::M2kpure virtual
calibrateFromContext()=0libm2k::context::M2kpure virtual
getAdcCalibrationGain(unsigned int chn)=0libm2k::context::M2kpure virtual
getAdcCalibrationOffset(unsigned int chn)=0libm2k::context::M2kpure virtual
getAllDevices() const =0libm2k::context::Contextpure virtual
getAllDmm()=0libm2k::context::Contextpure virtual
getAnalogIn()=0libm2k::context::M2kpure virtual
getAnalogIn(std::string dev_name)=0libm2k::context::M2kpure virtual
getAnalogOut()=0libm2k::context::M2kpure virtual
getAvailableContextAttributes()=0libm2k::context::Contextpure virtual
getContextAttributeValue(std::string attr)=0libm2k::context::Contextpure virtual
getContextDescription()=0libm2k::context::Contextpure virtual
getDacCalibrationGain(unsigned int chn)=0libm2k::context::M2kpure virtual
getDacCalibrationOffset(unsigned int chn)=0libm2k::context::M2kpure virtual
getDigital()=0libm2k::context::M2kpure virtual
getDMM(unsigned int index)=0libm2k::context::Contextpure virtual
getDMM(std::string name)=0libm2k::context::Contextpure virtual
getDmmCount()=0libm2k::context::Contextpure virtual
getFirmwareVersion()=0libm2k::context::Contextpure virtual
getIioContext()=0libm2k::context::Contextpure virtual
getIioContextVersion()=0libm2k::context::Contextpure virtual
getLed()=0libm2k::context::M2kpure virtual
getLUT()=0libm2k::context::M2kpure virtual
getPowerSupply()=0libm2k::context::M2kpure virtual
getSerialNumber()=0libm2k::context::Contextpure virtual
getUri()=0libm2k::context::Contextpure virtual
hasContextCalibration()=0libm2k::context::M2kpure virtual
hasMixedSignal()=0libm2k::context::M2kpure virtual
isCalibrated()=0libm2k::context::M2kpure virtual
logAllAttributes() const =0libm2k::context::Contextpure virtual
reset()=0libm2k::context::M2kpure virtual
setAdcCalibrationGain(unsigned int chn, double gain)=0libm2k::context::M2kpure virtual
setAdcCalibrationOffset(unsigned int chn, int offset)=0libm2k::context::M2kpure virtual
setDacCalibrationGain(unsigned int chn, double gain)=0libm2k::context::M2kpure virtual
setDacCalibrationOffset(unsigned int chn, int offset)=0libm2k::context::M2kpure virtual
setLed(bool on)=0libm2k::context::M2kpure virtual
setTimeout(unsigned int timeout)=0libm2k::context::Contextpure virtual
startMixedSignalAcquisition(unsigned int nb_samples)=0libm2k::context::M2kpure virtual
stopMixedSignalAcquisition()=0libm2k::context::M2kpure virtual
toGeneric()=0libm2k::context::Contextpure virtual
toM2k()=0libm2k::context::Contextpure virtual
+ + + + diff --git a/classlibm2k_1_1context_1_1_m2k.html b/classlibm2k_1_1context_1_1_m2k.html new file mode 100644 index 00000000..467e10e8 --- /dev/null +++ b/classlibm2k_1_1context_1_1_m2k.html @@ -0,0 +1,240 @@ + + + + + + + +libm2k: libm2k::context::M2k Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +List of all members
+
+
libm2k::context::M2k Class Referenceabstract
+
+
+ +

Controls the ADALM2000. + More...

+ +

#include <libm2k/m2k.hpp>

+
+Inheritance diagram for libm2k::context::M2k:
+
+
Inheritance graph
+ + + + +
[legend]
+
+Collaboration diagram for libm2k::context::M2k:
+
+
Collaboration graph
+ + + + +
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual void reset ()=0
 Reset the M2K device to default settings: More...
 
virtual bool calibrateADC ()=0
 Calibrate the ADC. More...
 
virtual bool calibrateDAC ()=0
 Calibrate the DAC. More...
 
virtual double calibrateFromContext ()=0
 Calibrate both ADC and DACs using predefined calibration values located in context. More...
 
virtual libm2k::digital::M2kDigitalgetDigital ()=0
 Retrieve the Digital object. More...
 
virtual libm2k::analog::M2kPowerSupplygetPowerSupply ()=0
 Retrieve the PowerSupply object. More...
 
virtual libm2k::analog::M2kAnalogIngetAnalogIn ()=0
 Retrieve the AnalogIn object. More...
 
virtual libm2k::analog::M2kAnalogIngetAnalogIn (std::string dev_name)=0
 Retrieve the AnalogIn object of a device. More...
 
virtual libm2k::analog::M2kAnalogOutgetAnalogOut ()=0
 Retrieve the AnalogOut object. More...
 
virtual bool hasMixedSignal ()=0
 Check if the mixed signal acquisition is available on the current firmware version. More...
 
virtual void startMixedSignalAcquisition (unsigned int nb_samples)=0
 Initiate the mixed acquisition. More...
 
virtual void stopMixedSignalAcquisition ()=0
 Stop the mixed acquisition. More...
 
virtual int getDacCalibrationOffset (unsigned int chn)=0
 Get the calibration offset of the DAC. More...
 
virtual double getDacCalibrationGain (unsigned int chn)=0
 Get the calibration gain of the DAC. More...
 
virtual int getAdcCalibrationOffset (unsigned int chn)=0
 Get the calibration offset of the ADC. More...
 
virtual double getAdcCalibrationGain (unsigned int chn)=0
 Get the calibration gain of the ADC. More...
 
virtual void setDacCalibrationOffset (unsigned int chn, int offset)=0
 Set the calibration offset of the DAC. More...
 
virtual void setDacCalibrationGain (unsigned int chn, double gain)=0
 Set the calibration gain of the DAC. More...
 
virtual void setAdcCalibrationOffset (unsigned int chn, int offset)=0
 Set the calibration offset of the ADC. More...
 
virtual void setAdcCalibrationGain (unsigned int chn, double gain)=0
 Set the calibration gain of the ADC. More...
 
virtual bool hasContextCalibration ()=0
 Check if the calibration based on temperature can be performed. More...
 
virtual std::map< double, std::shared_ptr< struct CALIBRATION_PARAMETERS > > & getLUT ()=0
 Retrieve the predefined calibration parameter. More...
 
virtual bool isCalibrated ()=0
 Check if the board was calibrated. More...
 
virtual void setLed (bool on)=0
 Turn on or off the board's led. More...
 
virtual bool getLed ()=0
 Retrieve the state of the led. More...
 
- Public Member Functions inherited from libm2k::context::Context
virtual std::string getUri ()=0
 Get the URI of the current context. More...
 
virtual libm2k::analog::DMMgetDMM (unsigned int index)=0
 Retrieve the DMM object at a certain index. More...
 
virtual libm2k::analog::DMMgetDMM (std::string name)=0
 Retrieve the DMM object which has the provided name. More...
 
virtual std::vector< libm2k::analog::DMM * > getAllDmm ()=0
 Retrieve all the DMM objects. More...
 
virtual std::vector< std::string > getAvailableContextAttributes ()=0
 Retrieve all the available context attributes. More...
 
virtual std::string getContextAttributeValue (std::string attr)=0
 Retrieve the value of one context attribute. More...
 
virtual std::string getContextDescription ()=0
 Retrieve a detailed context description. More...
 
virtual std::string getSerialNumber ()=0
 Retrieve the current context serial number. More...
 
virtual std::unordered_set< std::string > getAllDevices () const =0
 Retrieve all the available devices. More...
 
virtual void logAllAttributes () const =0
 Log all the attributes. More...
 
virtual M2ktoM2k ()=0
 Convert the current context to M2k context, if possible. More...
 
virtual Generic * toGeneric ()=0
 Convert the current context to Generic context, if possible. More...
 
virtual unsigned int getDmmCount ()=0
 Retrieve the number of DMM objects. More...
 
virtual std::string getFirmwareVersion ()=0
 Retrieve the firmware version of the current context. More...
 
virtual const struct libm2k::IIO_CONTEXT_VERSION getIioContextVersion ()=0
 
virtual struct iio_context * getIioContext ()=0
 
virtual void setTimeout (unsigned int timeout)=0
 Set a timeout for I/O operations. More...
 
+

Detailed Description

+

Controls the ADALM2000.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classlibm2k_1_1context_1_1_m2k__coll__graph.map b/classlibm2k_1_1context_1_1_m2k__coll__graph.map new file mode 100644 index 00000000..ff2054ca --- /dev/null +++ b/classlibm2k_1_1context_1_1_m2k__coll__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classlibm2k_1_1context_1_1_m2k__coll__graph.md5 b/classlibm2k_1_1context_1_1_m2k__coll__graph.md5 new file mode 100644 index 00000000..5adcfb85 --- /dev/null +++ b/classlibm2k_1_1context_1_1_m2k__coll__graph.md5 @@ -0,0 +1 @@ +d16737568220bb6185b42b326fa38aab \ No newline at end of file diff --git a/classlibm2k_1_1context_1_1_m2k__coll__graph.png b/classlibm2k_1_1context_1_1_m2k__coll__graph.png new file mode 100644 index 00000000..af4ca4e4 Binary files /dev/null and b/classlibm2k_1_1context_1_1_m2k__coll__graph.png differ diff --git a/classlibm2k_1_1context_1_1_m2k__inherit__graph.map b/classlibm2k_1_1context_1_1_m2k__inherit__graph.map new file mode 100644 index 00000000..ff2054ca --- /dev/null +++ b/classlibm2k_1_1context_1_1_m2k__inherit__graph.map @@ -0,0 +1,4 @@ + + + + diff --git a/classlibm2k_1_1context_1_1_m2k__inherit__graph.md5 b/classlibm2k_1_1context_1_1_m2k__inherit__graph.md5 new file mode 100644 index 00000000..f4eed480 --- /dev/null +++ b/classlibm2k_1_1context_1_1_m2k__inherit__graph.md5 @@ -0,0 +1 @@ +9ad8e316105f6b3e568bcbac14c98e61 \ No newline at end of file diff --git a/classlibm2k_1_1context_1_1_m2k__inherit__graph.png b/classlibm2k_1_1context_1_1_m2k__inherit__graph.png new file mode 100644 index 00000000..af4ca4e4 Binary files /dev/null and b/classlibm2k_1_1context_1_1_m2k__inherit__graph.png differ diff --git a/classlibm2k_1_1digital_1_1_m2k_digital-members.html b/classlibm2k_1_1digital_1_1_m2k_digital-members.html new file mode 100644 index 00000000..2ff8ee70 --- /dev/null +++ b/classlibm2k_1_1digital_1_1_m2k_digital-members.html @@ -0,0 +1,129 @@ + + + + + + + +libm2k: Member List + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libm2k::digital::M2kDigital Member List
+
+
+ +

This is the complete list of members for libm2k::digital::M2kDigital, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
anyChannelEnabled(DIO_DIRECTION dir)=0libm2k::digital::M2kDigitalpure virtual
cancelAcquisition()=0libm2k::digital::M2kDigitalpure virtual
cancelBufferOut()=0libm2k::digital::M2kDigitalpure virtual
enableAllOut(bool enable)=0libm2k::digital::M2kDigitalpure virtual
enableChannel(unsigned int index, bool enable)=0libm2k::digital::M2kDigitalpure virtual
enableChannel(DIO_CHANNEL index, bool enable)=0libm2k::digital::M2kDigitalpure virtual
getCyclic()=0libm2k::digital::M2kDigitalpure virtual
getDirection(DIO_CHANNEL index)=0libm2k::digital::M2kDigitalpure virtual
getIioObjects()=0libm2k::digital::M2kDigitalpure virtual
getNbChannelsIn()=0libm2k::digital::M2kDigitalpure virtual
getNbChannelsOut()=0libm2k::digital::M2kDigitalpure virtual
getOutputMode(DIO_CHANNEL chn)=0libm2k::digital::M2kDigitalpure virtual
getOutputMode(unsigned int chn)=0libm2k::digital::M2kDigitalpure virtual
getSampleRateIn()=0libm2k::digital::M2kDigitalpure virtual
getSampleRateOut()=0libm2k::digital::M2kDigitalpure virtual
getSamples(unsigned int nb_samples)=0libm2k::digital::M2kDigitalpure virtual
getSamples(std::vector< unsigned short > &data, unsigned int nb_samples)=0libm2k::digital::M2kDigitalpure virtual
getSamplesP(unsigned int nb_samples)=0libm2k::digital::M2kDigitalpure virtual
getTrigger()=0libm2k::digital::M2kDigitalpure virtual
getValueRaw(DIO_CHANNEL index)=0libm2k::digital::M2kDigitalpure virtual
getValueRaw(unsigned int index)=0libm2k::digital::M2kDigitalpure virtual
isClocksourceExternal()=0libm2k::digital::M2kDigitalpure virtual
push(std::vector< unsigned short > const &data)=0libm2k::digital::M2kDigitalpure virtual
push(unsigned short *data, unsigned int nb_samples)=0libm2k::digital::M2kDigitalpure virtual
resetRateMux()=0libm2k::digital::M2kDigitalpure virtual
setCyclic(bool cyclic)=0libm2k::digital::M2kDigitalpure virtual
setDirection(unsigned short mask)=0libm2k::digital::M2kDigitalpure virtual
setDirection(unsigned int index, DIO_DIRECTION dir)=0libm2k::digital::M2kDigitalpure virtual
setDirection(unsigned int index, bool dir)=0libm2k::digital::M2kDigitalpure virtual
setDirection(DIO_CHANNEL index, bool dir)=0libm2k::digital::M2kDigitalpure virtual
setDirection(DIO_CHANNEL index, DIO_DIRECTION dir)=0libm2k::digital::M2kDigitalpure virtual
setExternalClocksource(bool external)=0libm2k::digital::M2kDigitalpure virtual
setKernelBuffersCountIn(unsigned int count)=0libm2k::digital::M2kDigitalpure virtual
setKernelBuffersCountOut(unsigned int count)=0libm2k::digital::M2kDigitalpure virtual
setOutputMode(DIO_CHANNEL chn, DIO_MODE mode)=0libm2k::digital::M2kDigitalpure virtual
setOutputMode(unsigned int chn, DIO_MODE mode)=0libm2k::digital::M2kDigitalpure virtual
setRateMux()=0libm2k::digital::M2kDigitalpure virtual
setSampleRateIn(double samplerate)=0libm2k::digital::M2kDigitalpure virtual
setSampleRateOut(double samplerate)=0libm2k::digital::M2kDigitalpure virtual
setValueRaw(DIO_CHANNEL index, DIO_LEVEL level)=0libm2k::digital::M2kDigitalpure virtual
setValueRaw(unsigned int index, DIO_LEVEL level)=0libm2k::digital::M2kDigitalpure virtual
setValueRaw(DIO_CHANNEL index, bool level)=0libm2k::digital::M2kDigitalpure virtual
startAcquisition(unsigned int nb_samples)=0libm2k::digital::M2kDigitalpure virtual
stopAcquisition()=0libm2k::digital::M2kDigitalpure virtual
stopBufferOut()=0libm2k::digital::M2kDigitalpure virtual
~M2kDigital() (defined in libm2k::digital::M2kDigital)libm2k::digital::M2kDigitalinlinevirtual
+ + + + diff --git a/classlibm2k_1_1digital_1_1_m2k_digital.html b/classlibm2k_1_1digital_1_1_m2k_digital.html new file mode 100644 index 00000000..1623c544 --- /dev/null +++ b/classlibm2k_1_1digital_1_1_m2k_digital.html @@ -0,0 +1,234 @@ + + + + + + + +libm2k: libm2k::digital::M2kDigital Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Public Member Functions | +List of all members
+
+
libm2k::digital::M2kDigital Class Referenceabstract
+
+
+ +

Controls the digital input and output segment. + More...

+ +

#include <libm2k/digital/m2kdigital.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual void setDirection (unsigned short mask)=0
 Set the direction for all digital channels. More...
 
virtual void setDirection (unsigned int index, DIO_DIRECTION dir)=0
 Set the direction of the given digital channel. More...
 
virtual void setDirection (unsigned int index, bool dir)=0
 Set the direction of the given digital channel. More...
 
virtual void setDirection (DIO_CHANNEL index, bool dir)=0
 Set the direction of the given digital channel. More...
 
virtual void setDirection (DIO_CHANNEL index, DIO_DIRECTION dir)=0
 Set the direction of the given digital channel. More...
 
virtual DIO_DIRECTION getDirection (DIO_CHANNEL index)=0
 Retrieve the direction of the given digital channel. More...
 
virtual void setValueRaw (DIO_CHANNEL index, DIO_LEVEL level)=0
 Set the raw value of a given digital channel. More...
 
virtual void push (std::vector< unsigned short > const &data)=0
 Send the samples to all digital channels. More...
 
virtual void push (unsigned short *data, unsigned int nb_samples)=0
 Send the samples to all digital channels. More...
 
virtual void setValueRaw (unsigned int index, DIO_LEVEL level)=0
 Set the raw value of a given digital channel. More...
 
virtual void setValueRaw (DIO_CHANNEL index, bool level)=0
 Set the raw value of a given digital channel. More...
 
virtual DIO_LEVEL getValueRaw (DIO_CHANNEL index)=0
 Retrieve the raw value of the given digital channel. More...
 
virtual DIO_LEVEL getValueRaw (unsigned int index)=0
 Retrieve the raw value of the given digital channel. More...
 
+virtual void stopBufferOut ()=0
 Stop all digital channels from sending the signals.
 
virtual void startAcquisition (unsigned int nb_samples)=0
 Create the buffer for all channels and start the acquisition. More...
 
+virtual void stopAcquisition ()=0
 Destroy the buffer and stop the acquisition.
 
virtual void cancelAcquisition ()=0
 Cancel all rx-buffer operations. More...
 
virtual void cancelBufferOut ()=0
 Cancel all tx-buffer operations. More...
 
virtual std::vector< unsigned short > getSamples (unsigned int nb_samples)=0
 Retrieve a specific number of samples. More...
 
virtual const unsigned short * getSamplesP (unsigned int nb_samples)=0
 Retrieve a specific number of samples. More...
 
virtual void enableChannel (unsigned int index, bool enable)=0
 Enable or disable the given digital channel. More...
 
virtual void enableChannel (DIO_CHANNEL index, bool enable)=0
 Enable or disable the given digital channel. More...
 
virtual void enableAllOut (bool enable)=0
 Enable or disable all output channels. More...
 
virtual bool anyChannelEnabled (DIO_DIRECTION dir)=0
 Check if there is at least one channel enabled. More...
 
virtual void setOutputMode (DIO_CHANNEL chn, DIO_MODE mode)=0
 Set the output mode for the given digital channel. More...
 
virtual void setOutputMode (unsigned int chn, DIO_MODE mode)=0
 Set the output mode for the given digital channel. More...
 
virtual DIO_MODE getOutputMode (DIO_CHANNEL chn)=0
 Retrieve the output mode for the given digital channel. More...
 
virtual DIO_MODE getOutputMode (unsigned int chn)=0
 Retrieve the output mode for the given digital channel. More...
 
virtual double setSampleRateIn (double samplerate)=0
 Set the sample rate for all digital input channels. More...
 
virtual double setSampleRateOut (double samplerate)=0
 Set the sample rate for all digital output channels. More...
 
virtual double getSampleRateIn ()=0
 Retrieve the sample rate of all digital input channels. More...
 
virtual double getSampleRateOut ()=0
 Retrieve the sample rate of all digital output channels. More...
 
virtual bool getCyclic ()=0
 Retrieve the value of the cyclic mode. More...
 
virtual void setCyclic (bool cyclic)=0
 Enable or disable the cyclic mode for all digital channels. More...
 
virtual libm2k::M2kHardwareTriggergetTrigger ()=0
 Get the hardware trigger handler. More...
 
virtual void setKernelBuffersCountIn (unsigned int count)=0
 Set the kernel buffers for input to a specific value. More...
 
virtual void setKernelBuffersCountOut (unsigned int count)=0
 Set the kernel buffers for output to a specific value. More...
 
virtual struct IIO_OBJECTS getIioObjects ()=0
 Get access to IIO channels, buffers, devices and context. Can be used when debugging directly with libiio. More...
 
virtual unsigned int getNbChannelsIn ()=0
 Retrieve the number of digital input channels. More...
 
virtual unsigned int getNbChannelsOut ()=0
 Retrieve the number of digital output channels. More...
 
virtual void getSamples (std::vector< unsigned short > &data, unsigned int nb_samples)=0
 Retrieve a specific number of samples. More...
 
virtual void setRateMux ()=0
 Force the digital interface to use the analogical rate. More...
 
virtual void resetRateMux ()=0
 Reset the digital rate to default. More...
 
virtual void setExternalClocksource (bool external)=0
 Set the clocksource. More...
 
virtual bool isClocksourceExternal ()=0
 Get the current clocksource. More...
 
+

Detailed Description

+

Controls the digital input and output segment.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/closed.png b/closed.png new file mode 100644 index 00000000..98cc2c90 Binary files /dev/null and b/closed.png differ diff --git a/context_8hpp_source.html b/context_8hpp_source.html new file mode 100644 index 00000000..32935942 --- /dev/null +++ b/context_8hpp_source.html @@ -0,0 +1,85 @@ + + + + + + + +libm2k: context.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
context.hpp
+
+
+
1 /*
2  * Copyright (c) 2019 Analog Devices Inc.
3  *
4  * This file is part of libm2k
5  * (see http://www.github.com/analogdevicesinc/libm2k).
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as published by
9  * the Free Software Foundation, either version 2.1 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef CONTEXT_HPP
23 #define CONTEXT_HPP
24 
25 #include <libm2k/m2kglobal.hpp>
26 #include <libm2k/utils/enums.hpp>
27 #include <libm2k/utils/utils.hpp>
28 #include <libm2k/enums.hpp>
29 #include <string>
30 #include <vector>
31 #include <memory>
32 
33 extern "C" {
34  struct iio_context;
35 }
36 
37 namespace libm2k {
38 namespace analog {
39  class DMM;
40 }
41 
42 namespace context {
43 class M2k;
44 class Generic;
45 
52 class LIBM2K_API Context {
53 public:
57  virtual ~Context() {}
58 
59 
63  virtual void reset() = 0;
64 
65 
69  virtual void deinitialize() = 0;
70 
71 
76  virtual std::string getUri() = 0;
77 
78 
85  virtual libm2k::analog::DMM* getDMM(unsigned int index) = 0;
86 
87 
94  virtual libm2k::analog::DMM* getDMM(std::string name) = 0;
95 
96 
101  virtual std::vector<libm2k::analog::DMM*> getAllDmm() = 0;
102 
103 
108  virtual std::vector<std::string> getAvailableContextAttributes() = 0;
109 
110 
117  virtual std::string getContextAttributeValue(std::string attr) = 0;
118 
119 
124  virtual std::string getContextDescription() = 0;
125 
126 
131  virtual std::string getSerialNumber() = 0;
132 
133 
138  virtual std::unordered_set<std::string> getAllDevices() const = 0;
139 
140 
145  virtual void logAllAttributes() const = 0;
146 
147 
153  virtual M2k* toM2k() = 0;
154 
155 
161  virtual Generic* toGeneric() = 0;
162 
163 
168  virtual unsigned int getDmmCount() = 0;
169 
170 
175  virtual std::string getFirmwareVersion() = 0;
176 
177 
182  virtual const struct libm2k::IIO_CONTEXT_VERSION getIioContextVersion() = 0;
183 
184 
189  virtual struct iio_context *getIioContext() = 0;
190 
191 
196  virtual void setTimeout(unsigned int timeout) = 0;
197 
198 };
199 }
200 }
201 
202 #endif // CONTEXT_HPP
Controls the digital multimeter.
Definition: dmm.hpp:45
+
Controls the ADALM2000.
Definition: m2k.hpp:54
+
The version of the backend.
Definition: enums.hpp:261
+
Controls the IIO context.
Definition: context.hpp:52
+
Generic M2K enumerations.
+
+ + + + diff --git a/contextbuilder_8hpp_source.html b/contextbuilder_8hpp_source.html new file mode 100644 index 00000000..e50dca71 --- /dev/null +++ b/contextbuilder_8hpp_source.html @@ -0,0 +1,88 @@ + + + + + + + +libm2k: contextbuilder.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
contextbuilder.hpp
+
+
+
1 /*
2  * Copyright (c) 2019 Analog Devices Inc.
3  *
4  * This file is part of libm2k
5  * (see http://www.github.com/analogdevicesinc/libm2k).
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as published by
9  * the Free Software Foundation, either version 2.1 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef DEVICEBUILDER_HPP
23 #define DEVICEBUILDER_HPP
24 
25 #include <vector>
26 #include <string>
27 #include <libm2k/m2kglobal.hpp>
28 #include <libm2k/context.hpp>
29 #include <libm2k/enums.hpp>
30 #include <unordered_set>
31 #include <map>
32 
33 enum ContextTypes {
34  CtxFMCOMMS,
35  CtxM2K,
36  Other
37 };
38 
39 namespace libm2k {
40 
41 
42 namespace context {
43 
47 class LIBM2K_API ContextBuilder {
48  static std::vector<Context*> s_connectedDevices;
49 public:
53  explicit ContextBuilder();
57  ~ContextBuilder();
61  static std::vector<struct libm2k::CONTEXT_INFO*> getContextsInfo();
65  static std::vector<std::string> getAllContexts();
69  static Context* contextOpen(const char*);
73  static Context* contextOpen(struct iio_context*, const char*);
77  static Context* contextOpen();
81  static M2k* m2kOpen(const char*);
85  static M2k* m2kOpen(struct iio_context*, const char*);
89  static M2k* m2kOpen();
93  static void contextClose(Context*, bool deinit = true);
94 
95  static void contextCloseAll();
96 
97  static std::string getVersion();
98 
102  static void enableLogging(bool enable);
103 
104 private:
105  static std::map<ContextTypes, std::vector<std::string>> m_dev_map;
106  static std::map<ContextTypes, std::string> m_dev_name_map;
107  // std::shared_ptr<M2KImpl> m_pimpl;
108  static ContextTypes identifyContext(iio_context *ctx);
109  static Context* buildContext(ContextTypes type,
110  std::string uri,
111  struct iio_context *ctx,
112  bool sync,
113  bool ownsContext = false);
114  static bool m_disable_logging;
115 
116  static std::map<std::string, int> reference_count;
117  static void incrementReferenceCount(std::string uri);
118  static void decrementReferenceCount(std::string uri);
119  static bool checkLastReference(std::string uri);
120  static Context* searchInConnectedDevices(std::string uri);
121 };
122 
135 LIBM2K_API Context* contextOpen();
136 
137 
141 LIBM2K_API Context* contextOpen(const char* uri);
142 
143 
147 LIBM2K_API Context* contextOpen(struct iio_context* ctx, const char* uri);
148 
149 
158 LIBM2K_API M2k* m2kOpen(const char* uri);
159 
160 
170 LIBM2K_API M2k* m2kOpen(struct iio_context* ctx, const char* uri);
171 
172 
179 LIBM2K_API M2k* m2kOpen();
180 
181 
186 LIBM2K_API std::vector<struct libm2k::CONTEXT_INFO*> getContextsInfo();
187 
188 
193 LIBM2K_API std::vector<std::string> getAllContexts();
194 
195 
201 LIBM2K_API void contextClose(Context* ctx, bool deinit = true);
202 
203 
207 LIBM2K_API void contextCloseAll();
208 
209 
214 LIBM2K_API std::string getVersion();
215 
216 
221 LIBM2K_API void enableLogging(bool enable);
222 
223 
228 }
229 }
230 #endif //M2K_H
LIBM2K_API M2k * m2kOpen()
Open an ADALM2000.
+
LIBM2K_API std::vector< std::string > getAllContexts()
List all available contexts.
+
LIBM2K_API std::vector< struct libm2k::CONTEXT_INFO * > getContextsInfo()
List the information about all available contexts.
+
LIBM2K_API std::string getVersion()
Get library version.
+
LIBM2K_API void contextClose(Context *ctx, bool deinit=true)
Destroy the given context.
+
Generic M2K enumerations.
+
LIBM2K_API void contextCloseAll()
Close all the devices.
+
LIBM2K_API void enableLogging(bool enable)
Enable/disable the logging system.
+
+ + + + diff --git a/digital_2enums_8hpp.html b/digital_2enums_8hpp.html new file mode 100644 index 00000000..b02fd612 --- /dev/null +++ b/digital_2enums_8hpp.html @@ -0,0 +1,236 @@ + + + + + + + +libm2k: enums.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+Classes | +Enumerations
+
+
digital/enums.hpp File Reference
+
+
+ +

Digital enumerations. +More...

+
#include <iio.h>
+
+Include dependency graph for digital/enums.hpp:
+
+
+ + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + +

+Enumerations

enum  libm2k::digital::DIO_DIRECTION {
+  DIO_INPUT = 0, +
+  DIO_OUTPUT = 1 +
+ }
 Direction of a digital channel. More...
 
enum  libm2k::digital::DIO_LEVEL {
+  LOW = 0, +
+  HIGH = 1 +
+ }
 Logic voltage levels. More...
 
enum  libm2k::digital::DIO_CHANNEL {
+  DIO_CHANNEL_0 = 0, +
+  DIO_CHANNEL_1 = 1, +
+  DIO_CHANNEL_2 = 2, +
+  DIO_CHANNEL_3 = 3, +
+  DIO_CHANNEL_4 = 4, +
+  DIO_CHANNEL_5 = 5, +
+  DIO_CHANNEL_6 = 6, +
+  DIO_CHANNEL_7 = 7, +
+  DIO_CHANNEL_8 = 8, +
+  DIO_CHANNEL_9 = 9, +
+  DIO_CHANNEL_10 = 10, +
+  DIO_CHANNEL_11 = 11, +
+  DIO_CHANNEL_12 = 12, +
+  DIO_CHANNEL_13 = 13, +
+  DIO_CHANNEL_14 = 14, +
+  DIO_CHANNEL_15 = 15 +
+ }
 Indexes of the channels. More...
 
enum  libm2k::digital::DIO_MODE {
+  DIO_OPENDRAIN = 0, +
+  DIO_PUSHPULL = 1 +
+ }
 Output mode for a digital channel.
 
enum  libm2k::digital::DIO_TRIGGER_MODE {
+  DIO_OR = 0, +
+  DIO_AND = 1 +
+ }
 Triggering mode for digital channels.
 
+

Detailed Description

+

Digital enumerations.

+

Enumeration Type Documentation

+ +

◆ DIO_CHANNEL

+ +
+
+ +

Indexes of the channels.

+
Note
Each channel can be accessed through its index
+ +
+
+ +

◆ DIO_DIRECTION

+ +
+
+ +

Direction of a digital channel.

+
Note
Digital channels can be used both for transmitting and receiving digital signals
+ +
+
+ +

◆ DIO_LEVEL

+ +
+
+ + + + +
enum libm2k::digital::DIO_LEVEL
+
+ +

Logic voltage levels.

+
Note
At any given time a digital signals can only take two possible values, namely low or high
+ +
+
+
+ + + + diff --git a/digital_2enums_8hpp__dep__incl.map b/digital_2enums_8hpp__dep__incl.map new file mode 100644 index 00000000..3bdb9331 --- /dev/null +++ b/digital_2enums_8hpp__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/digital_2enums_8hpp__dep__incl.md5 b/digital_2enums_8hpp__dep__incl.md5 new file mode 100644 index 00000000..85696512 --- /dev/null +++ b/digital_2enums_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +976c84435549cde5e703149f823ca951 \ No newline at end of file diff --git a/digital_2enums_8hpp__dep__incl.png b/digital_2enums_8hpp__dep__incl.png new file mode 100644 index 00000000..5232fb82 Binary files /dev/null and b/digital_2enums_8hpp__dep__incl.png differ diff --git a/digital_2enums_8hpp__incl.map b/digital_2enums_8hpp__incl.map new file mode 100644 index 00000000..0c289890 --- /dev/null +++ b/digital_2enums_8hpp__incl.map @@ -0,0 +1,4 @@ + + + + diff --git a/digital_2enums_8hpp__incl.md5 b/digital_2enums_8hpp__incl.md5 new file mode 100644 index 00000000..b2f6bb97 --- /dev/null +++ b/digital_2enums_8hpp__incl.md5 @@ -0,0 +1 @@ +d029e270067e135e0d3a553ad24d6911 \ No newline at end of file diff --git a/digital_2enums_8hpp__incl.png b/digital_2enums_8hpp__incl.png new file mode 100644 index 00000000..a3dbaffa Binary files /dev/null and b/digital_2enums_8hpp__incl.png differ diff --git a/digital_2enums_8hpp_source.html b/digital_2enums_8hpp_source.html new file mode 100644 index 00000000..56f480bc --- /dev/null +++ b/digital_2enums_8hpp_source.html @@ -0,0 +1,85 @@ + + + + + + + +libm2k: enums.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
digital/enums.hpp
+
+
+Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019 Analog Devices Inc.
3  *
4  * This file is part of libm2k
5  * (see http://www.github.com/analogdevicesinc/libm2k).
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as published by
9  * the Free Software Foundation, either version 2.1 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef ENUMS_DIGITAL_HPP
23 #define ENUMS_DIGITAL_HPP
24 
25 #include <iio.h>
26 
32 namespace libm2k {
33 namespace digital {
34 
35 
44  DIO_INPUT = 0,
45  DIO_OUTPUT = 1,
46  };
47 
48 
56  enum DIO_LEVEL {
57  LOW = 0,
58  HIGH = 1,
59  };
60 
61 
69  enum DIO_CHANNEL {
70  DIO_CHANNEL_0 = 0,
71  DIO_CHANNEL_1 = 1,
72  DIO_CHANNEL_2 = 2,
73  DIO_CHANNEL_3 = 3,
74  DIO_CHANNEL_4 = 4,
75  DIO_CHANNEL_5 = 5,
76  DIO_CHANNEL_6 = 6,
77  DIO_CHANNEL_7 = 7,
78  DIO_CHANNEL_8 = 8,
79  DIO_CHANNEL_9 = 9,
80  DIO_CHANNEL_10 = 10,
81  DIO_CHANNEL_11 = 11,
82  DIO_CHANNEL_12 = 12,
83  DIO_CHANNEL_13 = 13,
84  DIO_CHANNEL_14 = 14,
85  DIO_CHANNEL_15 = 15,
86  };
87 
88 
94  enum DIO_MODE {
95  DIO_OPENDRAIN = 0,
96  DIO_PUSHPULL = 1,
97  };
98 
99 
106  DIO_OR = 0,
107  DIO_AND = 1,
108  };
109 
110 
114  struct channel {
115  struct iio_channel* m_channel;
116  DIO_DIRECTION m_direction;
117  };
118 }
119 }
120 
121 
122 #endif
DIO_LEVEL
Logic voltage levels.
Definition: digital/enums.hpp:56
+
DIO_CHANNEL
Indexes of the channels.
Definition: digital/enums.hpp:69
+
DIO_TRIGGER_MODE
Triggering mode for digital channels.
Definition: digital/enums.hpp:105
+
DIO_MODE
Output mode for a digital channel.
Definition: digital/enums.hpp:94
+
DIO_DIRECTION
Direction of a digital channel.
Definition: digital/enums.hpp:43
+
+ + + + diff --git a/dir_000001_000003.html b/dir_000001_000003.html new file mode 100644 index 00000000..2a48377c --- /dev/null +++ b/dir_000001_000003.html @@ -0,0 +1,76 @@ + + + + + + + +libm2k: libm2k -> digital Relation + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+

libm2k → digital Relation

File in include/libm2kIncludes file in include/libm2k/digital
m2khardwaretrigger.hppdigital/enums.hpp
+ + + + diff --git a/dir_000002_000004.html b/dir_000002_000004.html new file mode 100644 index 00000000..33a624aa --- /dev/null +++ b/dir_000002_000004.html @@ -0,0 +1,76 @@ + + + + + + + +libm2k: /home/vsts/work/1/s/include/libm2k -> digital Relation + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+

libm2k → digital Relation

File in include/libm2kIncludes file in include/libm2k/digital
m2khardwaretrigger.hppenums.hpp
+ + + + diff --git a/dir_000003_000002.html b/dir_000003_000002.html new file mode 100644 index 00000000..aab2eeb7 --- /dev/null +++ b/dir_000003_000002.html @@ -0,0 +1,76 @@ + + + + + + + +libm2k: digital -> analog Relation + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+

digital → analog Relation

File in include/libm2k/digitalIncludes file in include/libm2k/analog
m2kdigital.hppanalog/enums.hpp
+ + + + diff --git a/dir_000004_000003.html b/dir_000004_000003.html new file mode 100644 index 00000000..e0b435f9 --- /dev/null +++ b/dir_000004_000003.html @@ -0,0 +1,76 @@ + + + + + + + +libm2k: /home/vsts/work/1/s/include/libm2k/digital -> analog Relation + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+

digital → analog Relation

File in include/libm2k/digitalIncludes file in include/libm2k/analog
m2kdigital.hppenums.hpp
+ + + + diff --git a/dir_217464d79dff122594ad26a788ec9a88.html b/dir_217464d79dff122594ad26a788ec9a88.html new file mode 100644 index 00000000..1311383b --- /dev/null +++ b/dir_217464d79dff122594ad26a788ec9a88.html @@ -0,0 +1,98 @@ + + + + + + + +libm2k: digital Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
digital Directory Reference
+
+
+
+Directory dependency graph for digital:
+
+
digital
+ + + + + + +
+ + + + + +

+Files

file  digital/enums.hpp [code]
 Digital enumerations.
 
+
+ + + + diff --git a/dir_217464d79dff122594ad26a788ec9a88_dep.map b/dir_217464d79dff122594ad26a788ec9a88_dep.map new file mode 100644 index 00000000..69942e8f --- /dev/null +++ b/dir_217464d79dff122594ad26a788ec9a88_dep.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/dir_217464d79dff122594ad26a788ec9a88_dep.md5 b/dir_217464d79dff122594ad26a788ec9a88_dep.md5 new file mode 100644 index 00000000..e463923e --- /dev/null +++ b/dir_217464d79dff122594ad26a788ec9a88_dep.md5 @@ -0,0 +1 @@ +ff2f083e15317a664609d8626cfe7fd5 \ No newline at end of file diff --git a/dir_217464d79dff122594ad26a788ec9a88_dep.png b/dir_217464d79dff122594ad26a788ec9a88_dep.png new file mode 100644 index 00000000..4cb3c239 Binary files /dev/null and b/dir_217464d79dff122594ad26a788ec9a88_dep.png differ diff --git a/dir_5885b306aec3918a55696cba0f7546bc.html b/dir_5885b306aec3918a55696cba0f7546bc.html new file mode 100644 index 00000000..da2fac66 --- /dev/null +++ b/dir_5885b306aec3918a55696cba0f7546bc.html @@ -0,0 +1,96 @@ + + + + + + + +libm2k: analog Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
analog Directory Reference
+
+
+
+Directory dependency graph for analog:
+
+
analog
+ + + + +
+ + + + + +

+Files

file  analog/enums.hpp [code]
 Analogical enumerations.
 
+
+ + + + diff --git a/dir_5885b306aec3918a55696cba0f7546bc_dep.map b/dir_5885b306aec3918a55696cba0f7546bc_dep.map new file mode 100644 index 00000000..34f03a32 --- /dev/null +++ b/dir_5885b306aec3918a55696cba0f7546bc_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_5885b306aec3918a55696cba0f7546bc_dep.md5 b/dir_5885b306aec3918a55696cba0f7546bc_dep.md5 new file mode 100644 index 00000000..139c74bb --- /dev/null +++ b/dir_5885b306aec3918a55696cba0f7546bc_dep.md5 @@ -0,0 +1 @@ +2eecd13f530902c0f847c3e8396235ab \ No newline at end of file diff --git a/dir_5885b306aec3918a55696cba0f7546bc_dep.png b/dir_5885b306aec3918a55696cba0f7546bc_dep.png new file mode 100644 index 00000000..fd172b49 Binary files /dev/null and b/dir_5885b306aec3918a55696cba0f7546bc_dep.png differ diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 00000000..c93efbe5 --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,93 @@ + + + + + + + +libm2k: include Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
include Directory Reference
+
+
+
+Directory dependency graph for include:
+
+
include
+ + + + +
+ + +

+Directories

+
+ + + + diff --git a/dir_d44c64559bbebec7f509842c48db8b23_dep.map b/dir_d44c64559bbebec7f509842c48db8b23_dep.map new file mode 100644 index 00000000..2be812b3 --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_d44c64559bbebec7f509842c48db8b23_dep.md5 b/dir_d44c64559bbebec7f509842c48db8b23_dep.md5 new file mode 100644 index 00000000..6eadcd8d --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23_dep.md5 @@ -0,0 +1 @@ +76a62b85d28b46081f0a38e31ee0fdfb \ No newline at end of file diff --git a/dir_d44c64559bbebec7f509842c48db8b23_dep.png b/dir_d44c64559bbebec7f509842c48db8b23_dep.png new file mode 100644 index 00000000..d4549d56 Binary files /dev/null and b/dir_d44c64559bbebec7f509842c48db8b23_dep.png differ diff --git a/dir_e68e8157741866f444e17edd764ebbae.html b/dir_e68e8157741866f444e17edd764ebbae.html new file mode 100644 index 00000000..d84d5191 --- /dev/null +++ b/dir_e68e8157741866f444e17edd764ebbae.html @@ -0,0 +1,80 @@ + + + + + + + +libm2k: doc Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
doc Directory Reference
+
+
+
+ + + + diff --git a/dir_efbe54f57d0837054307363ff2377898.html b/dir_efbe54f57d0837054307363ff2377898.html new file mode 100644 index 00000000..873fe16c --- /dev/null +++ b/dir_efbe54f57d0837054307363ff2377898.html @@ -0,0 +1,103 @@ + + + + + + + +libm2k: libm2k Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libm2k Directory Reference
+
+
+
+Directory dependency graph for libm2k:
+
+
libm2k
+ + + + + + + + +
+ + +

+Directories

+ + + + +

+Files

file  enums.hpp [code]
 Generic M2K enumerations.
 
+
+ + + + diff --git a/dir_efbe54f57d0837054307363ff2377898_dep.map b/dir_efbe54f57d0837054307363ff2377898_dep.map new file mode 100644 index 00000000..487a8f43 --- /dev/null +++ b/dir_efbe54f57d0837054307363ff2377898_dep.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/dir_efbe54f57d0837054307363ff2377898_dep.md5 b/dir_efbe54f57d0837054307363ff2377898_dep.md5 new file mode 100644 index 00000000..9a0013e0 --- /dev/null +++ b/dir_efbe54f57d0837054307363ff2377898_dep.md5 @@ -0,0 +1 @@ +a6b46873f0c7b5b6b99462662e8d29cb \ No newline at end of file diff --git a/dir_efbe54f57d0837054307363ff2377898_dep.png b/dir_efbe54f57d0837054307363ff2377898_dep.png new file mode 100644 index 00000000..5a2c3098 Binary files /dev/null and b/dir_efbe54f57d0837054307363ff2377898_dep.png differ diff --git a/dmm_8hpp_source.html b/dmm_8hpp_source.html new file mode 100644 index 00000000..618839cb --- /dev/null +++ b/dmm_8hpp_source.html @@ -0,0 +1,83 @@ + + + + + + + +libm2k: dmm.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
dmm.hpp
+
+
+
1 /*
2  * Copyright (c) 2019 Analog Devices Inc.
3  *
4  * This file is part of libm2k
5  * (see http://www.github.com/analogdevicesinc/libm2k).
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as published by
9  * the Free Software Foundation, either version 2.1 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef GENERICDMM_HPP
23 #define GENERICDMM_HPP
24 
25 #include <libm2k/m2kglobal.hpp>
26 #include <libm2k/analog/enums.hpp>
27 #include <vector>
28 #include <map>
29 #include <string>
30 
31 namespace libm2k {
36 namespace analog {
37 
45 class LIBM2K_API DMM {
46 public:
50  virtual ~DMM() {}
51 
52 
56  virtual void reset() = 0;
57 
58 
64  virtual std::vector<std::string> getAllChannels() = 0;
65 
66 
73  virtual libm2k::analog::DMM_READING readChannel(unsigned int index) = 0;
74 
75 
82  virtual libm2k::analog::DMM_READING readChannel(std::string chn_name) = 0;
83 
84 
90  virtual std::vector<libm2k::analog::DMM_READING> readAll() = 0;
91 
92 
98  virtual std::string getName() = 0;
99 
100 };
101 }
102 }
103 
104 
105 
106 #endif //GENERICDMM_HPP
The structure of a DMM.
Definition: analog/enums.hpp:43
+
Controls the digital multimeter.
Definition: dmm.hpp:45
+
Analogical enumerations.
+
+ + + + diff --git a/doc.png b/doc.png new file mode 100644 index 00000000..17edabff Binary files /dev/null and b/doc.png differ diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 00000000..e2515926 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,1764 @@ +/* The standard CSS for doxygen 1.8.15 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #FFFFFF; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/doxygen.png b/doxygen.png new file mode 100644 index 00000000..3ff17d80 Binary files /dev/null and b/doxygen.png differ diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 00000000..ea0a7b39 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,120 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +libm2k: enums.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
enums.hpp File Reference
+
+
+ +

Generic M2K enumerations. +More...

+
#include <string>
+#include <vector>
+
+Include dependency graph for enums.hpp:
+
+
+ + + + + +
+
+This graph shows which files directly or indirectly include this file:
+
+
+ + + + + + + + + + +
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + +

+Classes

struct  libm2k::CALIBRATION_PARAMETERS
 Calibration parameters of m2k. More...
 
struct  libm2k::SETTINGS
 Triggering system. More...
 
struct  libm2k::CONTEXT_INFO
 Additional information about the context. More...
 
struct  libm2k::IIO_CONTEXT_VERSION
 The version of the backend. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Enumerations

enum  libm2k::M2K_EXCEPTION_TYPE {
+  EXC_OUT_OF_RANGE = 0, +
+  EXC_RUNTIME_ERROR = 1, +
+  EXC_INVALID_PARAMETER = 2, +
+  EXC_TIMEOUT = 3, +
+  EXC_INVALID_FIRMWARE_VERSION = 4 +
+ }
 M2k exception types.
 
enum  libm2k::M2K_TRIGGER_CONDITION_ANALOG {
+  RISING_EDGE_ANALOG = 0, +
+  FALLING_EDGE_ANALOG = 1, +
+  LOW_LEVEL_ANALOG = 2, +
+  HIGH_LEVEL_ANALOG = 3 +
+ }
 Condition of triggering. More...
 
enum  libm2k::M2K_TRIGGER_CONDITION_DIGITAL {
+  RISING_EDGE_DIGITAL = 0, +
+  FALLING_EDGE_DIGITAL = 1, +
+  LOW_LEVEL_DIGITAL = 2, +
+  HIGH_LEVEL_DIGITAL = 3, +
+  ANY_EDGE_DIGITAL = 4, +
+  NO_TRIGGER_DIGITAL = 5 +
+ }
 Condition of triggering. More...
 
enum  libm2k::M2K_TRIGGER_MODE {
+  libm2k::ALWAYS = 0, +
+  libm2k::ANALOG = 1, +
+  libm2k::EXTERNAL = 2, +
+  DIGITAL_OR_ANALOG = 3, +
+  DIGITAL_AND_ANALOG = 4, +
+  DIGITAL_XOR_ANALOG = 5, +
+  N_DIGITAL_OR_ANALOG = 6, +
+  N_DIGITAL_AND_ANALOG = 7, +
+  N_DIGITAL_XOR_ANALOG = 8 +
+ }
 Select the mode for the analog trigger. More...
 
enum  libm2k::M2K_TRIGGER_SOURCE_ANALOG {
+  libm2k::CHANNEL_1 = 0, +
+  libm2k::CHANNEL_2 = 1, +
+  CHANNEL_1_OR_CHANNEL_2 = 2, +
+  CHANNEL_1_AND_CHANNEL_2 = 3, +
+  CHANNEL_1_XOR_CHANNEL_2 = 4, +
+  libm2k::SRC_DIGITAL_IN = 5, +
+  CHANNEL_1_OR_SRC_LOGIC_ANALYZER = 6, +
+  CHANNEL_2_OR_SRC_LOGIC_ANALYZER = 7, +
+  CHANNEL_1_OR_CHANNEL_2_OR_SRC_LOGIC_ANALYZER = 8, +
+  libm2k::NO_SOURCE = 9 +
+ }
 Select the source for the analog trigger. More...
 
enum  libm2k::M2K_TRIGGER_SOURCE_OUT {
+  TRIGGER_NONE = 0, +
+  TRIGGER_TI = 1, +
+  TRIGGER_ADC = 2, +
+  TRIGGER_LA = 3 +
+ }
 Selects the source trigger for the output interfaces.
 
enum  libm2k::M2K_TRIGGER_CONDITION_OUT {
+  NONE_OUT = 0, +
+  LOW_LEVEL_OUT = 1, +
+  HIGH_LEVEL_OUT = 2, +
+  ANY_EDGE_OUT = 3, +
+  RISING_EDGE_OUT = 4, +
+  FALLING_EDGE_OUT = 5 +
+ }
 Trigger condition when the source for M2K_TRIGGER_SOURCE_OUT is TRIGGER_TI.
 
enum  libm2k::M2K_TRIGGER_STATUS_ANALOG_OUT {
+  DISABLED = 0, +
+  START = 1, +
+  STOP = 2 +
+ }
 The status value determines the action that the output interface will take when the trigger condition is met.
 
enum  libm2k::M2K_TRIGGER_SOURCE_DIGITAL {
+  libm2k::SRC_TRIGGER_IN = 0, +
+  libm2k::SRC_ANALOG_IN = 1, +
+  libm2k::SRC_NONE = 2, +
+  libm2k::SRC_DISABLED = 3 +
+ }
 Select the source for the digital trigger. More...
 
enum  libm2k::M2K_TRIGGER_OUT_SELECT {
+  libm2k::SELECT_NONE = 0, +
+  SELECT_TRIGGER_I_SAME_CHAN = 1, +
+  libm2k::SELECT_TRIGGER_IN = 2, +
+  libm2k::SELECT_ANALOG_IN = 3, +
+  libm2k::SELECT_DIGITAL_IN = 4 +
+ }
 Select which trigger event will be forwarded on TO pin (trigger out) More...
 
+

Detailed Description

+

Generic M2K enumerations.

+

Enumeration Type Documentation

+ +

◆ M2K_TRIGGER_CONDITION_ANALOG

+ +
+
+ +

Condition of triggering.

+

for the analog side

+ +
+
+ +

◆ M2K_TRIGGER_CONDITION_DIGITAL

+ +
+
+ +

Condition of triggering.

+

for the digital side

+ +
+
+ +

◆ M2K_TRIGGER_MODE

+ +
+
+ + + + +
enum libm2k::M2K_TRIGGER_MODE
+
+ +

Select the mode for the analog trigger.

+ + + + +
Enumerator
ALWAYS 

ALWAYS - Disable analog trigger;.

+
ANALOG 

ANALOG - Trigger condition specified only by analog trigger (CH1 and CH2)

+
EXTERNAL 

EXTERNAL - Trigger condition specified only by external trigger (TI)

+
+ +
+
+ +

◆ M2K_TRIGGER_OUT_SELECT

+ +
+
+ +

Select which trigger event will be forwarded on TO pin (trigger out)

+ + + + + +
Enumerator
SELECT_NONE 

SELECT_NONE - no trigger event is forwarded.

+
SELECT_TRIGGER_IN 

SELECT_TRIGGER_IN - forwards trigger events from TI pin(trigger in)

+
SELECT_ANALOG_IN 

SELECT_ANALOG_IN - forwards trigger events from AnalogIn interface.

+
SELECT_DIGITAL_IN 

SELECT_DIGITAL_IN - forwards trigger events from DigitalIn interface.

+
+ +
+
+ +

◆ M2K_TRIGGER_SOURCE_ANALOG

+ +
+
+ +

Select the source for the analog trigger.

+ + + + + +
Enumerator
CHANNEL_1 

CHANNEL_1 - trigger events on analog CHANNEL_1 trigger the AnalogIn interface.

+
CHANNEL_2 

CHANNEL_2 - trigger events on analog CHANNEL_2 trigger the AnalogIn interface.

+
SRC_DIGITAL_IN 

SRC_DIGITAL_IN - trigger events on the DigitalIn interface trigger the AnalogIn interface.

+
NO_SOURCE 

NO_SOURCE - block the AnalogIn interface.

+
+ +
+
+ +

◆ M2K_TRIGGER_SOURCE_DIGITAL

+ +
+
+ +

Select the source for the digital trigger.

+ + + + + +
Enumerator
SRC_TRIGGER_IN 

SRC_TRIGGER_IN - trigger events on the TI(trigger in) pin trigger the DigitalIn interface.

+
SRC_ANALOG_IN 

SRC_ANALOG_IN - trigger events on the AnalogIn interface trigger the DigitalIn interface.

+
SRC_NONE 

SRC_NONE - trigger events on the DigitalIn are conditioned by the internal digital trigger structure.

+
SRC_DISABLED 

SRC_DISABLED - block the DigitalIn interface.

+
+ +
+
+
+ + + + diff --git a/enums_8hpp__dep__incl.map b/enums_8hpp__dep__incl.map new file mode 100644 index 00000000..d514b171 --- /dev/null +++ b/enums_8hpp__dep__incl.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/enums_8hpp__dep__incl.md5 b/enums_8hpp__dep__incl.md5 new file mode 100644 index 00000000..4960df02 --- /dev/null +++ b/enums_8hpp__dep__incl.md5 @@ -0,0 +1 @@ +df725a6a35a8a364c1eab73a32ce4c3e \ No newline at end of file diff --git a/enums_8hpp__dep__incl.png b/enums_8hpp__dep__incl.png new file mode 100644 index 00000000..feb2844c Binary files /dev/null and b/enums_8hpp__dep__incl.png differ diff --git a/enums_8hpp__incl.map b/enums_8hpp__incl.map new file mode 100644 index 00000000..5388b016 --- /dev/null +++ b/enums_8hpp__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/enums_8hpp__incl.md5 b/enums_8hpp__incl.md5 new file mode 100644 index 00000000..9d7e25a1 --- /dev/null +++ b/enums_8hpp__incl.md5 @@ -0,0 +1 @@ +6845ee7cd51ae1ea50df9ec41664fb62 \ No newline at end of file diff --git a/enums_8hpp__incl.png b/enums_8hpp__incl.png new file mode 100644 index 00000000..32f56e1e Binary files /dev/null and b/enums_8hpp__incl.png differ diff --git a/enums_8hpp_source.html b/enums_8hpp_source.html new file mode 100644 index 00000000..27906bcd --- /dev/null +++ b/enums_8hpp_source.html @@ -0,0 +1,134 @@ + + + + + + + +libm2k: enums.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
enums.hpp
+
+
+Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019 Analog Devices Inc.
3  *
4  * This file is part of libm2k
5  * (see http://www.github.com/analogdevicesinc/libm2k).
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as published by
9  * the Free Software Foundation, either version 2.1 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef ENUMS_HPP
23 #define ENUMS_HPP
24 
25 #include <string>
26 #include <vector>
27 
28 extern "C" {
29  struct iio_context;
30  struct iio_device;
31  struct iio_channel;
32  struct iio_buffer;
33 }
39 namespace libm2k {
40 
44  enum CALIBRATION_MODE {
45  ADC_REF1,
46  ADC_REF2,
47  ADC_GND,
48  DAC,
49  NONE
50  };
51 
52 
60  double adc_gain_ch_1;
61  double adc_gain_ch_2;
64  double dac_a_gain;
65  double dac_b_gain;
66  };
67 
68 
72  enum GAIN_MODE {
73  LOW_GAIN,
74  HIGH_GAIN
75  };
76 
83  EXC_OUT_OF_RANGE = 0,
84  EXC_RUNTIME_ERROR = 1,
85  EXC_INVALID_PARAMETER = 2,
86  EXC_TIMEOUT = 3,
87  EXC_INVALID_FIRMWARE_VERSION = 4
88  };
89 
90 
97  RISING_EDGE_ANALOG = 0,
98  FALLING_EDGE_ANALOG = 1,
99  LOW_LEVEL_ANALOG = 2,
100  HIGH_LEVEL_ANALOG = 3
101  };
102 
103 
110  RISING_EDGE_DIGITAL = 0,
111  FALLING_EDGE_DIGITAL = 1,
112  LOW_LEVEL_DIGITAL = 2,
113  HIGH_LEVEL_DIGITAL = 3,
114  ANY_EDGE_DIGITAL = 4,
115  NO_TRIGGER_DIGITAL = 5,
116  };
117 
118 
124  ALWAYS = 0,
125  ANALOG = 1,
126  EXTERNAL = 2,
127  DIGITAL_OR_ANALOG = 3,
128  DIGITAL_AND_ANALOG = 4,
129  DIGITAL_XOR_ANALOG = 5,
130  N_DIGITAL_OR_ANALOG = 6,
131  N_DIGITAL_AND_ANALOG = 7,
132  N_DIGITAL_XOR_ANALOG = 8,
133  };
134 
135 
141  CHANNEL_1 = 0,
142  CHANNEL_2 = 1,
143  CHANNEL_1_OR_CHANNEL_2 = 2,
144  CHANNEL_1_AND_CHANNEL_2 = 3,
145  CHANNEL_1_XOR_CHANNEL_2 = 4,
147  CHANNEL_1_OR_SRC_LOGIC_ANALYZER = 6,
148  CHANNEL_2_OR_SRC_LOGIC_ANALYZER = 7,
149  CHANNEL_1_OR_CHANNEL_2_OR_SRC_LOGIC_ANALYZER = 8,
150  NO_SOURCE = 9,
151  };
152 
153 
159  TRIGGER_NONE = 0,
160  TRIGGER_TI = 1,
161  TRIGGER_ADC = 2,
162  TRIGGER_LA = 3,
163  };
164 
170  NONE_OUT = 0,
171  LOW_LEVEL_OUT = 1,
172  HIGH_LEVEL_OUT = 2,
173  ANY_EDGE_OUT = 3,
174  RISING_EDGE_OUT = 4,
175  FALLING_EDGE_OUT = 5,
176  };
177 
183  DISABLED = 0,
184  START = 1,
185  STOP = 2,
186  };
187 
188 
196  SRC_NONE = 2,
198  };
199 
200 
207  SELECT_TRIGGER_I_SAME_CHAN = 1,
211  };
212 
213 
219  struct SETTINGS {
220  std::vector<M2K_TRIGGER_CONDITION_ANALOG> analog_condition;
221  std::vector<M2K_TRIGGER_CONDITION_DIGITAL> digital_condition;
222  std::vector<int> raw_level;
223  std::vector<double> level;
224  std::vector<double> hysteresis;
225  std::vector<M2K_TRIGGER_MODE> mode;
227  int delay;
228  };
229 
230 
235  struct CONTEXT_INFO {
236  std::string id_vendor;
237  std::string id_product;
238  std::string manufacturer;
239  std::string product;
240  std::string serial;
241  std::string uri;
242  };
243 
244 
248  struct IIO_OBJECTS {
249  std::vector<iio_channel*> channels_in;
250  std::vector<iio_channel*> channels_out;
251  std::vector<iio_device*> devices;
252  std::vector<iio_buffer*> buffers_rx;
253  std::vector<iio_buffer*> buffers_tx;
254  iio_context* context;
255  };
256 
262  unsigned int major;
263  unsigned int minor;
264  char git_tag[8];
265  };
266 }
267 
268 
269 #endif
M2K_TRIGGER_STATUS_ANALOG_OUT
The status value determines the action that the output interface will take when the trigger condition...
Definition: enums.hpp:182
+
M2K_TRIGGER_SOURCE_OUT
Selects the source trigger for the output interfaces.
Definition: enums.hpp:158
+
double dac_b_gain
DAC calibration gain - channel 2.
Definition: enums.hpp:65
+
Calibration parameters of m2k.
Definition: enums.hpp:57
+
std::string serial
Serial number.
Definition: enums.hpp:240
+
std::string uri
IIO context URI.
Definition: enums.hpp:241
+
double adc_gain_ch_2
ADC calibration gain - channel 2.
Definition: enums.hpp:61
+
int adc_offset_ch_2
ADC calibration offset - channel 2.
Definition: enums.hpp:59
+
M2K_TRIGGER_SOURCE_ANALOG trigger_source
Triggering source.
Definition: enums.hpp:226
+
char git_tag[8]
git tag
Definition: enums.hpp:264
+
SRC_DIGITAL_IN - trigger events on the DigitalIn interface trigger the AnalogIn interface.
Definition: enums.hpp:146
+
M2K_TRIGGER_SOURCE_DIGITAL
Select the source for the digital trigger.
Definition: enums.hpp:193
+
std::string product
Product name extracted from IIO context.
Definition: enums.hpp:239
+
M2K_TRIGGER_CONDITION_DIGITAL
Condition of triggering.
Definition: enums.hpp:109
+
M2K_TRIGGER_CONDITION_OUT
Trigger condition when the source for M2K_TRIGGER_SOURCE_OUT is TRIGGER_TI.
Definition: enums.hpp:169
+
std::string manufacturer
Manufacturer extracted from IIO context.
Definition: enums.hpp:238
+
CHANNEL_2 - trigger events on analog CHANNEL_2 trigger the AnalogIn interface.
Definition: enums.hpp:142
+
std::string id_vendor
Vendor ID extracted from IIO context.
Definition: enums.hpp:236
+
M2K_EXCEPTION_TYPE
M2k exception types.
Definition: enums.hpp:82
+
SRC_DISABLED - block the DigitalIn interface.
Definition: enums.hpp:197
+
std::vector< M2K_TRIGGER_MODE > mode
Triggering mode.
Definition: enums.hpp:225
+
int delay
Trigger's delay.
Definition: enums.hpp:227
+
SELECT_DIGITAL_IN - forwards trigger events from DigitalIn interface.
Definition: enums.hpp:210
+
NO_SOURCE - block the AnalogIn interface.
Definition: enums.hpp:150
+
std::vector< M2K_TRIGGER_CONDITION_DIGITAL > digital_condition
Digital trigger's condition.
Definition: enums.hpp:221
+
M2K_TRIGGER_CONDITION_ANALOG
Condition of triggering.
Definition: enums.hpp:96
+
CHANNEL_1 - trigger events on analog CHANNEL_1 trigger the AnalogIn interface.
Definition: enums.hpp:141
+
The version of the backend.
Definition: enums.hpp:261
+
std::vector< double > hysteresis
Trigger's hysteresis.
Definition: enums.hpp:224
+
M2K_TRIGGER_MODE
Select the mode for the analog trigger.
Definition: enums.hpp:123
+
EXTERNAL - Trigger condition specified only by external trigger (TI)
Definition: enums.hpp:126
+
unsigned int minor
minor version
Definition: enums.hpp:263
+
SELECT_NONE - no trigger event is forwarded.
Definition: enums.hpp:206
+
Additional information about the context.
Definition: enums.hpp:235
+
M2K_TRIGGER_OUT_SELECT
Select which trigger event will be forwarded on TO pin (trigger out)
Definition: enums.hpp:205
+
std::vector< double > level
Trigger's level.
Definition: enums.hpp:223
+
double adc_gain_ch_1
ADC calibration gain - channel 1.
Definition: enums.hpp:60
+
int dac_a_offset
DAC calibration offset - channel 1.
Definition: enums.hpp:62
+
Triggering system.
Definition: enums.hpp:219
+
int dac_b_offset
DAC calibration offset - channel 2.
Definition: enums.hpp:63
+
ANALOG - Trigger condition specified only by analog trigger (CH1 and CH2)
Definition: enums.hpp:125
+
SRC_TRIGGER_IN - trigger events on the TI(trigger in) pin trigger the DigitalIn interface.
Definition: enums.hpp:194
+
SRC_ANALOG_IN - trigger events on the AnalogIn interface trigger the DigitalIn interface.
Definition: enums.hpp:195
+
ALWAYS - Disable analog trigger;.
Definition: enums.hpp:124
+
M2K_TRIGGER_SOURCE_ANALOG
Select the source for the analog trigger.
Definition: enums.hpp:140
+
std::vector< int > raw_level
Trigger's raw level.
Definition: enums.hpp:222
+
int adc_offset_ch_1
ADC calibration offset - channel 1.
Definition: enums.hpp:58
+
SRC_NONE - trigger events on the DigitalIn are conditioned by the internal digital trigger structure.
Definition: enums.hpp:196
+
double dac_a_gain
DAC calibration gain - channel 1.
Definition: enums.hpp:64
+
std::vector< M2K_TRIGGER_CONDITION_ANALOG > analog_condition
Analogical trigger's condition.
Definition: enums.hpp:220
+
SELECT_ANALOG_IN - forwards trigger events from AnalogIn interface.
Definition: enums.hpp:209
+
std::string id_product
Product ID extracted from IIO context.
Definition: enums.hpp:237
+
SELECT_TRIGGER_IN - forwards trigger events from TI pin(trigger in)
Definition: enums.hpp:208
+
unsigned int major
major version
Definition: enums.hpp:262
+
+ + + + diff --git a/files.html b/files.html new file mode 100644 index 00000000..2859934a --- /dev/null +++ b/files.html @@ -0,0 +1,92 @@ + + + + + + + +libm2k: File List + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+ + + + + + + + + + + + + +
 context.hpp
 contextbuilder.hpp
 dmm.hpp
 digital/enums.hppDigital enumerations
 analog/enums.hppAnalogical enumerations
 enums.hppGeneric M2K enumerations
 m2k.hpp
 m2kanalogin.hpp
 m2kanalogout.hpp
 m2kdigital.hpp
 m2khardwaretrigger.hpp
 m2kpowersupply.hpp
+
+
+ + + + diff --git a/folderclosed.png b/folderclosed.png new file mode 100644 index 00000000..bb8ab35e Binary files /dev/null and b/folderclosed.png differ diff --git a/folderopen.png b/folderopen.png new file mode 100644 index 00000000..d6c7f676 Binary files /dev/null and b/folderopen.png differ diff --git a/functions.html b/functions.html new file mode 100644 index 00000000..6e6164f4 --- /dev/null +++ b/functions.html @@ -0,0 +1,95 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
+ + + + diff --git a/functions_c.html b/functions_c.html new file mode 100644 index 00000000..ab2866c3 --- /dev/null +++ b/functions_c.html @@ -0,0 +1,103 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
+ + + + diff --git a/functions_d.html b/functions_d.html new file mode 100644 index 00000000..9b00d317 --- /dev/null +++ b/functions_d.html @@ -0,0 +1,94 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
+ + + + diff --git a/functions_e.html b/functions_e.html new file mode 100644 index 00000000..df5b1719 --- /dev/null +++ b/functions_e.html @@ -0,0 +1,88 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
+ + + + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 00000000..77e06672 --- /dev/null +++ b/functions_func.html @@ -0,0 +1,80 @@ + + + + + + + +libm2k: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+
+ + + + diff --git a/functions_func_c.html b/functions_func_c.html new file mode 100644 index 00000000..985a82d7 --- /dev/null +++ b/functions_func_c.html @@ -0,0 +1,103 @@ + + + + + + + +libm2k: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- c -

+
+ + + + diff --git a/functions_func_e.html b/functions_func_e.html new file mode 100644 index 00000000..4c053b23 --- /dev/null +++ b/functions_func_e.html @@ -0,0 +1,88 @@ + + + + + + + +libm2k: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- e -

+
+ + + + diff --git a/functions_func_g.html b/functions_func_g.html new file mode 100644 index 00000000..dae8e1f0 --- /dev/null +++ b/functions_func_g.html @@ -0,0 +1,335 @@ + + + + + + + +libm2k: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- g -

+
+ + + + diff --git a/functions_func_h.html b/functions_func_h.html new file mode 100644 index 00000000..d7ba7666 --- /dev/null +++ b/functions_func_h.html @@ -0,0 +1,82 @@ + + + + + + + +libm2k: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- h -

+
+ + + + diff --git a/functions_func_i.html b/functions_func_i.html new file mode 100644 index 00000000..e824c2cf --- /dev/null +++ b/functions_func_i.html @@ -0,0 +1,89 @@ + + + + + + + +libm2k: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- i -

+
+ + + + diff --git a/functions_func_l.html b/functions_func_l.html new file mode 100644 index 00000000..3f14a4b2 --- /dev/null +++ b/functions_func_l.html @@ -0,0 +1,79 @@ + + + + + + + +libm2k: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- l -

+
+ + + + diff --git a/functions_func_p.html b/functions_func_p.html new file mode 100644 index 00000000..2f3cedfd --- /dev/null +++ b/functions_func_p.html @@ -0,0 +1,98 @@ + + + + + + + +libm2k: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- p -

+
+ + + + diff --git a/functions_func_r.html b/functions_func_r.html new file mode 100644 index 00000000..c4dc08d2 --- /dev/null +++ b/functions_func_r.html @@ -0,0 +1,89 @@ + + + + + + + +libm2k: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- r -

+
+ + + + diff --git a/functions_func_s.html b/functions_func_s.html new file mode 100644 index 00000000..c0a4fde3 --- /dev/null +++ b/functions_func_s.html @@ -0,0 +1,232 @@ + + + + + + + +libm2k: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- s -

+
+ + + + diff --git a/functions_func_t.html b/functions_func_t.html new file mode 100644 index 00000000..e7b362db --- /dev/null +++ b/functions_func_t.html @@ -0,0 +1,82 @@ + + + + + + + +libm2k: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- t -

+
+ + + + diff --git a/functions_g.html b/functions_g.html new file mode 100644 index 00000000..684e3839 --- /dev/null +++ b/functions_g.html @@ -0,0 +1,338 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
+ + + + diff --git a/functions_h.html b/functions_h.html new file mode 100644 index 00000000..582c456f --- /dev/null +++ b/functions_h.html @@ -0,0 +1,85 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- h -

+
+ + + + diff --git a/functions_i.html b/functions_i.html new file mode 100644 index 00000000..029420cf --- /dev/null +++ b/functions_i.html @@ -0,0 +1,98 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
+ + + + diff --git a/functions_l.html b/functions_l.html new file mode 100644 index 00000000..758d7749 --- /dev/null +++ b/functions_l.html @@ -0,0 +1,82 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
+ + + + diff --git a/functions_m.html b/functions_m.html new file mode 100644 index 00000000..8ffdd71f --- /dev/null +++ b/functions_m.html @@ -0,0 +1,88 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- m -

+
+ + + + diff --git a/functions_n.html b/functions_n.html new file mode 100644 index 00000000..8b6a9f29 --- /dev/null +++ b/functions_n.html @@ -0,0 +1,79 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

+
+ + + + diff --git a/functions_p.html b/functions_p.html new file mode 100644 index 00000000..1f369ac3 --- /dev/null +++ b/functions_p.html @@ -0,0 +1,101 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
+ + + + diff --git a/functions_r.html b/functions_r.html new file mode 100644 index 00000000..5a6f0c70 --- /dev/null +++ b/functions_r.html @@ -0,0 +1,92 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
+ + + + diff --git a/functions_s.html b/functions_s.html new file mode 100644 index 00000000..d626dba0 --- /dev/null +++ b/functions_s.html @@ -0,0 +1,235 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
+ + + + diff --git a/functions_t.html b/functions_t.html new file mode 100644 index 00000000..fe51f7ce --- /dev/null +++ b/functions_t.html @@ -0,0 +1,85 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
+ + + + diff --git a/functions_u.html b/functions_u.html new file mode 100644 index 00000000..e4581f5c --- /dev/null +++ b/functions_u.html @@ -0,0 +1,85 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- u -

+
+ + + + diff --git a/functions_v.html b/functions_v.html new file mode 100644 index 00000000..7aa897b5 --- /dev/null +++ b/functions_v.html @@ -0,0 +1,79 @@ + + + + + + + +libm2k: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- v -

+
+ + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 00000000..4aa96b6b --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,164 @@ + + + + + + + +libm2k: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/graph_legend.html b/graph_legend.html new file mode 100644 index 00000000..57c0bc52 --- /dev/null +++ b/graph_legend.html @@ -0,0 +1,103 @@ + + + + + + + +libm2k: Graph Legend + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
class Invisible { };
/*! Truncated class, inheritance relation is hidden */
class Truncated : public Invisible { };
/* Class not documented with doxygen comments */
class Undocumented { };
/*! Class that is inherited using public inheritance */
class PublicBase : public Truncated { };
/*! A template class */
template<class T> class Templ { };
/*! Class that is inherited using protected inheritance */
class ProtectedBase { };
/*! Class that is inherited using private inheritance */
class PrivateBase { };
/*! Class that is used by the Inherited class */
class Used { };
/*! Super class that inherits a number of other classes */
class Inherited : public PublicBase,
protected ProtectedBase,
private PrivateBase,
public Undocumented,
public Templ<int>
{
private:
Used *m_usedClass;
};

This will result in the following graph:

+
+

The boxes in the above graph have the following meaning:

+ +

The arrows have the following meaning:

+ +
+ + + + diff --git a/graph_legend.md5 b/graph_legend.md5 new file mode 100644 index 00000000..3b4f8ab2 --- /dev/null +++ b/graph_legend.md5 @@ -0,0 +1 @@ +2779a1676ca72f29ac6dddfb5b5a4bb2 \ No newline at end of file diff --git a/graph_legend.png b/graph_legend.png new file mode 100644 index 00000000..7e2cbcfb Binary files /dev/null and b/graph_legend.png differ diff --git a/group__analog.html b/group__analog.html new file mode 100644 index 00000000..5348bea9 --- /dev/null +++ b/group__analog.html @@ -0,0 +1,112 @@ + + + + + + + +libm2k: Analog + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
Analog
+
+
+ +

Contains all analogical components. +More...

+
+Collaboration diagram for Analog:
+
+
+ + + + + + + +
+
+ + + + + + + + + + + + + + +

+Modules

 AnalogIn
 Contains the representation of the analogical input segment.
 
 AnalogOut
 Contains the representation of the analogical output segment.
 
 PowerSupply
 Contains the representation of the power supply.
 
 DMM
 Contains the representation of the digital multimeter.
 
+

Detailed Description

+

Contains all analogical components.

+
+ + + + diff --git a/group__analog.map b/group__analog.map new file mode 100644 index 00000000..5139dec5 --- /dev/null +++ b/group__analog.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/group__analog.md5 b/group__analog.md5 new file mode 100644 index 00000000..f1fabfee --- /dev/null +++ b/group__analog.md5 @@ -0,0 +1 @@ +286f0ced0a2cfed160bdd68aa313d642 \ No newline at end of file diff --git a/group__analog.png b/group__analog.png new file mode 100644 index 00000000..f2eef580 Binary files /dev/null and b/group__analog.png differ diff --git a/group__analogin.html b/group__analogin.html new file mode 100644 index 00000000..e92c757b --- /dev/null +++ b/group__analogin.html @@ -0,0 +1,1929 @@ + + + + + + + +libm2k: AnalogIn + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
AnalogIn
+
+
+ +

Contains the representation of the analogical input segment. +More...

+
+Collaboration diagram for AnalogIn:
+
+
+ + + + +
+
+ + + + + +

+Classes

class  libm2k::analog::M2kAnalogIn
 Controls the analogical input compound. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

virtual void libm2k::analog::M2kAnalogIn::startAcquisition (unsigned int nb_samples)=0
 Create the buffer for both channels and start the acquisition. More...
 
+virtual void libm2k::analog::M2kAnalogIn::stopAcquisition ()=0
 Destroy the buffer and stop the acquisition.
 
virtual std::vector< std::vector< double > > libm2k::analog::M2kAnalogIn::getSamples (unsigned int nb_samples)=0
 Retrieve a specific number of samples from each channel. More...
 
virtual std::vector< std::vector< double > > libm2k::analog::M2kAnalogIn::getSamplesRaw (unsigned int nb_samples)=0
 Retrieve a specific number of raw samples from each channel. More...
 
virtual const double * libm2k::analog::M2kAnalogIn::getSamplesInterleaved (unsigned int nb_samples_per_channel)=0
 Retrieve a specific number of samples from each channel. More...
 
virtual const short * libm2k::analog::M2kAnalogIn::getSamplesRawInterleaved (unsigned int nb_samples_per_channel)=0
 Retrieve a specific number of raw samples from each channel. More...
 
virtual const double * libm2k::analog::M2kAnalogIn::getSamplesInterleaved_matlab (unsigned int nb_samples)=0
 Retrieve a specific number of samples from both channels. More...
 
virtual const short * libm2k::analog::M2kAnalogIn::getSamplesRawInterleaved_matlab (unsigned int nb_samples)=0
 Retrieve a specific number of raw samples from both channels. More...
 
virtual short libm2k::analog::M2kAnalogIn::getVoltageRaw (unsigned int ch)=0
 Retrieve the average raw value of the given channel. More...
 
virtual double libm2k::analog::M2kAnalogIn::getVoltage (unsigned int ch)=0
 Retrieve the average voltage of the given channel. More...
 
virtual short libm2k::analog::M2kAnalogIn::getVoltageRaw (libm2k::analog::ANALOG_IN_CHANNEL ch)=0
 Retrieve the average raw value of the given channel. More...
 
virtual double libm2k::analog::M2kAnalogIn::getVoltage (libm2k::analog::ANALOG_IN_CHANNEL ch)=0
 Retrieve the average voltage of the given channel. More...
 
virtual std::vector< short > libm2k::analog::M2kAnalogIn::getVoltageRaw ()=0
 Retrieve the average raw value for each channel. More...
 
virtual std::vector< double > libm2k::analog::M2kAnalogIn::getVoltage ()=0
 Retrieve the average voltage for each channel. More...
 
virtual const short * libm2k::analog::M2kAnalogIn::getVoltageRawP ()=0
 Retrieve the average raw value for both channels. More...
 
virtual const double * libm2k::analog::M2kAnalogIn::getVoltageP ()=0
 Retrieve the average voltage for both channels. More...
 
virtual void libm2k::analog::M2kAnalogIn::setVerticalOffset (ANALOG_IN_CHANNEL channel, double vertOffset)=0
 Set the vertical offset, in Volts, of a specific channel. More...
 
virtual double libm2k::analog::M2kAnalogIn::getVerticalOffset (ANALOG_IN_CHANNEL channel)=0
 getVerticalOffset More...
 
virtual double libm2k::analog::M2kAnalogIn::getScalingFactor (libm2k::analog::ANALOG_IN_CHANNEL ch)=0
 Retrieve the scaling factor. More...
 
virtual void libm2k::analog::M2kAnalogIn::setRange (ANALOG_IN_CHANNEL channel, M2K_RANGE range)=0
 Set the range for the given channel. More...
 
virtual void libm2k::analog::M2kAnalogIn::setRange (ANALOG_IN_CHANNEL channel, double min, double max)=0
 Set the range for the given channel. More...
 
virtual libm2k::analog::M2K_RANGE libm2k::analog::M2kAnalogIn::getRange (libm2k::analog::ANALOG_IN_CHANNEL channel)=0
 Retrieve the range for the given channel. More...
 
virtual std::pair< double, double > libm2k::analog::M2kAnalogIn::getRangeLimits (libm2k::analog::M2K_RANGE range)=0
 Retrieve the bounds for the given range. More...
 
virtual std::vector< std::pair< std::string, std::pair< double, double > > > libm2k::analog::M2kAnalogIn::getAvailableRanges ()=0
 Retrieve all ranges that are available. More...
 
virtual int libm2k::analog::M2kAnalogIn::getOversamplingRatio ()=0
 Retrieve the global oversampling ratio. More...
 
virtual int libm2k::analog::M2kAnalogIn::getOversamplingRatio (unsigned int chn_idx)=0
 Retrieve the oversampling ratio for the given channel. More...
 
virtual int libm2k::analog::M2kAnalogIn::setOversamplingRatio (int oversampling)=0
 Set the global oversampling ratio. More...
 
virtual int libm2k::analog::M2kAnalogIn::setOversamplingRatio (unsigned int chn_idx, int oversampling)=0
 Set the oversampling ratio for the given channel. More...
 
virtual double libm2k::analog::M2kAnalogIn::getSampleRate ()=0
 Retrieve the global sample rate. More...
 
virtual std::vector< double > libm2k::analog::M2kAnalogIn::getAvailableSampleRates ()=0
 getAvailableSampleRates More...
 
virtual double libm2k::analog::M2kAnalogIn::setSampleRate (double samplerate)=0
 Set the global sample rate. More...
 
virtual std::pair< double, double > libm2k::analog::M2kAnalogIn::getHysteresisRange (ANALOG_IN_CHANNEL chn)=0
 Retrieve the bounds of the analogical trigger's hysteresis for the given channel. More...
 
virtual double libm2k::analog::M2kAnalogIn::getFilterCompensation (double samplerate)=0
 Retrieve the filter compensation for the given sample rate. More...
 
virtual double libm2k::analog::M2kAnalogIn::getValueForRange (M2K_RANGE range)=0
 Retrieve the numeric value corresponding to the given range. More...
 
virtual double libm2k::analog::M2kAnalogIn::convertRawToVolts (unsigned int channel, short raw)=0
 Convert the raw value of a sample into volts. More...
 
virtual short libm2k::analog::M2kAnalogIn::convertVoltsToRaw (unsigned int channel, double voltage)=0
 Convert the voltage value of a sample into raw. More...
 
virtual unsigned int libm2k::analog::M2kAnalogIn::getNbChannels ()=0
 Retrieve the number of analogical channels. More...
 
virtual std::string libm2k::analog::M2kAnalogIn::getName ()=0
 Retrieve the name of the device. More...
 
virtual void libm2k::analog::M2kAnalogIn::enableChannel (unsigned int chnIdx, bool enable)=0
 Enable or disable the given channel. More...
 
virtual bool libm2k::analog::M2kAnalogIn::isChannelEnabled (unsigned int chnIdx)=0
 Retrieve the state of the given channel. More...
 
virtual void libm2k::analog::M2kAnalogIn::cancelAcquisition ()=0
 Cancel all buffer operations. More...
 
virtual void libm2k::analog::M2kAnalogIn::setKernelBuffersCount (unsigned int count)=0
 Set the kernel buffers to a specific value. More...
 
virtual unsigned int libm2k::analog::M2kAnalogIn::getKernelBuffersCount () const =0
 Get the number of kernel buffers. More...
 
virtual libm2k::M2kHardwareTriggerlibm2k::analog::M2kAnalogIn::getTrigger ()=0
 Get the hardware trigger handler. More...
 
virtual struct IIO_OBJECTS libm2k::analog::M2kAnalogIn::getIioObjects ()=0
 Get access to IIO channels, buffers, devices and context. Can be used when debugging directly with libiio. More...
 
virtual void libm2k::analog::M2kAnalogIn::getSamples (std::vector< std::vector< double >> &data, unsigned int nb_samples)=0
 Retrieve a specific number of samples from each channel. More...
 
virtual std::string libm2k::analog::M2kAnalogIn::getChannelName (unsigned int channel)=0
 Get the channel name for each ADC channel. More...
 
virtual double libm2k::analog::M2kAnalogIn::getMaximumSamplerate ()=0
 Get the maximum samplerate for the ADC. More...
 
+

Detailed Description

+

Contains the representation of the analogical input segment.

+

Function Documentation

+ +

◆ cancelAcquisition()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void libm2k::analog::M2kAnalogIn::cancelAcquisition ()
+
+pure virtual
+
+ +

Cancel all buffer operations.

+
Note
Should be used to cancel an ongoing acquisition
+ +
+
+ +

◆ convertRawToVolts()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual double libm2k::analog::M2kAnalogIn::convertRawToVolts (unsigned int channel,
short raw 
)
+
+pure virtual
+
+ +

Convert the raw value of a sample into volts.

+
Parameters
+ + + +
rawthe raw value of a sample;
channelThe index corresponding to the channel;
+
+
+
Returns
The value of a sample converted into volts;
+ +
+
+ +

◆ convertVoltsToRaw()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual short libm2k::analog::M2kAnalogIn::convertVoltsToRaw (unsigned int channel,
double voltage 
)
+
+pure virtual
+
+ +

Convert the voltage value of a sample into raw.

+
Parameters
+ + + +
voltageThe voltage value of a sample;
channelThe index corresponding to the channel;
+
+
+
Returns
The value of a sample converted into raw;
+ +
+
+ +

◆ enableChannel()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kAnalogIn::enableChannel (unsigned int chnIdx,
bool enable 
)
+
+pure virtual
+
+ +

Enable or disable the given channel.

+
Parameters
+ + + +
chnIdxThe index corresponding to the channel
enableA boolean value corresponding to the channel's state
+
+
+ +
+
+ +

◆ getAvailableRanges()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector<std::pair<std::string, std::pair<double, double> > > libm2k::analog::M2kAnalogIn::getAvailableRanges ()
+
+pure virtual
+
+ +

Retrieve all ranges that are available.

+
Returns
A list of pairs containing all available ranges and their name
+ +
+
+ +

◆ getAvailableSampleRates()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector<double> libm2k::analog::M2kAnalogIn::getAvailableSampleRates ()
+
+pure virtual
+
+ +

getAvailableSampleRates

+
Returns
The list of available samplerates for this device
+ +
+
+ +

◆ getChannelName()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::string libm2k::analog::M2kAnalogIn::getChannelName (unsigned int channel)
+
+pure virtual
+
+ +

Get the channel name for each ADC channel.

+
Parameters
+ + +
channel- unsigned int representing the index of the channel
+
+
+
Returns
std::string - name of the channel
+ +
+
+ +

◆ getFilterCompensation()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::analog::M2kAnalogIn::getFilterCompensation (double samplerate)
+
+pure virtual
+
+ +

Retrieve the filter compensation for the given sample rate.

+
Parameters
+ + +
samplerateA double value representing the sample rate
+
+
+
Returns
The value of the filter compensation
+ +
+
+ +

◆ getHysteresisRange()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::pair<double, double> libm2k::analog::M2kAnalogIn::getHysteresisRange (ANALOG_IN_CHANNEL chn)
+
+pure virtual
+
+ +

Retrieve the bounds of the analogical trigger's hysteresis for the given channel.

+
Parameters
+ + +
chnAn enumerator corresponding to the channel's index
+
+
+
Returns
A pair containing the lower and upper bound
+ +
+
+ +

◆ getIioObjects()

+ +
+
+ + + + + +
+ + + + + + + +
virtual struct IIO_OBJECTS libm2k::analog::M2kAnalogIn::getIioObjects ()
+
+pure virtual
+
+ +

Get access to IIO channels, buffers, devices and context. Can be used when debugging directly with libiio.

+
Returns
IIO_OBJECTS structure.
+ +
+
+ +

◆ getKernelBuffersCount()

+ +
+
+ + + + + +
+ + + + + + + +
virtual unsigned int libm2k::analog::M2kAnalogIn::getKernelBuffersCount () const
+
+pure virtual
+
+ +

Get the number of kernel buffers.

+
Returns
the number of previously set kernel buffers (saved in this session)
+ +
+
+ +

◆ getMaximumSamplerate()

+ +
+
+ + + + + +
+ + + + + + + +
virtual double libm2k::analog::M2kAnalogIn::getMaximumSamplerate ()
+
+pure virtual
+
+ +

Get the maximum samplerate for the ADC.

+
Returns
double - the value of the maximum samplerate
+ +
+
+ +

◆ getName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string libm2k::analog::M2kAnalogIn::getName ()
+
+pure virtual
+
+ +

Retrieve the name of the device.

+
Returns
The name of the device
+ +
+
+ +

◆ getNbChannels()

+ +
+
+ + + + + +
+ + + + + + + +
virtual unsigned int libm2k::analog::M2kAnalogIn::getNbChannels ()
+
+pure virtual
+
+ +

Retrieve the number of analogical channels.

+
Returns
The number of channels
+ +
+
+ +

◆ getOversamplingRatio() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
virtual int libm2k::analog::M2kAnalogIn::getOversamplingRatio ()
+
+pure virtual
+
+ +

Retrieve the global oversampling ratio.

+
Returns
The value of the global ratio
+ +
+
+ +

◆ getOversamplingRatio() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual int libm2k::analog::M2kAnalogIn::getOversamplingRatio (unsigned int chn_idx)
+
+pure virtual
+
+ +

Retrieve the oversampling ratio for the given channel.

+
Parameters
+ + +
chn_idxThe index corresponding to the channel
+
+
+
Returns
The ratio value
+ +
+
+ +

◆ getRange()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual libm2k::analog::M2K_RANGE libm2k::analog::M2kAnalogIn::getRange (libm2k::analog::ANALOG_IN_CHANNEL channel)
+
+pure virtual
+
+ +

Retrieve the range for the given channel.

+
Parameters
+ + +
channelAn enumerator corresponding to the channel's index
+
+
+
Returns
An enumerator corresponding to the range
+ +
+
+ +

◆ getRangeLimits()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::pair<double, double> libm2k::analog::M2kAnalogIn::getRangeLimits (libm2k::analog::M2K_RANGE range)
+
+pure virtual
+
+ +

Retrieve the bounds for the given range.

+
Parameters
+ + +
rangeAn enumerator corresponding to the range
+
+
+
Returns
A pair containing the lower and upper bound
+ +
+
+ +

◆ getSampleRate()

+ +
+
+ + + + + +
+ + + + + + + +
virtual double libm2k::analog::M2kAnalogIn::getSampleRate ()
+
+pure virtual
+
+ +

Retrieve the global sample rate.

+
Returns
The value of the sample rate
+ +
+
+ +

◆ getSamples() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::vector<std::vector<double> > libm2k::analog::M2kAnalogIn::getSamples (unsigned int nb_samples)
+
+pure virtual
+
+ +

Retrieve a specific number of samples from each channel.

+
Parameters
+ + +
nb_samplesThe number of samples that will be retrieved
+
+
+
Returns
A list containing lists of samples for each channel
+
Note
The index of the list corresponds to the index of the channel
+
+Due to a hardware limitation, the number of samples must be a multiple of 4 and greater than 16.
+ +
+
+ +

◆ getSamples() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kAnalogIn::getSamples (std::vector< std::vector< double >> & data,
unsigned int nb_samples 
)
+
+pure virtual
+
+ +

Retrieve a specific number of samples from each channel.

+
Parameters
+ + + +
data- a reference to a vector owned/created by the client
nb_samplesThe number of samples that will be retrieved
+
+
+
Note
The vector will be cleaned and then filled with samples
+
+The index of the list corresponds to the index of the channel
+
+Due to a hardware limitation, the number of samples must be a multiple of 4 and greater than 16.
+ +
+
+ +

◆ getSamplesInterleaved()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual const double* libm2k::analog::M2kAnalogIn::getSamplesInterleaved (unsigned int nb_samples_per_channel)
+
+pure virtual
+
+ +

Retrieve a specific number of samples from each channel.

+
Parameters
+ + +
nb_samples_per_channelThe number of samples that will be retrieved
+
+
+
Returns
A pointer to the interleaved samples
+
Note
Before the acquisition, both channels will be automatically enabled
+
+The data array will contain samples from both channels
+
+After the acquisition is finished, the channels will return to their initial state
+
+Due to a hardware limitation, the number of samples must be a multiple of 4 and greater than 16.
+ +
+
+ +

◆ getSamplesInterleaved_matlab()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual const double* libm2k::analog::M2kAnalogIn::getSamplesInterleaved_matlab (unsigned int nb_samples)
+
+pure virtual
+
+ +

Retrieve a specific number of samples from both channels.

+
Parameters
+ + +
nb_samplesThe number of samples that will be retrieved
+
+
+
Returns
A pointer to the interleaved samples
+
Note
MATLAB specific API wrapper
+
+Before the acquisition, both channels will be automatically enabled
+
+The data array will contain samples from both channels
+
+The data array will contain nb_samples/2 for each channel
+
+After the acquisition is finished, the channels will return to their initial state
+
+Due to a hardware limitation, the number of samples must be a multiple of 4 and greater than 16.
+ +
+
+ +

◆ getSamplesRaw()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::vector<std::vector<double> > libm2k::analog::M2kAnalogIn::getSamplesRaw (unsigned int nb_samples)
+
+pure virtual
+
+ +

Retrieve a specific number of raw samples from each channel.

+
Parameters
+ + +
nb_samplesThe number of samples that will be retrieved
+
+
+
Returns
A list containing lists of raw samples for each channel
+
Note
The index of the list corresponds to the index of the channel
+
+Due to a hardware limitation, the number of samples must be a multiple of 4 and greater than 16.
+ +
+
+ +

◆ getSamplesRawInterleaved()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual const short* libm2k::analog::M2kAnalogIn::getSamplesRawInterleaved (unsigned int nb_samples_per_channel)
+
+pure virtual
+
+ +

Retrieve a specific number of raw samples from each channel.

+
Parameters
+ + +
nb_samples_per_channelThe number of samples that will be retrieved
+
+
+
Returns
A pointer to the interleaved raw samples
+
Note
Before the acquisition, both channels will be automatically enabled
+
+The data array will contain samples from both channels
+
+After the acquisition is finished, the channels will return to their initial state
+
+Due to a hardware limitation, the number of samples must be a multiple of 4 and greater than 16.
+ +
+
+ +

◆ getSamplesRawInterleaved_matlab()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual const short* libm2k::analog::M2kAnalogIn::getSamplesRawInterleaved_matlab (unsigned int nb_samples)
+
+pure virtual
+
+ +

Retrieve a specific number of raw samples from both channels.

+
Parameters
+ + +
nb_samplesThe number of samples that will be retrieved
+
+
+
Returns
A pointer to the interleaved raw samples
+
Note
MATLAB specific API wrapper
+
+Before the acquisition, both channels will be automatically enabled
+
+The data array will contain samples from both channels
+
+The data array will contain nb_samples/2 for each channel
+
+After the acquisition is finished, the channels will return to their initial state
+
+Due to a hardware limitation, the number of samples must be a multiple of 4 and greater than 16.
+ +
+
+ +

◆ getScalingFactor()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::analog::M2kAnalogIn::getScalingFactor (libm2k::analog::ANALOG_IN_CHANNEL ch)
+
+pure virtual
+
+ +

Retrieve the scaling factor.

+
Parameters
+ + +
chAn enumerator corresponding to the channel's index
+
+
+
Returns
The value of the scaling factor
+ +
+
+ +

◆ getTrigger()

+ +
+
+ + + + + +
+ + + + + + + +
virtual libm2k::M2kHardwareTrigger* libm2k::analog::M2kAnalogIn::getTrigger ()
+
+pure virtual
+
+ +

Get the hardware trigger handler.

+
Returns
A pointer to the hardware trigger trigger
+ +
+
+ +

◆ getValueForRange()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::analog::M2kAnalogIn::getValueForRange (M2K_RANGE range)
+
+pure virtual
+
+ +

Retrieve the numeric value corresponding to the given range.

+
Parameters
+ + +
range
+
+
+
Returns
double
+ +
+
+ +

◆ getVerticalOffset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::analog::M2kAnalogIn::getVerticalOffset (ANALOG_IN_CHANNEL channel)
+
+pure virtual
+
+ +

getVerticalOffset

+
Parameters
+ + +
channelthe index of the channel
+
+
+
Returns
the value of the offset in Volts
+ +
+
+ +

◆ getVoltage() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::analog::M2kAnalogIn::getVoltage (unsigned int ch)
+
+pure virtual
+
+ +

Retrieve the average voltage of the given channel.

+
Parameters
+ + +
chThe index corresponding to the channel
+
+
+
Returns
The average voltage
+ +
+
+ +

◆ getVoltage() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::analog::M2kAnalogIn::getVoltage (libm2k::analog::ANALOG_IN_CHANNEL ch)
+
+pure virtual
+
+ +

Retrieve the average voltage of the given channel.

+
Parameters
+ + +
chAn enumerator corresponding to the channel's index
+
+
+
Returns
The average voltage
+ +
+
+ +

◆ getVoltage() [3/3]

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector<double> libm2k::analog::M2kAnalogIn::getVoltage ()
+
+pure virtual
+
+ +

Retrieve the average voltage for each channel.

+
Returns
A list containing the average voltage of each channel
+
Note
The index of the voltage corresponds to the channel's index
+ +
+
+ +

◆ getVoltageP()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const double* libm2k::analog::M2kAnalogIn::getVoltageP ()
+
+pure virtual
+
+ +

Retrieve the average voltage for both channels.

+
Returns
A pointer to the average voltage of both channels
+ +
+
+ +

◆ getVoltageRaw() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual short libm2k::analog::M2kAnalogIn::getVoltageRaw (unsigned int ch)
+
+pure virtual
+
+ +

Retrieve the average raw value of the given channel.

+
Parameters
+ + +
chThe index corresponding to the channel
+
+
+
Returns
The average raw value
+ +
+
+ +

◆ getVoltageRaw() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual short libm2k::analog::M2kAnalogIn::getVoltageRaw (libm2k::analog::ANALOG_IN_CHANNEL ch)
+
+pure virtual
+
+ +

Retrieve the average raw value of the given channel.

+
Parameters
+ + +
chAn enumerator corresponding to the channel's index
+
+
+
Returns
The average raw value
+ +
+
+ +

◆ getVoltageRaw() [3/3]

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector<short> libm2k::analog::M2kAnalogIn::getVoltageRaw ()
+
+pure virtual
+
+ +

Retrieve the average raw value for each channel.

+
Returns
A list containing the average raw value of each channel
+
Note
The index of the value corresponds to the channel's index
+ +
+
+ +

◆ getVoltageRawP()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const short* libm2k::analog::M2kAnalogIn::getVoltageRawP ()
+
+pure virtual
+
+ +

Retrieve the average raw value for both channels.

+
Returns
A pointer to the average raw value of both channels
+ +
+
+ +

◆ isChannelEnabled()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool libm2k::analog::M2kAnalogIn::isChannelEnabled (unsigned int chnIdx)
+
+pure virtual
+
+ +

Retrieve the state of the given channel.

+
Parameters
+ + +
chnIdxThe index corresponding to the channel
+
+
+
Returns
True if the channel is enabled
+
+False if the channel is disabled
+ +
+
+ +

◆ setKernelBuffersCount()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::analog::M2kAnalogIn::setKernelBuffersCount (unsigned int count)
+
+pure virtual
+
+ +

Set the kernel buffers to a specific value.

+
Parameters
+ + +
countthe number of kernel buffers
+
+
+ +
+
+ +

◆ setOversamplingRatio() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual int libm2k::analog::M2kAnalogIn::setOversamplingRatio (int oversampling)
+
+pure virtual
+
+ +

Set the global oversampling ratio.

+
Parameters
+ + +
oversamplingInteger value to set the oversampling ratio to
+
+
+
Returns
The current value of the global ratio
+ +
+
+ +

◆ setOversamplingRatio() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual int libm2k::analog::M2kAnalogIn::setOversamplingRatio (unsigned int chn_idx,
int oversampling 
)
+
+pure virtual
+
+ +

Set the oversampling ratio for the given channel.

+
Parameters
+ + + +
chn_idxThe index corresponding to the channel
oversamplingInteger value to set the oversampling ratio to
+
+
+
Returns
The current ratio value
+ +
+
+ +

◆ setRange() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kAnalogIn::setRange (ANALOG_IN_CHANNEL channel,
M2K_RANGE range 
)
+
+pure virtual
+
+ +

Set the range for the given channel.

+
Parameters
+ + + +
channelAn enumerator corresponding to the channel's index
rangeAn enumerator corresponding to a range
+
+
+ +
+
+ +

◆ setRange() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kAnalogIn::setRange (ANALOG_IN_CHANNEL channel,
double min,
double max 
)
+
+pure virtual
+
+ +

Set the range for the given channel.

+
Parameters
+ + + + +
channelAn enumerator corresponding to the channel's index
minUpper bound
maxLower bound
+
+
+ +
+
+ +

◆ setSampleRate()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::analog::M2kAnalogIn::setSampleRate (double samplerate)
+
+pure virtual
+
+ +

Set the global sample rate.

+
Parameters
+ + +
samplerateA double value to set the sample rate to
+
+
+
Returns
The value of the global sample rate
+ +
+
+ +

◆ setVerticalOffset()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kAnalogIn::setVerticalOffset (ANALOG_IN_CHANNEL channel,
double vertOffset 
)
+
+pure virtual
+
+ +

Set the vertical offset, in Volts, of a specific channel.

+
Parameters
+ + + +
channelthe index of the channel
vertOffsetthe value of the offset in Volts
+
+
+ +
+
+ +

◆ startAcquisition()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::analog::M2kAnalogIn::startAcquisition (unsigned int nb_samples)
+
+pure virtual
+
+ +

Create the buffer for both channels and start the acquisition.

+
Parameters
+ + +
nb_samplessize of the buffer in samples for each channel
+
+
+ +
+
+
+ + + + diff --git a/group__analogin.map b/group__analogin.map new file mode 100644 index 00000000..d7e56f72 --- /dev/null +++ b/group__analogin.map @@ -0,0 +1,4 @@ + + + + diff --git a/group__analogin.md5 b/group__analogin.md5 new file mode 100644 index 00000000..ea32a452 --- /dev/null +++ b/group__analogin.md5 @@ -0,0 +1 @@ +9089f6d48622168621fd87f97880b781 \ No newline at end of file diff --git a/group__analogin.png b/group__analogin.png new file mode 100644 index 00000000..6e0b0d03 Binary files /dev/null and b/group__analogin.png differ diff --git a/group__analogout.html b/group__analogout.html new file mode 100644 index 00000000..cdc72715 --- /dev/null +++ b/group__analogout.html @@ -0,0 +1,1981 @@ + + + + + + + +libm2k: AnalogOut + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
AnalogOut
+
+
+ +

Contains the representation of the analogical output segment. +More...

+
+Collaboration diagram for AnalogOut:
+
+
+ + + + +
+
+ + + + + +

+Classes

class  libm2k::analog::M2kAnalogOut
 Controls the analogical output compound. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

virtual std::vector< int > libm2k::analog::M2kAnalogOut::getOversamplingRatio ()=0
 Retrieve the global oversampling ratio. More...
 
virtual int libm2k::analog::M2kAnalogOut::getOversamplingRatio (unsigned int chn)=0
 Retrieve the oversampling ratio for the given channel. More...
 
virtual std::vector< int > libm2k::analog::M2kAnalogOut::setOversamplingRatio (std::vector< int > oversampling_ratio)=0
 Set the value of the oversampling ratio for each channel. More...
 
virtual int libm2k::analog::M2kAnalogOut::setOversamplingRatio (unsigned int chn, int oversampling_ratio)=0
 Set the oversampling ratio for the given channel. More...
 
virtual std::vector< double > libm2k::analog::M2kAnalogOut::getSampleRate ()=0
 Retrieve the sample rate of both DACs. More...
 
virtual double libm2k::analog::M2kAnalogOut::getSampleRate (unsigned int chn)=0
 Retrieve the sample rate for the given channel. More...
 
virtual std::vector< double > libm2k::analog::M2kAnalogOut::getAvailableSampleRates (unsigned int chn)=0
 getAvailableSampleRates More...
 
virtual std::vector< double > libm2k::analog::M2kAnalogOut::setSampleRate (std::vector< double > samplerates)=0
 Set the sample rate for both channels. More...
 
virtual double libm2k::analog::M2kAnalogOut::setSampleRate (unsigned int chn, double samplerate)=0
 Set the sample rate for the given channel. More...
 
virtual void libm2k::analog::M2kAnalogOut::setCyclic (bool en)=0
 Enable or disable the cyclic mode for all digital channels. More...
 
virtual void libm2k::analog::M2kAnalogOut::setCyclic (unsigned int chn, bool en)=0
 Enable or disable the cyclic mode for all digital channels. More...
 
virtual bool libm2k::analog::M2kAnalogOut::getCyclic (unsigned int chn)=0
 Retrieve the value of the cyclic mode. More...
 
virtual double libm2k::analog::M2kAnalogOut::getScalingFactor (unsigned int chn)=0
 Retrieve the scaling factor for the given channel. More...
 
virtual double libm2k::analog::M2kAnalogOut::getFilterCompensation (double samplerate)=0
 Retrieve the filter compensation for the given sample rate. More...
 
virtual void libm2k::analog::M2kAnalogOut::pushBytes (unsigned int chnIdx, double *data, unsigned int nb_samples)=0
 Send the samples to the given channel. More...
 
virtual void libm2k::analog::M2kAnalogOut::pushRawBytes (unsigned int chnIdx, short *data, unsigned int nb_samples)=0
 Send the samples to the given channel. More...
 
virtual void libm2k::analog::M2kAnalogOut::pushInterleaved (double *data, unsigned int nb_channels, unsigned int nb_samples)=0
 Send samples to all the channels. More...
 
virtual void libm2k::analog::M2kAnalogOut::pushRawInterleaved (short *data, unsigned int nb_channels, unsigned int nb_samples)=0
 Send samples to all the channels. More...
 
virtual void libm2k::analog::M2kAnalogOut::push (unsigned int chnIdx, std::vector< double > const &data)=0
 Send the samples to the given channel. More...
 
virtual void libm2k::analog::M2kAnalogOut::pushRaw (unsigned int chnIdx, std::vector< short > const &data)=0
 Send the samples to the given channel. More...
 
virtual void libm2k::analog::M2kAnalogOut::push (std::vector< std::vector< double >> const &data)=0
 Send samples to channels. More...
 
virtual void libm2k::analog::M2kAnalogOut::pushRaw (std::vector< std::vector< short >> const &data)=0
 Send samples to channels. More...
 
virtual void libm2k::analog::M2kAnalogOut::stop ()=0
 Stop all channels from sending the signals. More...
 
virtual void libm2k::analog::M2kAnalogOut::stop (unsigned int chn)=0
 Stop the given channels from sending the signals. More...
 
virtual void libm2k::analog::M2kAnalogOut::cancelBuffer ()=0
 Cancel all buffer operations of enabled channels. More...
 
virtual void libm2k::analog::M2kAnalogOut::cancelBuffer (unsigned int chn)=0
 Cancel all buffer operations of the given channel. More...
 
virtual void libm2k::analog::M2kAnalogOut::enableChannel (unsigned int chnIdx, bool enable)=0
 Enable or disable the given digital channel. More...
 
virtual bool libm2k::analog::M2kAnalogOut::isChannelEnabled (unsigned int chnIdx)=0
 Check if the given channel is enabled. More...
 
virtual bool libm2k::analog::M2kAnalogOut::isPushDone (unsigned int chnIdx) const =0
 Check if the generation of the signal (only for non-cyclic buffer) is done. More...
 
virtual void libm2k::analog::M2kAnalogOut::setKernelBuffersCount (unsigned int chnIdx, unsigned int count)=0
 Set the kernel buffers to a specific value. More...
 
virtual unsigned int libm2k::analog::M2kAnalogOut::getKernelBuffersCount (unsigned int chnIdx) const =0
 Get the number of kernel buffers. More...
 
virtual short libm2k::analog::M2kAnalogOut::convertVoltsToRaw (unsigned int channel, double voltage)=0
 Convert the volts value of a sample into raw. More...
 
virtual double libm2k::analog::M2kAnalogOut::convertRawToVolts (unsigned int channel, short raw)=0
 Convert the raw value of a sample into volts. More...
 
virtual struct IIO_OBJECTS libm2k::analog::M2kAnalogOut::getIioObjects ()=0
 Get access to IIO channels, buffers, devices and context. More...
 
virtual unsigned int libm2k::analog::M2kAnalogOut::getNbChannels ()=0
 Retrieve the number of analogical channels. More...
 
virtual std::string libm2k::analog::M2kAnalogOut::getChannelName (unsigned int channel)=0
 Get the channel name for each DAC channel. More...
 
virtual double libm2k::analog::M2kAnalogOut::getMaximumSamplerate (unsigned int chn_idx)=0
 Get the maximum samplerate for the DAC. More...
 
virtual unsigned short libm2k::analog::M2kAnalogOut::setVoltage (unsigned int chn_idx, double volts)=0
 Sets the voltage output of the DAC channel. More...
 
virtual unsigned short libm2k::analog::M2kAnalogOut::setVoltageRaw (unsigned int chn_idx, unsigned short raw)=0
 Sets the raw output of the DAC channel. More...
 
virtual libm2k::M2kHardwareTriggerlibm2k::analog::M2kAnalogOut::getTrigger ()=0
 Get the hardware trigger handler. More...
 
virtual void libm2k::analog::M2kAnalogOut::setBufferRearmOnTrigger (bool enable)=0
 Allows sequential output of multiple buffers with each trigger event. More...
 
virtual bool libm2k::analog::M2kAnalogOut::getBufferRearmOnTrigger () const =0
 Retrieve the value of the attribute that controls buffer rearm on trigger. More...
 
+

Detailed Description

+

Contains the representation of the analogical output segment.

+

Function Documentation

+ +

◆ cancelBuffer() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::cancelBuffer ()
+
+pure virtual
+
+ +

Cancel all buffer operations of enabled channels.

+
Note
Should be used to cancel an ongoing data write.
+ +
+
+ +

◆ cancelBuffer() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::cancelBuffer (unsigned int chn)
+
+pure virtual
+
+ +

Cancel all buffer operations of the given channel.

+
Parameters
+ + +
chnThe index corresponding to the channel
+
+
+
Note
Should be used to cancel an ongoing data write.
+ +
+
+ +

◆ convertRawToVolts()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual double libm2k::analog::M2kAnalogOut::convertRawToVolts (unsigned int channel,
short raw 
)
+
+pure virtual
+
+ +

Convert the raw value of a sample into volts.

+
Parameters
+ + + +
channelThe index corresponding to the channel
rawThe raw value of a sample
+
+
+
Returns
The value of a sample converted into volts
+ +
+
+ +

◆ convertVoltsToRaw()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual short libm2k::analog::M2kAnalogOut::convertVoltsToRaw (unsigned int channel,
double voltage 
)
+
+pure virtual
+
+ +

Convert the volts value of a sample into raw.

+
Parameters
+ + + +
channelThe index corresponding to the channel
voltageThe volts value of a sample
+
+
+
Returns
The value of a sample converted into raw
+ +
+
+ +

◆ enableChannel()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::enableChannel (unsigned int chnIdx,
bool enable 
)
+
+pure virtual
+
+ +

Enable or disable the given digital channel.

+
Parameters
+ + + +
chnIdxThe index corresponding to the channel
enableA boolean value corresponding to the channel's state
+
+
+
Exceptions
+ + +
EXC_OUT_OF_RANGENo such channel
+
+
+ +
+
+ +

◆ getAvailableSampleRates()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::vector<double> libm2k::analog::M2kAnalogOut::getAvailableSampleRates (unsigned int chn)
+
+pure virtual
+
+ +

getAvailableSampleRates

+
Parameters
+ + +
chnThe index corresponding to the required channel
+
+
+
Returns
The list of available samplerates for this device
+ +
+
+ +

◆ getBufferRearmOnTrigger()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool libm2k::analog::M2kAnalogOut::getBufferRearmOnTrigger () const
+
+pure virtual
+
+ +

Retrieve the value of the attribute that controls buffer rearm on trigger.

+
Note
The buffer rearm on trigger is disabled by default.
+
+The attribute is shared between both channels.
+
+Only available from firmware v0.33.
+
Returns
A boolean value corresponding to the state of the rearm on trigger.
+ +
+
+ +

◆ getChannelName()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::string libm2k::analog::M2kAnalogOut::getChannelName (unsigned int channel)
+
+pure virtual
+
+ +

Get the channel name for each DAC channel.

+
Parameters
+ + +
channel- unsigned int representing the index of the channel
+
+
+
Returns
std::string - name of the channel
+ +
+
+ +

◆ getCyclic()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool libm2k::analog::M2kAnalogOut::getCyclic (unsigned int chn)
+
+pure virtual
+
+ +

Retrieve the value of the cyclic mode.

+
Parameters
+ + +
chnThe index corresponding to the channel
+
+
+
Returns
A boolean value corresponding to the state of the cyclic mode
+ +
+
+ +

◆ getFilterCompensation()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::analog::M2kAnalogOut::getFilterCompensation (double samplerate)
+
+pure virtual
+
+ +

Retrieve the filter compensation for the given sample rate.

+
Parameters
+ + +
samplerateA double value representing the sample rate
+
+
+
Returns
The value of the filter compensation
+ +
+
+ +

◆ getIioObjects()

+ +
+
+ + + + + +
+ + + + + + + +
virtual struct IIO_OBJECTS libm2k::analog::M2kAnalogOut::getIioObjects ()
+
+pure virtual
+
+ +

Get access to IIO channels, buffers, devices and context.

+
Note
Can be used when debugging directly with libiio.
+
Returns
IIO_OBJECTS structure.
+ +
+
+ +

◆ getKernelBuffersCount()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual unsigned int libm2k::analog::M2kAnalogOut::getKernelBuffersCount (unsigned int chnIdx) const
+
+pure virtual
+
+ +

Get the number of kernel buffers.

+
Parameters
+ + +
chnIdxThe index corresponding to the channel
+
+
+
Returns
the number of previously set kernel buffers (saved in this session)
+ +
+
+ +

◆ getMaximumSamplerate()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::analog::M2kAnalogOut::getMaximumSamplerate (unsigned int chn_idx)
+
+pure virtual
+
+ +

Get the maximum samplerate for the DAC.

+
Parameters
+ + +
chn_idx- unsigned int representing the index of the channel
+
+
+
Returns
double - the value of the maximum samplerate
+ +
+
+ +

◆ getNbChannels()

+ +
+
+ + + + + +
+ + + + + + + +
virtual unsigned int libm2k::analog::M2kAnalogOut::getNbChannels ()
+
+pure virtual
+
+ +

Retrieve the number of analogical channels.

+
Returns
The number of channels
+ +
+
+ +

◆ getOversamplingRatio() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector<int> libm2k::analog::M2kAnalogOut::getOversamplingRatio ()
+
+pure virtual
+
+ +

Retrieve the global oversampling ratio.

+
Returns
The value of the global oversampling ratio
+ +
+
+ +

◆ getOversamplingRatio() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual int libm2k::analog::M2kAnalogOut::getOversamplingRatio (unsigned int chn)
+
+pure virtual
+
+ +

Retrieve the oversampling ratio for the given channel.

+
Parameters
+ + +
chnThe index corresponding to the channel
+
+
+
Returns
The oversampling ratio value
+ +
+
+ +

◆ getSampleRate() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector<double> libm2k::analog::M2kAnalogOut::getSampleRate ()
+
+pure virtual
+
+ +

Retrieve the sample rate of both DACs.

+
Returns
A list containing the sample rates
+ +
+
+ +

◆ getSampleRate() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::analog::M2kAnalogOut::getSampleRate (unsigned int chn)
+
+pure virtual
+
+ +

Retrieve the sample rate for the given channel.

+
Parameters
+ + +
chnThe index corresponding to the channel
+
+
+
Returns
The value of the sample rate
+ +
+
+ +

◆ getScalingFactor()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::analog::M2kAnalogOut::getScalingFactor (unsigned int chn)
+
+pure virtual
+
+ +

Retrieve the scaling factor for the given channel.

+
Parameters
+ + +
chnThe index corresponding to the channel
+
+
+
Returns
The value of the scaling factor
+
Exceptions
+ + +
EXC_OUT_OF_RANGENo such channel
+
+
+ +
+
+ +

◆ getTrigger()

+ +
+
+ + + + + +
+ + + + + + + +
virtual libm2k::M2kHardwareTrigger* libm2k::analog::M2kAnalogOut::getTrigger ()
+
+pure virtual
+
+ +

Get the hardware trigger handler.

+
Returns
A pointer to the hardware trigger
+ +
+
+ +

◆ isChannelEnabled()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool libm2k::analog::M2kAnalogOut::isChannelEnabled (unsigned int chnIdx)
+
+pure virtual
+
+ +

Check if the given channel is enabled.

+
Parameters
+ + +
chnIdxThe index corresponding to the channel
+
+
+
Returns
A boolean value corresponding to the state of the channel
+
Exceptions
+ + +
EXC_OUT_OF_RANGENo such channel
+
+
+ +
+
+ +

◆ isPushDone()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool libm2k::analog::M2kAnalogOut::isPushDone (unsigned int chnIdx) const
+
+pure virtual
+
+ +

Check if the generation of the signal (only for non-cyclic buffer) is done.

+
Parameters
+ + +
chnIdxThe index corresponding to the channel
+
+
+
Returns
True if the push process is done, false otherwise
+
Note
This function takes the number of kernel buffers into consideration.
+
+If a new session is started without unplugging the board and the number of kernel buffers was modified in the previous session
+
+(default value = 4) a DAC calibration must be performed before calling isPushDone in order to compute the
+
+current number of kernel buffers or call again the function setKernelBuffersCount.
+
+Available only in firmware versions newer than 0.23.
+ +
+
+ +

◆ push() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::push (unsigned int chnIdx,
std::vector< double > const & data 
)
+
+pure virtual
+
+ +

Send the samples to the given channel.

+
Parameters
+ + + +
chnIdxThe index corresponding to the channel
dataA list of doubles containing all samples
+
+
+
Note
Streaming data is possible - required multiple kernel buffers
+
+The given channel won't be synchronized with the other channel
+
+Due to a hardware limitation, the number of samples per channel must be a multiple of 4 and greater than 16 (non-cyclic buffers) or 1024 (cyclic buffers)
+
+The samples in the buffer can be repeated until the buffer reaches the size requirements
+
Exceptions
+ + +
EXC_OUT_OF_RANGENo such channel
+
+
+ +
+
+ +

◆ push() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::push (std::vector< std::vector< double >> const & data)
+
+pure virtual
+
+ +

Send samples to channels.

+
Parameters
+ + +
dataA list containing lists of samples
+
+
+
Note
The index of each list of samples represents the channel's index
+
+Streaming data is possible - required multiple kernel buffers
+
+The given channel won't be synchronized with the other channel
+
+Due to a hardware limitation, the number of samples per channel must be a multiple of 4 and greater than 16 (non-cyclic buffers) or 1024 (cyclic buffers)
+
+The samples in the buffer can be repeated until the buffer reaches the size requirements
+ +
+
+ +

◆ pushBytes()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::pushBytes (unsigned int chnIdx,
double * data,
unsigned int nb_samples 
)
+
+pure virtual
+
+ +

Send the samples to the given channel.

+
Parameters
+ + + + +
chnIdxThe index corresponding to the channel
dataA pointer to the samples
nb_samplesthe number of samples
+
+
+
Note
Streaming data is possible - required multiple kernel buffers
+
+The given channel won't be synchronized with the other channel
+
+Due to a hardware limitation, the number of samples per channel must be a multiple of 4 and greater than 16 (non-cyclic buffers) or 1024 (cyclic buffers)
+
+The samples in the buffer can be repeated until the buffer reaches the size requirements
+
Exceptions
+ + +
EXC_OUT_OF_RANGENo such channel
+
+
+ +
+
+ +

◆ pushInterleaved()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::pushInterleaved (double * data,
unsigned int nb_channels,
unsigned int nb_samples 
)
+
+pure virtual
+
+ +

Send samples to all the channels.

+
Parameters
+ + + + +
dataA pointer to the interleaved data
nb_channelsthe number of channels on which we want to push
nb_samplesthe number of samples total (samples_per_channel * channels)
+
+
+
Note
Make sure the samples are interleaved
+
+Streaming data is possible - required multiple kernel buffers
+
+The given channel will be synchronized with the other channel
+
+Due to a hardware limitation, the number of samples per channel must be a multiple of 4 and greater than 16 (non-cyclic buffers) or 1024 (cyclic buffers)
+
+The samples in the buffer can be repeated until the buffer reaches the size requirements
+ +
+
+ +

◆ pushRaw() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::pushRaw (unsigned int chnIdx,
std::vector< short > const & data 
)
+
+pure virtual
+
+ +

Send the samples to the given channel.

+
Parameters
+ + + +
chnIdxThe index corresponding to the channel
dataA list of shorts containing all samples
+
+
+
Note
Streaming data is possible - required multiple kernel buffers
+
+The given channel won't be synchronized with the other channel
+
+Due to a hardware limitation, the number of samples per channel must be a multiple of 4 and greater than 16 (non-cyclic buffers) or 1024 (cyclic buffers)
+
+The samples in the buffer can be repeated until the buffer reaches the size requirements
+
Exceptions
+ + +
EXC_OUT_OF_RANGENo such channel
+
+
+ +
+
+ +

◆ pushRaw() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::pushRaw (std::vector< std::vector< short >> const & data)
+
+pure virtual
+
+ +

Send samples to channels.

+
Parameters
+ + +
dataA list containing lists of samples
+
+
+
Note
The index of each list of samples represents the channel's index
+
+Streaming data is possible - required multiple kernel buffers
+
+The given channel won't be synchronized with the other channel
+
+Due to a hardware limitation, the number of samples per channel must be a multiple of 4 and greater than 16 (non-cyclic buffers) or 1024 (cyclic buffers)
+
+The samples in the buffer can be repeated until the buffer reaches the size requirements
+ +
+
+ +

◆ pushRawBytes()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::pushRawBytes (unsigned int chnIdx,
short * data,
unsigned int nb_samples 
)
+
+pure virtual
+
+ +

Send the samples to the given channel.

+
Parameters
+ + + + +
chnIdxThe index corresponding to the channel
dataA pointer to the raw samples
nb_samplesthe number of samples
+
+
+
Note
Streaming data is possible - required multiple kernel buffers
+
+The given channel won't be synchronized with the other channel
+
+Due to a hardware limitation, the number of samples per channel must be a multiple of 4 and greater than 16 (non-cyclic buffers) or 1024 (cyclic buffers)
+
+The samples in the buffer can be repeated until the buffer reaches the size requirements
+
Exceptions
+ + +
EXC_OUT_OF_RANGENo such channel
+
+
+ +
+
+ +

◆ pushRawInterleaved()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::pushRawInterleaved (short * data,
unsigned int nb_channels,
unsigned int nb_samples 
)
+
+pure virtual
+
+ +

Send samples to all the channels.

+
Parameters
+ + + + +
dataA pointer to the interleaved raw data
nb_channelsthe number of channels on which we want to push
nb_samplesthe number of samples total (samples_per_channel * channels)
+
+
+
Note
Make sure the raw samples are interleaved
+
+Streaming data is possible - required multiple kernel buffers
+
+The given channel will be synchronized with the other channel
+
+Due to a hardware limitation, the number of samples per channel must be a multiple of 4 and greater than 16 (non-cyclic buffers) or 1024 (cyclic buffers)
+
+The samples in the buffer can be repeated until the buffer reaches the size requirements
+ +
+
+ +

◆ setBufferRearmOnTrigger()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::setBufferRearmOnTrigger (bool enable)
+
+pure virtual
+
+ +

Allows sequential output of multiple buffers with each trigger event.

+
Parameters
+ + +
enableA boolean value that enables or disables the buffer rearm functionality.
+
+
+
Note
When disabled, all buffers will be sent at once. Opt to concatenate multiple small buffers into a single buffer to avoid timing problems.
+
+When enabled, each previously pushed buffer will be sent sequentially with each trigger event.
+
+For non-cyclic mode each buffer is sent only once.
+
+In cyclic mode:
    +
  • If rearm is disabled, the buffer will be sent continuously.
  • +
  • If rearm is enabled, the buffer will be sent once for every trigger event.
  • +
+
+
+Due to hardware limitation, in non-cyclic mode, the channel will idle with the first sample of the next buffer.
+
+Only available from firmware v0.33.
+ +
+
+ +

◆ setCyclic() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::setCyclic (bool en)
+
+pure virtual
+
+ +

Enable or disable the cyclic mode for all digital channels.

+
Parameters
+ + +
enIf true, enable cyclic mode
+
+
+
Exceptions
+ + +
EXC_OUT_OF_RANGENo such channel
+
+
+ +
+
+ +

◆ setCyclic() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::setCyclic (unsigned int chn,
bool en 
)
+
+pure virtual
+
+ +

Enable or disable the cyclic mode for all digital channels.

+
Parameters
+ + + +
chnThe index corresponding to the channel
enIf true, enable cyclic mode
+
+
+
Exceptions
+ + +
EXC_OUT_OF_RANGENo such channel
+
+
+ +
+
+ +

◆ setKernelBuffersCount()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::setKernelBuffersCount (unsigned int chnIdx,
unsigned int count 
)
+
+pure virtual
+
+ +

Set the kernel buffers to a specific value.

+
Parameters
+ + + +
chnIdxThe index corresponding to the channel
countthe number of kernel buffers
+
+
+ +
+
+ +

◆ setOversamplingRatio() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::vector<int> libm2k::analog::M2kAnalogOut::setOversamplingRatio (std::vector< int > oversampling_ratio)
+
+pure virtual
+
+ +

Set the value of the oversampling ratio for each channel.

+
Parameters
+ + +
oversampling_ratioA list containing the ratios for each channel (as integers)
+
+
+
Returns
A list containing the oversampling ratio value for each channel
+ +
+
+ +

◆ setOversamplingRatio() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual int libm2k::analog::M2kAnalogOut::setOversamplingRatio (unsigned int chn,
int oversampling_ratio 
)
+
+pure virtual
+
+ +

Set the oversampling ratio for the given channel.

+
Parameters
+ + + +
chnThe index corresponding to the channel
oversampling_ratioInteger value to set the oversampling ratio to
+
+
+
Returns
The current oversampling ratio value
+ +
+
+ +

◆ setSampleRate() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::vector<double> libm2k::analog::M2kAnalogOut::setSampleRate (std::vector< double > samplerates)
+
+pure virtual
+
+ +

Set the sample rate for both channels.

+
Parameters
+ + +
sampleratesA list containing the sample rates of each channel
+
+
+
Returns
A list containing the previously set sample rates
+ +
+
+ +

◆ setSampleRate() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual double libm2k::analog::M2kAnalogOut::setSampleRate (unsigned int chn,
double samplerate 
)
+
+pure virtual
+
+ +

Set the sample rate for the given channel.

+
Parameters
+ + + +
chnThe index corresponding to the channel
samplerateA double value to set the sample rate to
+
+
+
Returns
The value of the sample rate
+ +
+
+ +

◆ setVoltage()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual unsigned short libm2k::analog::M2kAnalogOut::setVoltage (unsigned int chn_idx,
double volts 
)
+
+pure virtual
+
+ +

Sets the voltage output of the DAC channel.

+
Parameters
+ + + +
chn_idx- unsigned int representing the index of the channel
volts- actual value to be set
+
+
+
Note
In scenarios where the DMA is not active, such as when an output buffer is destroyed, the DAC will revert to using the raw value set by this function.
+
Returns
unsigned short - the corresponding raw value for the given voltage
+ +
+
+ +

◆ setVoltageRaw()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual unsigned short libm2k::analog::M2kAnalogOut::setVoltageRaw (unsigned int chn_idx,
unsigned short raw 
)
+
+pure virtual
+
+ +

Sets the raw output of the DAC channel.

+
Parameters
+ + + +
chn_idx- unsigned int representing the index of the channel
raw- actual value to be set
+
+
+
Note
In scenarios where the DMA is not active, such as when an output buffer is destroyed, the DAC will revert to using the raw value set by this function.
+
Returns
unsigned short - the value set in the raw attribute
+ +
+
+ +

◆ stop() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::stop ()
+
+pure virtual
+
+ +

Stop all channels from sending the signals.

+
Note
Both DACs will be powered down
+ +
+
+ +

◆ stop() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::analog::M2kAnalogOut::stop (unsigned int chn)
+
+pure virtual
+
+ +

Stop the given channels from sending the signals.

+
Parameters
+ + +
chnThe index corresponding to the channel
+
+
+
Note
The corresponding DAC will be powered down
+
Exceptions
+ + +
EXC_OUT_OF_RANGENo such channel
+
+
+ +
+
+
+ + + + diff --git a/group__analogout.map b/group__analogout.map new file mode 100644 index 00000000..29723bc1 --- /dev/null +++ b/group__analogout.map @@ -0,0 +1,4 @@ + + + + diff --git a/group__analogout.md5 b/group__analogout.md5 new file mode 100644 index 00000000..2ef595ca --- /dev/null +++ b/group__analogout.md5 @@ -0,0 +1 @@ +87454d5208d4f3eefe1118042844c79a \ No newline at end of file diff --git a/group__analogout.png b/group__analogout.png new file mode 100644 index 00000000..4be95573 Binary files /dev/null and b/group__analogout.png differ diff --git a/group__context.html b/group__context.html new file mode 100644 index 00000000..77390ec1 --- /dev/null +++ b/group__context.html @@ -0,0 +1,675 @@ + + + + + + + +libm2k: Context + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
Context
+
+
+ +

Contains the representation of a generic IIO context. +More...

+
+Collaboration diagram for Context:
+
+
+ + + + +
+
+ + + + + +

+Modules

 ContextBuilder
 Creates/destroys the context.
 
+ + + + +

+Classes

class  libm2k::context::Context
 Controls the IIO context. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

virtual std::string libm2k::context::Context::getUri ()=0
 Get the URI of the current context. More...
 
virtual libm2k::analog::DMMlibm2k::context::Context::getDMM (unsigned int index)=0
 Retrieve the DMM object at a certain index. More...
 
virtual libm2k::analog::DMMlibm2k::context::Context::getDMM (std::string name)=0
 Retrieve the DMM object which has the provided name. More...
 
virtual std::vector< libm2k::analog::DMM * > libm2k::context::Context::getAllDmm ()=0
 Retrieve all the DMM objects. More...
 
virtual std::vector< std::string > libm2k::context::Context::getAvailableContextAttributes ()=0
 Retrieve all the available context attributes. More...
 
virtual std::string libm2k::context::Context::getContextAttributeValue (std::string attr)=0
 Retrieve the value of one context attribute. More...
 
virtual std::string libm2k::context::Context::getContextDescription ()=0
 Retrieve a detailed context description. More...
 
virtual std::string libm2k::context::Context::getSerialNumber ()=0
 Retrieve the current context serial number. More...
 
virtual std::unordered_set< std::string > libm2k::context::Context::getAllDevices () const =0
 Retrieve all the available devices. More...
 
virtual void libm2k::context::Context::logAllAttributes () const =0
 Log all the attributes. More...
 
virtual M2klibm2k::context::Context::toM2k ()=0
 Convert the current context to M2k context, if possible. More...
 
virtual Generic * libm2k::context::Context::toGeneric ()=0
 Convert the current context to Generic context, if possible. More...
 
virtual unsigned int libm2k::context::Context::getDmmCount ()=0
 Retrieve the number of DMM objects. More...
 
virtual std::string libm2k::context::Context::getFirmwareVersion ()=0
 Retrieve the firmware version of the current context. More...
 
virtual const struct libm2k::IIO_CONTEXT_VERSION libm2k::context::Context::getIioContextVersion ()=0
 
virtual struct iio_context * libm2k::context::Context::getIioContext ()=0
 
virtual void libm2k::context::Context::setTimeout (unsigned int timeout)=0
 Set a timeout for I/O operations. More...
 
+

Detailed Description

+

Contains the representation of a generic IIO context.

+

Function Documentation

+ +

◆ getAllDevices()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::unordered_set<std::string> libm2k::context::Context::getAllDevices () const
+
+pure virtual
+
+ +

Retrieve all the available devices.

+
Returns
a list of strings containing all the devices
+ +
+
+ +

◆ getAllDmm()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector<libm2k::analog::DMM*> libm2k::context::Context::getAllDmm ()
+
+pure virtual
+
+ +

Retrieve all the DMM objects.

+
Returns
A list of DMM objects
+
+ +
+
+ +

◆ getAvailableContextAttributes()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector<std::string> libm2k::context::Context::getAvailableContextAttributes ()
+
+pure virtual
+
+ +

Retrieve all the available context attributes.

+
Returns
A list of strings containing all the context attributes
+ +
+
+ +

◆ getContextAttributeValue()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::string libm2k::context::Context::getContextAttributeValue (std::string attr)
+
+pure virtual
+
+ +

Retrieve the value of one context attribute.

+
Parameters
+ + +
attrThe name of the required attribute
+
+
+
Returns
On success, return a string containing the value of the attribute
+
Exceptions
+ + +
Onerror, throw an exception if the attribute is not found
+
+
+ +
+
+ +

◆ getContextDescription()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string libm2k::context::Context::getContextDescription ()
+
+pure virtual
+
+ +

Retrieve a detailed context description.

+
Returns
string containing the current context description
+ +
+
+ +

◆ getDMM() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual libm2k::analog::DMM* libm2k::context::Context::getDMM (unsigned int index)
+
+pure virtual
+
+ +

Retrieve the DMM object at a certain index.

+
Parameters
+ + +
indexThe index corresponding to the DMM
+
+
+
Returns
On success, a pointer to a DMM object
+
+On error, nullptr is returned
+ +
+
+ +

◆ getDMM() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual libm2k::analog::DMM* libm2k::context::Context::getDMM (std::string name)
+
+pure virtual
+
+ +

Retrieve the DMM object which has the provided name.

+
Parameters
+ + +
nameThe name corresponding to the DMM
+
+
+
Returns
On success, a pointer to a DMM object
+
+On error, nullptr is returned
+ +
+
+ +

◆ getDmmCount()

+ +
+
+ + + + + +
+ + + + + + + +
virtual unsigned int libm2k::context::Context::getDmmCount ()
+
+pure virtual
+
+ +

Retrieve the number of DMM objects.

+
Returns
an unsigned int representing the number of DMM objects in the context
+ +
+
+ +

◆ getFirmwareVersion()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string libm2k::context::Context::getFirmwareVersion ()
+
+pure virtual
+
+ +

Retrieve the firmware version of the current context.

+
Returns
a string containing the firmware version
+ +
+
+ +

◆ getIioContext()

+ +
+
+ + + + + +
+ + + + + + + +
virtual struct iio_context* libm2k::context::Context::getIioContext ()
+
+pure virtual
+
+

Retrieve the iio context

Returns
A pointer to the iio context
+ +
+
+ +

◆ getIioContextVersion()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const struct libm2k::IIO_CONTEXT_VERSION libm2k::context::Context::getIioContextVersion ()
+
+pure virtual
+
+

Get the version of the backend in use

Returns
IIO_CONTEXT_VERSION struct
+ +
+
+ +

◆ getSerialNumber()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string libm2k::context::Context::getSerialNumber ()
+
+pure virtual
+
+ +

Retrieve the current context serial number.

+
Returns
string containing the current context serial number
+ +
+
+ +

◆ getUri()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string libm2k::context::Context::getUri ()
+
+pure virtual
+
+ +

Get the URI of the current context.

+
Returns
string containing the context URI (ex: "usb:1.2.3", "ip:192.168.2.1")
+ +
+
+ +

◆ logAllAttributes()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void libm2k::context::Context::logAllAttributes () const
+
+pure virtual
+
+ +

Log all the attributes.

+
Note
The logging system should be enabled
+ +
+
+ +

◆ setTimeout()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::context::Context::setTimeout (unsigned int timeout)
+
+pure virtual
+
+ +

Set a timeout for I/O operations.

+
Parameters
+ + +
timeoutA positive integer representing the time in milliseconds after which a timeout occurs. A value of 0 is used to specify that no timeout should occur.
+
+
+ +
+
+ +

◆ toGeneric()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Generic* libm2k::context::Context::toGeneric ()
+
+pure virtual
+
+ +

Convert the current context to Generic context, if possible.

+
Returns
On success, return the corresponding Generic object
+
+On error, return a nullptr
+ +
+
+ +

◆ toM2k()

+ +
+
+ + + + + +
+ + + + + + + +
virtual M2k* libm2k::context::Context::toM2k ()
+
+pure virtual
+
+ +

Convert the current context to M2k context, if possible.

+
Returns
On success, return the corresponding M2k object
+
+On error, return a nullptr
+ +
+
+
+ + + + diff --git a/group__context.map b/group__context.map new file mode 100644 index 00000000..22ee3fdb --- /dev/null +++ b/group__context.map @@ -0,0 +1,4 @@ + + + + diff --git a/group__context.md5 b/group__context.md5 new file mode 100644 index 00000000..12b7f040 --- /dev/null +++ b/group__context.md5 @@ -0,0 +1 @@ +e20e6637997f6f5807668203abcdb40e \ No newline at end of file diff --git a/group__context.png b/group__context.png new file mode 100644 index 00000000..e3344c7e Binary files /dev/null and b/group__context.png differ diff --git a/group__contextbuilder.html b/group__contextbuilder.html new file mode 100644 index 00000000..dcd15a08 --- /dev/null +++ b/group__contextbuilder.html @@ -0,0 +1,337 @@ + + + + + + + +libm2k: ContextBuilder + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
ContextBuilder
+
+
+ +

Creates/destroys the context. +More...

+
+Collaboration diagram for ContextBuilder:
+
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

LIBM2K_API M2klibm2k::context::m2kOpen (const char *uri)
 Open an ADALM2000 based on a given uri. More...
 
LIBM2K_API M2klibm2k::context::m2kOpen (struct iio_context *ctx, const char *uri)
 Open an ADALM2000 based on an existing iio_context and uri. More...
 
LIBM2K_API M2klibm2k::context::m2kOpen ()
 Open an ADALM2000. More...
 
LIBM2K_API std::vector< struct libm2k::CONTEXT_INFO * > libm2k::context::getContextsInfo ()
 List the information about all available contexts. More...
 
LIBM2K_API std::vector< std::string > libm2k::context::getAllContexts ()
 List all available contexts. More...
 
LIBM2K_API void libm2k::context::contextClose (Context *ctx, bool deinit=true)
 Destroy the given context. More...
 
+LIBM2K_API void libm2k::context::contextCloseAll ()
 Close all the devices.
 
LIBM2K_API std::string libm2k::context::getVersion ()
 Get library version. More...
 
LIBM2K_API void libm2k::context::enableLogging (bool enable)
 Enable/disable the logging system. More...
 
+

Detailed Description

+

Creates/destroys the context.

+

Function Documentation

+ +

◆ contextClose()

+ +
+
+ + + + + + + + + + + + + + + + + + +
LIBM2K_API void libm2k::context::contextClose (Contextctx,
bool deinit = true 
)
+
+ +

Destroy the given context.

+
Parameters
+ + + +
ctxThe context to be destroyed
deinitIf deinit is set to false, running contexts won't be affected
+
+
+ +
+
+ +

◆ enableLogging()

+ +
+
+ + + + + + + + +
LIBM2K_API void libm2k::context::enableLogging (bool enable)
+
+ +

Enable/disable the logging system.

+
Parameters
+ + +
enableIf true enable, otherwise disable
+
+
+ +
+
+ +

◆ getAllContexts()

+ +
+
+ + + + + + + +
LIBM2K_API std::vector<std::string> libm2k::context::getAllContexts ()
+
+ +

List all available contexts.

+
Returns
A list containing the available contexts
+ +
+
+ +

◆ getContextsInfo()

+ +
+
+ + + + + + + +
LIBM2K_API std::vector<struct libm2k::CONTEXT_INFO*> libm2k::context::getContextsInfo ()
+
+ +

List the information about all available contexts.

+
Returns
A list containing the info about available contexts
+ +
+
+ +

◆ getVersion()

+ +
+
+ + + + + + + +
LIBM2K_API std::string libm2k::context::getVersion ()
+
+ +

Get library version.

+
Returns
a string containing the libm2k version
+ +
+
+ +

◆ m2kOpen() [1/3]

+ +
+
+ + + + + + + + +
LIBM2K_API M2k* libm2k::context::m2kOpen (const char * uri)
+
+ +

Open an ADALM2000 based on a given uri.

+
Parameters
+ + +
uriDescribe the location of the context
+
+
+
Returns
M2k object or nullptr if no ADALM2000 was found/available
+
Note
the uri can be something similar to: "ip:192.168.2.1" or "usb:1.6.5"
+ +
+
+ +

◆ m2kOpen() [2/3]

+ +
+
+ + + + + + + + + + + + + + + + + + +
LIBM2K_API M2k* libm2k::context::m2kOpen (struct iio_context * ctx,
const char * uri 
)
+
+ +

Open an ADALM2000 based on an existing iio_context and uri.

+
Parameters
+ + + +
ctxA pointer to an iio_context structure
uriDescribe the location of the context
+
+
+
Returns
M2k object or nullptr if no ADALM2000 was found/available
+
Note
the uri can be something similar to: "ip:192.168.2.1" or "usb:1.6.5"
+ +
+
+ +

◆ m2kOpen() [3/3]

+ +
+
+ + + + + + + +
LIBM2K_API M2k* libm2k::context::m2kOpen ()
+
+ +

Open an ADALM2000.

+
Returns
M2k object or nullptr if no ADALM2000 was found/available
+
Note
this will try to open USB connected devices
+ +
+
+
+ + + + diff --git a/group__contextbuilder.map b/group__contextbuilder.map new file mode 100644 index 00000000..74ea3b73 --- /dev/null +++ b/group__contextbuilder.map @@ -0,0 +1,4 @@ + + + + diff --git a/group__contextbuilder.md5 b/group__contextbuilder.md5 new file mode 100644 index 00000000..6c825817 --- /dev/null +++ b/group__contextbuilder.md5 @@ -0,0 +1 @@ +68a9c09ab5a6727a13eb7b0770d7400d \ No newline at end of file diff --git a/group__contextbuilder.png b/group__contextbuilder.png new file mode 100644 index 00000000..3ad3de47 Binary files /dev/null and b/group__contextbuilder.png differ diff --git a/group__digital.html b/group__digital.html new file mode 100644 index 00000000..506c297d --- /dev/null +++ b/group__digital.html @@ -0,0 +1,1793 @@ + + + + + + + +libm2k: Digital + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
Digital
+
+
+ +

Contains the representation of the digital segment. +More...

+ + + + + +

+Classes

class  libm2k::digital::M2kDigital
 Controls the digital input and output segment. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

virtual void libm2k::digital::M2kDigital::setDirection (unsigned short mask)=0
 Set the direction for all digital channels. More...
 
virtual void libm2k::digital::M2kDigital::setDirection (unsigned int index, DIO_DIRECTION dir)=0
 Set the direction of the given digital channel. More...
 
virtual void libm2k::digital::M2kDigital::setDirection (unsigned int index, bool dir)=0
 Set the direction of the given digital channel. More...
 
virtual void libm2k::digital::M2kDigital::setDirection (DIO_CHANNEL index, bool dir)=0
 Set the direction of the given digital channel. More...
 
virtual void libm2k::digital::M2kDigital::setDirection (DIO_CHANNEL index, DIO_DIRECTION dir)=0
 Set the direction of the given digital channel. More...
 
virtual DIO_DIRECTION libm2k::digital::M2kDigital::getDirection (DIO_CHANNEL index)=0
 Retrieve the direction of the given digital channel. More...
 
virtual void libm2k::digital::M2kDigital::setValueRaw (DIO_CHANNEL index, DIO_LEVEL level)=0
 Set the raw value of a given digital channel. More...
 
virtual void libm2k::digital::M2kDigital::push (std::vector< unsigned short > const &data)=0
 Send the samples to all digital channels. More...
 
virtual void libm2k::digital::M2kDigital::push (unsigned short *data, unsigned int nb_samples)=0
 Send the samples to all digital channels. More...
 
virtual void libm2k::digital::M2kDigital::setValueRaw (unsigned int index, DIO_LEVEL level)=0
 Set the raw value of a given digital channel. More...
 
virtual void libm2k::digital::M2kDigital::setValueRaw (DIO_CHANNEL index, bool level)=0
 Set the raw value of a given digital channel. More...
 
virtual DIO_LEVEL libm2k::digital::M2kDigital::getValueRaw (DIO_CHANNEL index)=0
 Retrieve the raw value of the given digital channel. More...
 
virtual DIO_LEVEL libm2k::digital::M2kDigital::getValueRaw (unsigned int index)=0
 Retrieve the raw value of the given digital channel. More...
 
+virtual void libm2k::digital::M2kDigital::stopBufferOut ()=0
 Stop all digital channels from sending the signals.
 
virtual void libm2k::digital::M2kDigital::startAcquisition (unsigned int nb_samples)=0
 Create the buffer for all channels and start the acquisition. More...
 
+virtual void libm2k::digital::M2kDigital::stopAcquisition ()=0
 Destroy the buffer and stop the acquisition.
 
virtual void libm2k::digital::M2kDigital::cancelAcquisition ()=0
 Cancel all rx-buffer operations. More...
 
virtual void libm2k::digital::M2kDigital::cancelBufferOut ()=0
 Cancel all tx-buffer operations. More...
 
virtual std::vector< unsigned short > libm2k::digital::M2kDigital::getSamples (unsigned int nb_samples)=0
 Retrieve a specific number of samples. More...
 
virtual const unsigned short * libm2k::digital::M2kDigital::getSamplesP (unsigned int nb_samples)=0
 Retrieve a specific number of samples. More...
 
virtual void libm2k::digital::M2kDigital::enableChannel (unsigned int index, bool enable)=0
 Enable or disable the given digital channel. More...
 
virtual void libm2k::digital::M2kDigital::enableChannel (DIO_CHANNEL index, bool enable)=0
 Enable or disable the given digital channel. More...
 
virtual void libm2k::digital::M2kDigital::enableAllOut (bool enable)=0
 Enable or disable all output channels. More...
 
virtual bool libm2k::digital::M2kDigital::anyChannelEnabled (DIO_DIRECTION dir)=0
 Check if there is at least one channel enabled. More...
 
virtual void libm2k::digital::M2kDigital::setOutputMode (DIO_CHANNEL chn, DIO_MODE mode)=0
 Set the output mode for the given digital channel. More...
 
virtual void libm2k::digital::M2kDigital::setOutputMode (unsigned int chn, DIO_MODE mode)=0
 Set the output mode for the given digital channel. More...
 
virtual DIO_MODE libm2k::digital::M2kDigital::getOutputMode (DIO_CHANNEL chn)=0
 Retrieve the output mode for the given digital channel. More...
 
virtual DIO_MODE libm2k::digital::M2kDigital::getOutputMode (unsigned int chn)=0
 Retrieve the output mode for the given digital channel. More...
 
virtual double libm2k::digital::M2kDigital::setSampleRateIn (double samplerate)=0
 Set the sample rate for all digital input channels. More...
 
virtual double libm2k::digital::M2kDigital::setSampleRateOut (double samplerate)=0
 Set the sample rate for all digital output channels. More...
 
virtual double libm2k::digital::M2kDigital::getSampleRateIn ()=0
 Retrieve the sample rate of all digital input channels. More...
 
virtual double libm2k::digital::M2kDigital::getSampleRateOut ()=0
 Retrieve the sample rate of all digital output channels. More...
 
virtual bool libm2k::digital::M2kDigital::getCyclic ()=0
 Retrieve the value of the cyclic mode. More...
 
virtual void libm2k::digital::M2kDigital::setCyclic (bool cyclic)=0
 Enable or disable the cyclic mode for all digital channels. More...
 
virtual libm2k::M2kHardwareTriggerlibm2k::digital::M2kDigital::getTrigger ()=0
 Get the hardware trigger handler. More...
 
virtual void libm2k::digital::M2kDigital::setKernelBuffersCountIn (unsigned int count)=0
 Set the kernel buffers for input to a specific value. More...
 
virtual void libm2k::digital::M2kDigital::setKernelBuffersCountOut (unsigned int count)=0
 Set the kernel buffers for output to a specific value. More...
 
virtual struct IIO_OBJECTS libm2k::digital::M2kDigital::getIioObjects ()=0
 Get access to IIO channels, buffers, devices and context. Can be used when debugging directly with libiio. More...
 
virtual unsigned int libm2k::digital::M2kDigital::getNbChannelsIn ()=0
 Retrieve the number of digital input channels. More...
 
virtual unsigned int libm2k::digital::M2kDigital::getNbChannelsOut ()=0
 Retrieve the number of digital output channels. More...
 
virtual void libm2k::digital::M2kDigital::getSamples (std::vector< unsigned short > &data, unsigned int nb_samples)=0
 Retrieve a specific number of samples. More...
 
virtual void libm2k::digital::M2kDigital::setRateMux ()=0
 Force the digital interface to use the analogical rate. More...
 
virtual void libm2k::digital::M2kDigital::resetRateMux ()=0
 Reset the digital rate to default. More...
 
virtual void libm2k::digital::M2kDigital::setExternalClocksource (bool external)=0
 Set the clocksource. More...
 
virtual bool libm2k::digital::M2kDigital::isClocksourceExternal ()=0
 Get the current clocksource. More...
 
+

Detailed Description

+

Contains the representation of the digital segment.

+

Function Documentation

+ +

◆ anyChannelEnabled()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool libm2k::digital::M2kDigital::anyChannelEnabled (DIO_DIRECTION dir)
+
+pure virtual
+
+ +

Check if there is at least one channel enabled.

+
Parameters
+ + +
dirAn enumerator corresponding to the direction of a channel
+
+
+
Returns
On succces, true
+
+Otherwise, false
+ +
+
+ +

◆ cancelAcquisition()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void libm2k::digital::M2kDigital::cancelAcquisition ()
+
+pure virtual
+
+ +

Cancel all rx-buffer operations.

+
Note
Should be used to cancel an ongoing acquisition
+ +
+
+ +

◆ cancelBufferOut()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void libm2k::digital::M2kDigital::cancelBufferOut ()
+
+pure virtual
+
+ +

Cancel all tx-buffer operations.

+
Note
Should be used to cancel an ongoing data write.
+ +
+
+ +

◆ enableAllOut()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::digital::M2kDigital::enableAllOut (bool enable)
+
+pure virtual
+
+ +

Enable or disable all output channels.

+
Parameters
+ + +
enableA boolean value corresponding to the channel's state
+
+
+
Note
This function affects only the TX channels
+ +
+
+ +

◆ enableChannel() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::digital::M2kDigital::enableChannel (unsigned int index,
bool enable 
)
+
+pure virtual
+
+ +

Enable or disable the given digital channel.

+
Parameters
+ + + +
indexThe index corresponding to the channel
enableA boolean value corresponding to the channel's state
+
+
+
Note
This function affects only the TX channels
+ +
+
+ +

◆ enableChannel() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::digital::M2kDigital::enableChannel (DIO_CHANNEL index,
bool enable 
)
+
+pure virtual
+
+ +

Enable or disable the given digital channel.

+
Parameters
+ + + +
indexAn enumerator corresponding to the channel's index
enableA boolean value corresponding to the channel's state
+
+
+
Note
This function affects only the TX channels
+ +
+
+ +

◆ getCyclic()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool libm2k::digital::M2kDigital::getCyclic ()
+
+pure virtual
+
+ +

Retrieve the value of the cyclic mode.

+
Returns
A boolean value corresponding to the state of the cyclic mode
+ +
+
+ +

◆ getDirection()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual DIO_DIRECTION libm2k::digital::M2kDigital::getDirection (DIO_CHANNEL index)
+
+pure virtual
+
+ +

Retrieve the direction of the given digital channel.

+
Parameters
+ + +
indexAn enumerator corresponding to the channel's index
+
+
+
Returns
DIO_DIRECTION An enumerator that indicates the direction of a channel
+ +
+
+ +

◆ getIioObjects()

+ +
+
+ + + + + +
+ + + + + + + +
virtual struct IIO_OBJECTS libm2k::digital::M2kDigital::getIioObjects ()
+
+pure virtual
+
+ +

Get access to IIO channels, buffers, devices and context. Can be used when debugging directly with libiio.

+
Returns
IIO_OBJECTS structure.
+ +
+
+ +

◆ getNbChannelsIn()

+ +
+
+ + + + + +
+ + + + + + + +
virtual unsigned int libm2k::digital::M2kDigital::getNbChannelsIn ()
+
+pure virtual
+
+ +

Retrieve the number of digital input channels.

+
Returns
an unsigned int representing the number of digital IN channels
+ +
+
+ +

◆ getNbChannelsOut()

+ +
+
+ + + + + +
+ + + + + + + +
virtual unsigned int libm2k::digital::M2kDigital::getNbChannelsOut ()
+
+pure virtual
+
+ +

Retrieve the number of digital output channels.

+
Returns
an unsigned int representing the number of digital OUT channels
+ +
+
+ +

◆ getOutputMode() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual DIO_MODE libm2k::digital::M2kDigital::getOutputMode (DIO_CHANNEL chn)
+
+pure virtual
+
+ +

Retrieve the output mode for the given digital channel.

+
Parameters
+ + +
chnAn enumerator corresponding to the channel's index
+
+
+
Returns
An enumerator corresponding to the output mode
+ +
+
+ +

◆ getOutputMode() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual DIO_MODE libm2k::digital::M2kDigital::getOutputMode (unsigned int chn)
+
+pure virtual
+
+ +

Retrieve the output mode for the given digital channel.

+
Parameters
+ + +
chnThe index corresponding to the channel
+
+
+
Returns
An enumerator corresponding to the output mode
+ +
+
+ +

◆ getSampleRateIn()

+ +
+
+ + + + + +
+ + + + + + + +
virtual double libm2k::digital::M2kDigital::getSampleRateIn ()
+
+pure virtual
+
+ +

Retrieve the sample rate of all digital input channels.

+
Returns
The value of the sample rate
+ +
+
+ +

◆ getSampleRateOut()

+ +
+
+ + + + + +
+ + + + + + + +
virtual double libm2k::digital::M2kDigital::getSampleRateOut ()
+
+pure virtual
+
+ +

Retrieve the sample rate of all digital output channels.

+
Returns
The value of the sample rate
+ +
+
+ +

◆ getSamples() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::vector<unsigned short> libm2k::digital::M2kDigital::getSamples (unsigned int nb_samples)
+
+pure virtual
+
+ +

Retrieve a specific number of samples.

+
Parameters
+ + +
nb_samplesThe number of samples that will be retrieved
+
+
+
Returns
A list that contains the samples
+
Note
Due to a hardware limitation, the number of samples must be a multiple of 4 and greater than 16.
+ +
+
+ +

◆ getSamples() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::digital::M2kDigital::getSamples (std::vector< unsigned short > & data,
unsigned int nb_samples 
)
+
+pure virtual
+
+ +

Retrieve a specific number of samples.

+
Parameters
+ + + +
data- a reference to a vector owned/created by the client
nb_samplesThe number of samples that will be retrieved. The vector will be cleaned and then filled with samples.
+
+
+
Note
Due to a hardware limitation, the number of samples must be a multiple of 4 and greater than 16.
+ +
+
+ +

◆ getSamplesP()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual const unsigned short* libm2k::digital::M2kDigital::getSamplesP (unsigned int nb_samples)
+
+pure virtual
+
+ +

Retrieve a specific number of samples.

+
Parameters
+ + +
nb_samplesThe number of samples that will be retrieved
+
+
+
Returns
A pointer to the data
+
Note
Due to a hardware limitation, the number of samples must be a multiple of 4 and greater than 16.
+ +
+
+ +

◆ getTrigger()

+ +
+
+ + + + + +
+ + + + + + + +
virtual libm2k::M2kHardwareTrigger* libm2k::digital::M2kDigital::getTrigger ()
+
+pure virtual
+
+ +

Get the hardware trigger handler.

+
Returns
the trigger object
+ +
+
+ +

◆ getValueRaw() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual DIO_LEVEL libm2k::digital::M2kDigital::getValueRaw (DIO_CHANNEL index)
+
+pure virtual
+
+ +

Retrieve the raw value of the given digital channel.

+
Parameters
+ + +
indexAn enumerator corresponding to the channel's index
+
+
+
Returns
DIO_LEVEL An enumerator corresponding to the raw value
+ +
+
+ +

◆ getValueRaw() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual DIO_LEVEL libm2k::digital::M2kDigital::getValueRaw (unsigned int index)
+
+pure virtual
+
+ +

Retrieve the raw value of the given digital channel.

+
Parameters
+ + +
indexThe index corresponding to the channel
+
+
+
Returns
DIO_LEVEL An enumerator corresponding to the raw value
+ +
+
+ +

◆ isClocksourceExternal()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool libm2k::digital::M2kDigital::isClocksourceExternal ()
+
+pure virtual
+
+ +

Get the current clocksource.

+
Returns
True if clocksource is set to external
+
Note
Only available from firmware v0.26.
+ +
+
+ +

◆ push() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::digital::M2kDigital::push (std::vector< unsigned short > const & data)
+
+pure virtual
+
+ +

Send the samples to all digital channels.

+
Parameters
+ + +
dataThe std vector that contains the samples
+
+
+
Note
Due to a hardware limitation, the number of samples must be a multiple of 4 and greater than 16.
+ +
+
+ +

◆ push() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::digital::M2kDigital::push (unsigned short * data,
unsigned int nb_samples 
)
+
+pure virtual
+
+ +

Send the samples to all digital channels.

+
Parameters
+ + + +
dataa pointer to the samples
nb_samplesthe number of samples
+
+
+
Note
Due to a hardware limitation, the number of samples must be a multiple of 4 and greater than 16.
+ +
+
+ +

◆ resetRateMux()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void libm2k::digital::M2kDigital::resetRateMux ()
+
+pure virtual
+
+ +

Reset the digital rate to default.

+
Note
Only available from firmware v0.26.
+ +
+
+ +

◆ setCyclic()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::digital::M2kDigital::setCyclic (bool cyclic)
+
+pure virtual
+
+ +

Enable or disable the cyclic mode for all digital channels.

+
Parameters
+ + +
cyclicIf true, enable cyclic mode
+
+
+ +
+
+ +

◆ setDirection() [1/5]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::digital::M2kDigital::setDirection (unsigned short mask)
+
+pure virtual
+
+ +

Set the direction for all digital channels.

+
Parameters
+ + +
maskA bitmask
+
+
+
Note
Each bit of the mask corresponds to the channel with the same index. The value of the bit represents the channel's direction. O - input, 1 - output
+ +
+
+ +

◆ setDirection() [2/5]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::digital::M2kDigital::setDirection (unsigned int index,
DIO_DIRECTION dir 
)
+
+pure virtual
+
+ +

Set the direction of the given digital channel.

+
Parameters
+ + + +
indexThe index corresponding to the channel
dirAn enumerator that indicates the direction of a channel
+
+
+ +
+
+ +

◆ setDirection() [3/5]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::digital::M2kDigital::setDirection (unsigned int index,
bool dir 
)
+
+pure virtual
+
+ +

Set the direction of the given digital channel.

+
Parameters
+ + + +
indexThe index corresponding to the channel
dirA boolean value that corresponds to one direction
+
+
+
Note
The boolean value for input direction is false and for output direction is true
+ +
+
+ +

◆ setDirection() [4/5]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::digital::M2kDigital::setDirection (DIO_CHANNEL index,
bool dir 
)
+
+pure virtual
+
+ +

Set the direction of the given digital channel.

+
Parameters
+ + + +
indexAn enumerator corresponding to the channel's index
dirA boolean value that corresponds to one direction
+
+
+
Note
The boolean value for input direction is false and for output direction is true
+ +
+
+ +

◆ setDirection() [5/5]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::digital::M2kDigital::setDirection (DIO_CHANNEL index,
DIO_DIRECTION dir 
)
+
+pure virtual
+
+ +

Set the direction of the given digital channel.

+
Parameters
+ + + +
indexAn enumerator corresponding to the channel's index
dirAn enumerator that indicates the direction of a channel
+
+
+ +
+
+ +

◆ setExternalClocksource()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::digital::M2kDigital::setExternalClocksource (bool external)
+
+pure virtual
+
+ +

Set the clocksource.

+
Parameters
+ + +
external- True to set source to external
    +
  • False to set source to internal
  • +
+
+
+
+
Note
Only available from firmware v0.26.
+ +
+
+ +

◆ setKernelBuffersCountIn()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::digital::M2kDigital::setKernelBuffersCountIn (unsigned int count)
+
+pure virtual
+
+ +

Set the kernel buffers for input to a specific value.

+
Parameters
+ + +
countthe number of kernel buffers
+
+
+ +
+
+ +

◆ setKernelBuffersCountOut()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::digital::M2kDigital::setKernelBuffersCountOut (unsigned int count)
+
+pure virtual
+
+ +

Set the kernel buffers for output to a specific value.

+
Parameters
+ + +
countthe number of kernel buffers
+
+
+ +
+
+ +

◆ setOutputMode() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::digital::M2kDigital::setOutputMode (DIO_CHANNEL chn,
DIO_MODE mode 
)
+
+pure virtual
+
+ +

Set the output mode for the given digital channel.

+
Parameters
+ + + +
chnAn enumerator corresponding to the channel's index
modeAn enumerator corresponding to the output mode
+
+
+ +
+
+ +

◆ setOutputMode() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::digital::M2kDigital::setOutputMode (unsigned int chn,
DIO_MODE mode 
)
+
+pure virtual
+
+ +

Set the output mode for the given digital channel.

+
Parameters
+ + + +
chnThe index corresponding to the channel
modeAn enumerator corresponding to the output mode
+
+
+ +
+
+ +

◆ setRateMux()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void libm2k::digital::M2kDigital::setRateMux ()
+
+pure virtual
+
+ +

Force the digital interface to use the analogical rate.

+
Note
Only available from firmware v0.26.
+ +
+
+ +

◆ setSampleRateIn()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::digital::M2kDigital::setSampleRateIn (double samplerate)
+
+pure virtual
+
+ +

Set the sample rate for all digital input channels.

+
Parameters
+ + +
samplerateA double value to set the sample rate to
+
+
+
Returns
The current sample rate for all digital input channels
+ +
+
+ +

◆ setSampleRateOut()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::digital::M2kDigital::setSampleRateOut (double samplerate)
+
+pure virtual
+
+ +

Set the sample rate for all digital output channels.

+
Parameters
+ + +
samplerateA double value to set the sample rate to
+
+
+
Returns
The current sample rate for all digital output channels
+ +
+
+ +

◆ setValueRaw() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::digital::M2kDigital::setValueRaw (DIO_CHANNEL index,
DIO_LEVEL level 
)
+
+pure virtual
+
+ +

Set the raw value of a given digital channel.

+
Parameters
+ + + +
indexAn enumerator corresponding to the channel's index
levelAn enumerator corresponding to the raw value
+
+
+ +
+
+ +

◆ setValueRaw() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::digital::M2kDigital::setValueRaw (unsigned int index,
DIO_LEVEL level 
)
+
+pure virtual
+
+ +

Set the raw value of a given digital channel.

+
Parameters
+ + + +
indexThe index corresponding to the channel
levelAn enumerator corresponding to the raw value
+
+
+ +
+
+ +

◆ setValueRaw() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::digital::M2kDigital::setValueRaw (DIO_CHANNEL index,
bool level 
)
+
+pure virtual
+
+ +

Set the raw value of a given digital channel.

+
Parameters
+ + + +
indexAn enumerator corresponding to the channel's index
levelA boolean value corresponding to the raw value
+
+
+ +
+
+ +

◆ startAcquisition()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::digital::M2kDigital::startAcquisition (unsigned int nb_samples)
+
+pure virtual
+
+ +

Create the buffer for all channels and start the acquisition.

+
Parameters
+ + +
nb_samplessize of the buffer in samples
+
+
+ +
+
+
+ + + + diff --git a/group__dmm.html b/group__dmm.html new file mode 100644 index 00000000..e3b141f6 --- /dev/null +++ b/group__dmm.html @@ -0,0 +1,274 @@ + + + + + + + +libm2k: DMM + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
+
+
+ +

Contains the representation of the digital multimeter. +More...

+
+Collaboration diagram for DMM:
+
+
+ + + + +
+
+ + + + + +

+Classes

class  libm2k::analog::DMM
 Controls the digital multimeter. More...
 
+ + + + + + + + + + + + + + + + +

+Functions

virtual std::vector< std::string > libm2k::analog::DMM::getAllChannels ()=0
 Retrieve all channels. More...
 
virtual libm2k::analog::DMM_READING libm2k::analog::DMM::readChannel (unsigned int index)=0
 Retrieve additional information about the given channel. More...
 
virtual libm2k::analog::DMM_READING libm2k::analog::DMM::readChannel (std::string chn_name)=0
 Retrieve additional information about the given channel. More...
 
virtual std::vector< libm2k::analog::DMM_READINGlibm2k::analog::DMM::readAll ()=0
 Retrieve additional information about all channels. More...
 
virtual std::string libm2k::analog::DMM::getName ()=0
 Retrieve the device's name. More...
 
+

Detailed Description

+

Contains the representation of the digital multimeter.

+

Function Documentation

+ +

◆ getAllChannels()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector<std::string> libm2k::analog::DMM::getAllChannels ()
+
+pure virtual
+
+ +

Retrieve all channels.

+
Returns
A list containing the name of all channels
+ +
+
+ +

◆ getName()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string libm2k::analog::DMM::getName ()
+
+pure virtual
+
+ +

Retrieve the device's name.

+
Returns
The name of the device
+ +
+
+ +

◆ readAll()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector<libm2k::analog::DMM_READING> libm2k::analog::DMM::readAll ()
+
+pure virtual
+
+ +

Retrieve additional information about all channels.

+
Returns
A list containing structures for each channel
+ +
+
+ +

◆ readChannel() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual libm2k::analog::DMM_READING libm2k::analog::DMM::readChannel (unsigned int index)
+
+pure virtual
+
+ +

Retrieve additional information about the given channel.

+
Parameters
+ + +
indexThe index corresponding to the channel
+
+
+
Returns
A structure containing additional information
+ +
+
+ +

◆ readChannel() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual libm2k::analog::DMM_READING libm2k::analog::DMM::readChannel (std::string chn_name)
+
+pure virtual
+
+ +

Retrieve additional information about the given channel.

+
Parameters
+ + +
chn_nameThe name corresponding to the channel
+
+
+
Returns
A structure containing additional information
+ +
+
+
+ + + + diff --git a/group__dmm.map b/group__dmm.map new file mode 100644 index 00000000..2fcbee46 --- /dev/null +++ b/group__dmm.map @@ -0,0 +1,4 @@ + + + + diff --git a/group__dmm.md5 b/group__dmm.md5 new file mode 100644 index 00000000..d59618e2 --- /dev/null +++ b/group__dmm.md5 @@ -0,0 +1 @@ +a28c2130f74af5dc57a0c24b48ac75fb \ No newline at end of file diff --git a/group__dmm.png b/group__dmm.png new file mode 100644 index 00000000..a385d748 Binary files /dev/null and b/group__dmm.png differ diff --git a/group__m2k.html b/group__m2k.html new file mode 100644 index 00000000..f185dff5 --- /dev/null +++ b/group__m2k.html @@ -0,0 +1,1032 @@ + + + + + + + +libm2k: M2k + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
M2k
+
+
+ +

Contains the representation of the M2K. +More...

+ + + + + +

+Classes

class  libm2k::context::M2k
 Controls the ADALM2000. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

virtual void libm2k::context::M2k::reset ()=0
 Reset the M2K device to default settings: More...
 
virtual bool libm2k::context::M2k::calibrateADC ()=0
 Calibrate the ADC. More...
 
virtual bool libm2k::context::M2k::calibrateDAC ()=0
 Calibrate the DAC. More...
 
virtual double libm2k::context::M2k::calibrateFromContext ()=0
 Calibrate both ADC and DACs using predefined calibration values located in context. More...
 
virtual libm2k::digital::M2kDigitallibm2k::context::M2k::getDigital ()=0
 Retrieve the Digital object. More...
 
virtual libm2k::analog::M2kPowerSupplylibm2k::context::M2k::getPowerSupply ()=0
 Retrieve the PowerSupply object. More...
 
virtual libm2k::analog::M2kAnalogInlibm2k::context::M2k::getAnalogIn ()=0
 Retrieve the AnalogIn object. More...
 
virtual libm2k::analog::M2kAnalogInlibm2k::context::M2k::getAnalogIn (std::string dev_name)=0
 Retrieve the AnalogIn object of a device. More...
 
virtual libm2k::analog::M2kAnalogOutlibm2k::context::M2k::getAnalogOut ()=0
 Retrieve the AnalogOut object. More...
 
virtual bool libm2k::context::M2k::hasMixedSignal ()=0
 Check if the mixed signal acquisition is available on the current firmware version. More...
 
virtual void libm2k::context::M2k::startMixedSignalAcquisition (unsigned int nb_samples)=0
 Initiate the mixed acquisition. More...
 
virtual void libm2k::context::M2k::stopMixedSignalAcquisition ()=0
 Stop the mixed acquisition. More...
 
virtual int libm2k::context::M2k::getDacCalibrationOffset (unsigned int chn)=0
 Get the calibration offset of the DAC. More...
 
virtual double libm2k::context::M2k::getDacCalibrationGain (unsigned int chn)=0
 Get the calibration gain of the DAC. More...
 
virtual int libm2k::context::M2k::getAdcCalibrationOffset (unsigned int chn)=0
 Get the calibration offset of the ADC. More...
 
virtual double libm2k::context::M2k::getAdcCalibrationGain (unsigned int chn)=0
 Get the calibration gain of the ADC. More...
 
virtual void libm2k::context::M2k::setDacCalibrationOffset (unsigned int chn, int offset)=0
 Set the calibration offset of the DAC. More...
 
virtual void libm2k::context::M2k::setDacCalibrationGain (unsigned int chn, double gain)=0
 Set the calibration gain of the DAC. More...
 
virtual void libm2k::context::M2k::setAdcCalibrationOffset (unsigned int chn, int offset)=0
 Set the calibration offset of the ADC. More...
 
virtual void libm2k::context::M2k::setAdcCalibrationGain (unsigned int chn, double gain)=0
 Set the calibration gain of the ADC. More...
 
virtual bool libm2k::context::M2k::hasContextCalibration ()=0
 Check if the calibration based on temperature can be performed. More...
 
virtual std::map< double, std::shared_ptr< struct CALIBRATION_PARAMETERS > > & libm2k::context::M2k::getLUT ()=0
 Retrieve the predefined calibration parameter. More...
 
virtual bool libm2k::context::M2k::isCalibrated ()=0
 Check if the board was calibrated. More...
 
virtual void libm2k::context::M2k::setLed (bool on)=0
 Turn on or off the board's led. More...
 
virtual bool libm2k::context::M2k::getLed ()=0
 Retrieve the state of the led. More...
 
+

Detailed Description

+

Contains the representation of the M2K.

+

Function Documentation

+ +

◆ calibrateADC()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool libm2k::context::M2k::calibrateADC ()
+
+pure virtual
+
+ +

Calibrate the ADC.

+
Returns
On succces, true
+
+Otherwise, false
+ +
+
+ +

◆ calibrateDAC()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool libm2k::context::M2k::calibrateDAC ()
+
+pure virtual
+
+ +

Calibrate the DAC.

+
Returns
On succces, true
+
+Otherwise, false
+ +
+
+ +

◆ calibrateFromContext()

+ +
+
+ + + + + +
+ + + + + + + +
virtual double libm2k::context::M2k::calibrateFromContext ()
+
+pure virtual
+
+ +

Calibrate both ADC and DACs using predefined calibration values located in context.

+
Returns
The closest temperature found in the lookup table
+
Note
Only available from firmware v0.26.
+ +
+
+ +

◆ getAdcCalibrationGain()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::context::M2k::getAdcCalibrationGain (unsigned int chn)
+
+pure virtual
+
+ +

Get the calibration gain of the ADC.

+
Parameters
+ + +
chnThe index corresponding to a channel
+
+
+
Returns
The value of the calibration gain
+ +
+
+ +

◆ getAdcCalibrationOffset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual int libm2k::context::M2k::getAdcCalibrationOffset (unsigned int chn)
+
+pure virtual
+
+ +

Get the calibration offset of the ADC.

+
Parameters
+ + +
chnThe index corresponding to a channel
+
+
+
Returns
The value of the calibration offset
+ +
+
+ +

◆ getAnalogIn() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
virtual libm2k::analog::M2kAnalogIn* libm2k::context::M2k::getAnalogIn ()
+
+pure virtual
+
+ +

Retrieve the AnalogIn object.

+
Returns
On success, a pointer to an AnalogIn object
+
+On error, null is returned
+ +
+
+ +

◆ getAnalogIn() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual libm2k::analog::M2kAnalogIn* libm2k::context::M2k::getAnalogIn (std::string dev_name)
+
+pure virtual
+
+ +

Retrieve the AnalogIn object of a device.

+
Parameters
+ + +
dev_nameThe name corresponding to a device
+
+
+
Returns
On success, a pointer to an AnalogIn object
+
+If the name does not correspond to any device, null is returned
+ +
+
+ +

◆ getAnalogOut()

+ +
+
+ + + + + +
+ + + + + + + +
virtual libm2k::analog::M2kAnalogOut* libm2k::context::M2k::getAnalogOut ()
+
+pure virtual
+
+ +

Retrieve the AnalogOut object.

+
Returns
On success, a pointer to an AnalogOut object
+
+On error, null is returned
+ +
+
+ +

◆ getDacCalibrationGain()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::context::M2k::getDacCalibrationGain (unsigned int chn)
+
+pure virtual
+
+ +

Get the calibration gain of the DAC.

+
Parameters
+ + +
chnThe index corresponding to a channel
+
+
+
Returns
The value of the calibration gain
+ +
+
+ +

◆ getDacCalibrationOffset()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual int libm2k::context::M2k::getDacCalibrationOffset (unsigned int chn)
+
+pure virtual
+
+ +

Get the calibration offset of the DAC.

+
Parameters
+ + +
chnThe index corresponding to a channel
+
+
+
Returns
The value of the calibration offset
+ +
+
+ +

◆ getDigital()

+ +
+
+ + + + + +
+ + + + + + + +
virtual libm2k::digital::M2kDigital* libm2k::context::M2k::getDigital ()
+
+pure virtual
+
+ +

Retrieve the Digital object.

+
Returns
On success, a pointer to a Digital object
+
Exceptions
+ + +
EXC_INVALID_PARAMETERNo M2K digital device found
+
+
+ +
+
+ +

◆ getLed()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool libm2k::context::M2k::getLed ()
+
+pure virtual
+
+ +

Retrieve the state of the led.

+
Returns
If the led is turned on, true
+
+Otherwise, false
+ +
+
+ +

◆ getLUT()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::map<double, std::shared_ptr<struct CALIBRATION_PARAMETERS> >& libm2k::context::M2k::getLUT ()
+
+pure virtual
+
+ +

Retrieve the predefined calibration parameter.

+
Returns
Map <temperature, parameters>
+ +
+
+ +

◆ getPowerSupply()

+ +
+
+ + + + + +
+ + + + + + + +
virtual libm2k::analog::M2kPowerSupply* libm2k::context::M2k::getPowerSupply ()
+
+pure virtual
+
+ +

Retrieve the PowerSupply object.

+
Returns
On success, a pointer to a PowerSupply object
+
Exceptions
+ + +
EXC_INVALID_PARAMETERNo M2K power supply
+
+
+ +
+
+ +

◆ hasContextCalibration()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool libm2k::context::M2k::hasContextCalibration ()
+
+pure virtual
+
+ +

Check if the calibration based on temperature can be performed.

+
Returns
True if the calibration parameters are available, False otherwise
+ +
+
+ +

◆ hasMixedSignal()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool libm2k::context::M2k::hasMixedSignal ()
+
+pure virtual
+
+ +

Check if the mixed signal acquisition is available on the current firmware version.

+
Returns
True if the mixed signal acquisition is available, false otherwise
+ +
+
+ +

◆ isCalibrated()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool libm2k::context::M2k::isCalibrated ()
+
+pure virtual
+
+ +

Check if the board was calibrated.

+
Returns
True if the board was calibrated, False otherwise
+ +
+
+ +

◆ reset()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void libm2k::context::M2k::reset ()
+
+pure virtual
+
+ +

Reset the M2K device to default settings:

+
    +
  • Reset calibration coefficients
  • +
  • Maximum samplerates
  • +
  • Set oversampling ratio to 1
  • +
  • Set AnalogIn range to low range
  • +
  • Set kernel buffers count to 4 (analog/digital and in/out devices)
  • +
  • Disable all TX digital channels and enable all RX digital channels
    Note
    A calibration is needed afterwards
    +
  • +
+ +

Implements libm2k::context::Context.

+ +
+
+ +

◆ setAdcCalibrationGain()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::context::M2k::setAdcCalibrationGain (unsigned int chn,
double gain 
)
+
+pure virtual
+
+ +

Set the calibration gain of the ADC.

+
Parameters
+ + + +
chnThe index corresponding to a channel
gainThe calibration gain value
+
+
+
Note
Overrides the calibration coefficients.
+Can be reset by running a calibration.
+The gain value is currently limited at the (-2,2) range by the hardware.
+ +
+
+ +

◆ setAdcCalibrationOffset()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::context::M2k::setAdcCalibrationOffset (unsigned int chn,
int offset 
)
+
+pure virtual
+
+ +

Set the calibration offset of the ADC.

+
Parameters
+ + + +
chnThe index corresponding to a channel
offsetThe calibration offset value
+
+
+
Note
Overrides the calibration coefficients.
+Can be reset by running a calibration.
+ +
+
+ +

◆ setDacCalibrationGain()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::context::M2k::setDacCalibrationGain (unsigned int chn,
double gain 
)
+
+pure virtual
+
+ +

Set the calibration gain of the DAC.

+
Parameters
+ + + +
chnThe index corresponding to a channel
gainThe calibration gain value
+
+
+
Note
Overrides the calibration coefficients.
+Can be reset by running a calibration.
+The gain value is currently limited at the (-2,2) range by the hardware.
+ +
+
+ +

◆ setDacCalibrationOffset()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::context::M2k::setDacCalibrationOffset (unsigned int chn,
int offset 
)
+
+pure virtual
+
+ +

Set the calibration offset of the DAC.

+
Parameters
+ + + +
chnThe index corresponding to a channel
offsetThe calibration offset value
+
+
+
Note
Overrides the calibration coefficients.
+Can be reset by running a calibration.
+ +
+
+ +

◆ setLed()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::context::M2k::setLed (bool on)
+
+pure virtual
+
+ +

Turn on or off the board's led.

+
Parameters
+ + +
onA boolean value corresponding to the state of the led
+
+
+
Note
For turning on the led, set the parameter true.
+ +
+
+ +

◆ startMixedSignalAcquisition()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::context::M2k::startMixedSignalAcquisition (unsigned int nb_samples)
+
+pure virtual
+
+ +

Initiate the mixed acquisition.

+
Parameters
+ + +
nb_samplesThe number of samples that will be retrieved
+
+
+
Note
Only available from firmware v0.26.
+ +
+
+ +

◆ stopMixedSignalAcquisition()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void libm2k::context::M2k::stopMixedSignalAcquisition ()
+
+pure virtual
+
+ +

Stop the mixed acquisition.

+
Note
Only available from firmware v0.26.
+ +
+
+
+ + + + diff --git a/group__m2ktrigger.html b/group__m2ktrigger.html new file mode 100644 index 00000000..f272b2af --- /dev/null +++ b/group__m2ktrigger.html @@ -0,0 +1,1746 @@ + + + + + + + +libm2k: HardwareTrigger + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
HardwareTrigger
+
+
+ +

Contains the representation of the ADALM2000 trigger system. +More...

+ + + + + +

+Classes

class  libm2k::M2kHardwareTrigger
 Controls the hardware trigger for ADALM2000. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

virtual int libm2k::M2kHardwareTrigger::getAnalogLevelRaw (unsigned int chnIdx)=0
 Get the raw analog trigger level for one channel. More...
 
virtual void libm2k::M2kHardwareTrigger::setAnalogLevelRaw (unsigned int chnIdx, int level)=0
 Set the raw analog trigger level for one channel. More...
 
virtual void libm2k::M2kHardwareTrigger::setAnalogLevel (unsigned int chnIdx, double v_level)=0
 Set the analog trigger level for one channel. More...
 
virtual double libm2k::M2kHardwareTrigger::getAnalogLevel (unsigned int chnIdx)=0
 Get the analog trigger level for one channel. More...
 
virtual double libm2k::M2kHardwareTrigger::getAnalogHysteresis (unsigned int chnIdx)=0
 Get the analog hysteresis value for one channel. More...
 
virtual void libm2k::M2kHardwareTrigger::setAnalogHysteresis (unsigned int chnIdx, double hysteresis)=0
 Set the analog hysteresis value for one channel. More...
 
virtual M2K_TRIGGER_CONDITION_ANALOG libm2k::M2kHardwareTrigger::getAnalogCondition (unsigned int chnIdx)=0
 Get the trigger condition for the analog trigger on a specific channel. More...
 
virtual void libm2k::M2kHardwareTrigger::setAnalogCondition (unsigned int chnIdx, M2K_TRIGGER_CONDITION_ANALOG cond)=0
 Set the trigger condition for the analog trigger on a specific channel. More...
 
virtual M2K_TRIGGER_CONDITION_DIGITAL libm2k::M2kHardwareTrigger::getDigitalCondition (unsigned int chnIdx)=0
 Get the trigger condition for the digital trigger on a specific channel. More...
 
virtual M2K_TRIGGER_CONDITION_DIGITAL libm2k::M2kHardwareTrigger::getDigitalCondition (libm2k::digital::DIO_CHANNEL chnIdx)=0
 Get the trigger condition for the digital trigger on a specific channel. More...
 
virtual void libm2k::M2kHardwareTrigger::setDigitalCondition (unsigned int chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond)=0
 Set the trigger condition for the digital trigger on a specific channel. More...
 
virtual void libm2k::M2kHardwareTrigger::setDigitalCondition (libm2k::digital::DIO_CHANNEL chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond)=0
 Set the trigger condition for the digital trigger on a specific channel. More...
 
virtual M2K_TRIGGER_MODE libm2k::M2kHardwareTrigger::getAnalogMode (unsigned int chnIdx)=0
 Get the mode for the analog trigger on a specific channel. More...
 
virtual void libm2k::M2kHardwareTrigger::setAnalogMode (unsigned int chnIdx, M2K_TRIGGER_MODE mode)=0
 Set the mode for the analog trigger on a specific channel. More...
 
virtual libm2k::digital::DIO_TRIGGER_MODE libm2k::M2kHardwareTrigger::getDigitalMode ()=0
 Get the mode for the digital trigger. More...
 
virtual void libm2k::M2kHardwareTrigger::setDigitalMode (libm2k::digital::DIO_TRIGGER_MODE mode)=0
 Set the mode for the digital trigger. More...
 
virtual M2K_TRIGGER_SOURCE_ANALOG libm2k::M2kHardwareTrigger::getAnalogSource ()=0
 Get the source of the analog trigger. More...
 
virtual void libm2k::M2kHardwareTrigger::setAnalogSource (M2K_TRIGGER_SOURCE_ANALOG src)=0
 Set the source of the analog trigger. More...
 
virtual int libm2k::M2kHardwareTrigger::getAnalogSourceChannel ()=0
 Get the channel source of the analog trigger. More...
 
virtual void libm2k::M2kHardwareTrigger::setAnalogSourceChannel (unsigned int chnIdx)=0
 Set the channel source of the analog trigger. More...
 
virtual int libm2k::M2kHardwareTrigger::getAnalogDelay () const =0
 Get the analog trigger delay. More...
 
virtual void libm2k::M2kHardwareTrigger::setAnalogDelay (int delay)=0
 Set the analog trigger delay. More...
 
virtual int libm2k::M2kHardwareTrigger::getDigitalDelay () const =0
 Get the digital trigger delay. More...
 
virtual void libm2k::M2kHardwareTrigger::setDigitalDelay (int delay)=0
 Set the digital trigger delay. More...
 
virtual void libm2k::M2kHardwareTrigger::setAnalogStreamingFlag (bool enable)=0
 Set the streaming flag for the analog part. More...
 
virtual bool libm2k::M2kHardwareTrigger::getAnalogStreamingFlag ()=0
 Get the streaming flag for the analog part. More...
 
virtual void libm2k::M2kHardwareTrigger::setDigitalStreamingFlag (bool enable)=0
 Set the streaming flag for the digital part. More...
 
virtual bool libm2k::M2kHardwareTrigger::getDigitalStreamingFlag ()=0
 Get the streaming flag for the digital part. More...
 
virtual M2K_TRIGGER_CONDITION_DIGITAL libm2k::M2kHardwareTrigger::getAnalogExternalCondition (unsigned int chnIdx)=0
 getAnalogExternalCondition More...
 
virtual void libm2k::M2kHardwareTrigger::setAnalogExternalCondition (unsigned int chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond)=0
 setAnalogExternalCondition More...
 
virtual M2K_TRIGGER_CONDITION_DIGITAL libm2k::M2kHardwareTrigger::getDigitalExternalCondition () const =0
 getDigitalExternalCondition More...
 
virtual void libm2k::M2kHardwareTrigger::setDigitalExternalCondition (M2K_TRIGGER_CONDITION_DIGITAL cond)=0
 setDigitalExternalCondition More...
 
virtual void libm2k::M2kHardwareTrigger::setAnalogExternalOutSelect (M2K_TRIGGER_OUT_SELECT output_select)
 Select what should be redirected on the TO (trigger out) pin.
+ The options are (none, trigger in, digital in, analog in).
+. More...
 
virtual M2K_TRIGGER_OUT_SELECT libm2k::M2kHardwareTrigger::getAnalogExternalOutSelect ()
 Check which trigger events are forwarded on the TO (trigger out) pin. More...
 
virtual void libm2k::M2kHardwareTrigger::setDigitalSource (M2K_TRIGGER_SOURCE_DIGITAL external_src)
 Select which interface triggers the DigitalIn. More...
 
virtual M2K_TRIGGER_SOURCE_DIGITAL libm2k::M2kHardwareTrigger::getDigitalSource () const
 Check which is the source of the DigitalIn interface trigger event. More...
 
virtual void libm2k::M2kHardwareTrigger::setAnalogOutTriggerSource (M2K_TRIGGER_SOURCE_OUT src)=0
 Select which interface triggers the AnalogOut. More...
 
virtual M2K_TRIGGER_SOURCE_OUT libm2k::M2kHardwareTrigger::getAnalogOutTriggerSource () const =0
 Returns the source of the AnalogOut trigger event. More...
 
virtual void libm2k::M2kHardwareTrigger::setAnalogOutTriggerCondition (M2K_TRIGGER_CONDITION_OUT condition)=0
 Configures the triggering condition when the source of the AnalogOut trigger event is set to TRIGGER_TI_0. More...
 
virtual M2K_TRIGGER_CONDITION_OUT libm2k::M2kHardwareTrigger::getAnalogOutTriggerCondition () const =0
 Returns the condition of the AnalogOut trigger event when the source is TI. More...
 
virtual void libm2k::M2kHardwareTrigger::setAnalogOutTriggerStatus (M2K_TRIGGER_STATUS_ANALOG_OUT status)=0
 Defines the action to be performed when a trigger event occurs. More...
 
virtual M2K_TRIGGER_STATUS_ANALOG_OUT libm2k::M2kHardwareTrigger::getAnalogOutTriggerStatus () const =0
 Returns the action that is performed when a trigger event occurs. More...
 
+

Detailed Description

+

Contains the representation of the ADALM2000 trigger system.

+

Function Documentation

+ +

◆ getAnalogCondition()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual M2K_TRIGGER_CONDITION_ANALOG libm2k::M2kHardwareTrigger::getAnalogCondition (unsigned int chnIdx)
+
+pure virtual
+
+ +

Get the trigger condition for the analog trigger on a specific channel.

+
Parameters
+ + +
chnIdxthe required channel
+
+
+
Returns
the trigger condition
+ +
+
+ +

◆ getAnalogDelay()

+ +
+
+ + + + + +
+ + + + + + + +
virtual int libm2k::M2kHardwareTrigger::getAnalogDelay () const
+
+pure virtual
+
+ +

Get the analog trigger delay.

+
Returns
the value of the delay
+
Note
the delay can have negative values The negative values are used to place the trigger inside the buffer The value of the delay represents the number of samples in buffer before the triggered sample If the value is 0, the triggered sample will be the first one in the buffer For a buffer of 1000 samples, in order to have the trigger at the middle, you need to set it to -500 The minimum negative value is -8192
+
+the delay can have positive values TBD
+ +
+
+ +

◆ getAnalogExternalCondition()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual M2K_TRIGGER_CONDITION_DIGITAL libm2k::M2kHardwareTrigger::getAnalogExternalCondition (unsigned int chnIdx)
+
+pure virtual
+
+ +

getAnalogExternalCondition

+
Parameters
+ + +
chnIdx: integer - the index of the required channel
+
+
+
Returns
M2K_TRIGGER_CONDITION_DIGITAL
+ +
+
+ +

◆ getAnalogExternalOutSelect()

+ +
+
+ + + + + +
+ + + + + + + +
virtual M2K_TRIGGER_OUT_SELECT libm2k::M2kHardwareTrigger::getAnalogExternalOutSelect ()
+
+virtual
+
+ +

Check which trigger events are forwarded on the TO (trigger out) pin.

+
Returns
M2K_TRIGGER_OUT_SELECT :
+ SELECT_NONE;
+ SELECT_TRIGGER_IN;
+ SELECT_DIGITAL_IN;
+ SELECT_ANALOG_IN;
+
+
Note
Only available from firmware v0.24.
+ +
+
+ +

◆ getAnalogHysteresis()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::M2kHardwareTrigger::getAnalogHysteresis (unsigned int chnIdx)
+
+pure virtual
+
+ +

Get the analog hysteresis value for one channel.

+
Parameters
+ + +
chnIdxthe required channel
+
+
+
Returns
the value of the hysteresis in Volts
+ +
+
+ +

◆ getAnalogLevel()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual double libm2k::M2kHardwareTrigger::getAnalogLevel (unsigned int chnIdx)
+
+pure virtual
+
+ +

Get the analog trigger level for one channel.

+
Parameters
+ + +
chnIdxthe required channel
+
+
+
Returns
the analog trigger level in volts
+ +
+
+ +

◆ getAnalogLevelRaw()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual int libm2k::M2kHardwareTrigger::getAnalogLevelRaw (unsigned int chnIdx)
+
+pure virtual
+
+ +

Get the raw analog trigger level for one channel.

+
Parameters
+ + +
chnIdxthe required channel
+
+
+
Returns
the raw analog trigger level
+ +
+
+ +

◆ getAnalogMode()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual M2K_TRIGGER_MODE libm2k::M2kHardwareTrigger::getAnalogMode (unsigned int chnIdx)
+
+pure virtual
+
+ +

Get the mode for the analog trigger on a specific channel.

+
Parameters
+ + +
chnIdxthe required channel
+
+
+
Returns
the analog trigger mode
+ +
+
+ +

◆ getAnalogOutTriggerCondition()

+ +
+
+ + + + + +
+ + + + + + + +
virtual M2K_TRIGGER_CONDITION_OUT libm2k::M2kHardwareTrigger::getAnalogOutTriggerCondition () const
+
+pure virtual
+
+ +

Returns the condition of the AnalogOut trigger event when the source is TI.

+
Returns
M2K_TRIGGER_CONDITION_OUT :
+ NONE_OUT - disabled;
+ LOW_LEVEL_OUT;
+ HIGH_LEVEL_OUT;
+ ANY_EDGE_OUT;
+ RISING_EDGE_OUT;
+ FALLING_EDGE_OUT;
+
+
Note
Only available from firmware v0.33.
+ +
+
+ +

◆ getAnalogOutTriggerSource()

+ +
+
+ + + + + +
+ + + + + + + +
virtual M2K_TRIGGER_SOURCE_OUT libm2k::M2kHardwareTrigger::getAnalogOutTriggerSource () const
+
+pure virtual
+
+ +

Returns the source of the AnalogOut trigger event.

+
Returns
M2K_TRIGGER_SOURCE_OUT :
+ TRIGGER_NONE;
+ TRIGGER_TI;
+ TRIGGER_ADC;
+ TRIGGER_LA;
+
+
Note
Only available from firmware v0.33.
+ +
+
+ +

◆ getAnalogOutTriggerStatus()

+ +
+
+ + + + + +
+ + + + + + + +
virtual M2K_TRIGGER_STATUS_ANALOG_OUT libm2k::M2kHardwareTrigger::getAnalogOutTriggerStatus () const
+
+pure virtual
+
+ +

Returns the action that is performed when a trigger event occurs.

+
Returns
M2K_TRIGGER_STATUS_ANALOG_OUT :
+ DISABLED;
+ START;
+ STOP;
+
+
Note
Only available from firmware v0.33.
+ +
+
+ +

◆ getAnalogSource()

+ +
+
+ + + + + +
+ + + + + + + +
virtual M2K_TRIGGER_SOURCE_ANALOG libm2k::M2kHardwareTrigger::getAnalogSource ()
+
+pure virtual
+
+ +

Get the source of the analog trigger.

+
Returns
analog trigger source (channel1, channel2, etc)
+ +
+
+ +

◆ getAnalogSourceChannel()

+ +
+
+ + + + + +
+ + + + + + + +
virtual int libm2k::M2kHardwareTrigger::getAnalogSourceChannel ()
+
+pure virtual
+
+ +

Get the channel source of the analog trigger.

+
Returns
analog trigger channel source (channel1, channel2)
+ +
+
+ +

◆ getAnalogStreamingFlag()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool libm2k::M2kHardwareTrigger::getAnalogStreamingFlag ()
+
+pure virtual
+
+ +

Get the streaming flag for the analog part.

+
Returns
whether the streaming is enabled (true/false)
+ +
+
+ +

◆ getDigitalCondition() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual M2K_TRIGGER_CONDITION_DIGITAL libm2k::M2kHardwareTrigger::getDigitalCondition (unsigned int chnIdx)
+
+pure virtual
+
+ +

Get the trigger condition for the digital trigger on a specific channel.

+
Parameters
+ + +
chnIdxThe index of the required channel
+
+
+
Returns
The trigger condition
+ +
+
+ +

◆ getDigitalCondition() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual M2K_TRIGGER_CONDITION_DIGITAL libm2k::M2kHardwareTrigger::getDigitalCondition (libm2k::digital::DIO_CHANNEL chnIdx)
+
+pure virtual
+
+ +

Get the trigger condition for the digital trigger on a specific channel.

+
Parameters
+ + +
chnIdxAn enumerator corresponding to the index of the required channel
+
+
+
Returns
The trigger condition
+ +
+
+ +

◆ getDigitalDelay()

+ +
+
+ + + + + +
+ + + + + + + +
virtual int libm2k::M2kHardwareTrigger::getDigitalDelay () const
+
+pure virtual
+
+ +

Get the digital trigger delay.

+
Returns
the value of the digital delay
+
Note
the delay can have negative values The negative values are used to place the trigger inside the buffer The value of the delay represents the number of samples in buffer before the triggered sample If the value is 0, the triggered sample will be the first one in the buffer For a buffer of 1000 samples, in order to have the trigger at the middle, you need to set it to -500 The minimum negative value is -8192
+
+the delay can have positive values TBD
+ +
+
+ +

◆ getDigitalExternalCondition()

+ +
+
+ + + + + +
+ + + + + + + +
virtual M2K_TRIGGER_CONDITION_DIGITAL libm2k::M2kHardwareTrigger::getDigitalExternalCondition () const
+
+pure virtual
+
+ +

getDigitalExternalCondition

+
Returns
M2K_TRIGGER_CONDITION_DIGITAL
+ +
+
+ +

◆ getDigitalMode()

+ +
+
+ + + + + +
+ + + + + + + +
virtual libm2k::digital::DIO_TRIGGER_MODE libm2k::M2kHardwareTrigger::getDigitalMode ()
+
+pure virtual
+
+ +

Get the mode for the digital trigger.

+
Returns
the digital trigger mode (DIO_OR/DIO_AND)
+ +
+
+ +

◆ getDigitalSource()

+ +
+
+ + + + + +
+ + + + + + + +
virtual M2K_TRIGGER_SOURCE_DIGITAL libm2k::M2kHardwareTrigger::getDigitalSource () const
+
+virtual
+
+ +

Check which is the source of the DigitalIn interface trigger event.

+
Returns
M2K_TRIGGER_SOURCE_DIGITAL :
+ SRC_TRIGGER_IN;
+ SRC_ANALOG_IN;
+ SRC_NONE;
+
+
Note
Only available from firmware v0.24.
+ +
+
+ +

◆ getDigitalStreamingFlag()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool libm2k::M2kHardwareTrigger::getDigitalStreamingFlag ()
+
+pure virtual
+
+ +

Get the streaming flag for the digital part.

+
Returns
whether the streaming is enabled (true/false)
+ +
+
+ +

◆ setAnalogCondition()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setAnalogCondition (unsigned int chnIdx,
M2K_TRIGGER_CONDITION_ANALOG cond 
)
+
+pure virtual
+
+ +

Set the trigger condition for the analog trigger on a specific channel.

+
Parameters
+ + + +
chnIdxthe required channel
condthe specific trigger condition
+
+
+ +
+
+ +

◆ setAnalogDelay()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setAnalogDelay (int delay)
+
+pure virtual
+
+ +

Set the analog trigger delay.

+
Parameters
+ + +
delaythe value of the analog delay
+
+
+
Note
the delay can have negative values The negative values are used to place the trigger inside the buffer The value of the delay represents the number of samples in buffer before the triggered sample If the value is 0, the triggered sample will be the first one in the buffer For a buffer of 1000 samples, in order to have the trigger at the middle, you need to set it to -500 The minimum negative value is -8192
+
+the delay can have positive values TBD
+ +
+
+ +

◆ setAnalogExternalCondition()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setAnalogExternalCondition (unsigned int chnIdx,
M2K_TRIGGER_CONDITION_DIGITAL cond 
)
+
+pure virtual
+
+ +

setAnalogExternalCondition

+
Parameters
+ + + +
chnIdx: integer - the index of the required channel
cond: M2K_TRIGGER_CONDITION_DIGITAL
+
+
+ +
+
+ +

◆ setAnalogExternalOutSelect()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setAnalogExternalOutSelect (M2K_TRIGGER_OUT_SELECT output_select)
+
+virtual
+
+ +

Select what should be redirected on the TO (trigger out) pin.
+ The options are (none, trigger in, digital in, analog in).
+.

+
Parameters
+ + +
output_select: of type M2K_TRIGGER_OUT_SELECT:
+ SELECT_TRIGGER_IN - forwards trigger events from TI pin(trigger in);
+ SELECT_DIGITAL_IN - forwards trigger events from DigitalIn interface;
+ SELECT_ANALOG_IN - forwards trigger events from AnalogIn interface;
+ SELECT_NONE - no trigger event is forwarded;
+
+
+
+
Note
Only available from firmware v0.24.
+ +
+
+ +

◆ setAnalogHysteresis()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setAnalogHysteresis (unsigned int chnIdx,
double hysteresis 
)
+
+pure virtual
+
+ +

Set the analog hysteresis value for one channel.

+
Parameters
+ + + +
chnIdxthe required channel
hysteresisin Volts
+
+
+ +
+
+ +

◆ setAnalogLevel()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setAnalogLevel (unsigned int chnIdx,
double v_level 
)
+
+pure virtual
+
+ +

Set the analog trigger level for one channel.

+
Parameters
+ + + +
chnIdxthe required channel
v_levelthe analog trigger level in volts
+
+
+ +
+
+ +

◆ setAnalogLevelRaw()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setAnalogLevelRaw (unsigned int chnIdx,
int level 
)
+
+pure virtual
+
+ +

Set the raw analog trigger level for one channel.

+
Parameters
+ + + +
chnIdxthe required channel
levelthe raw analog trigger level
+
+
+ +
+
+ +

◆ setAnalogMode()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setAnalogMode (unsigned int chnIdx,
M2K_TRIGGER_MODE mode 
)
+
+pure virtual
+
+ +

Set the mode for the analog trigger on a specific channel.

+
Parameters
+ + + +
chnIdxthe required channel
modethe analog trigger mode
+
+
+ +
+
+ +

◆ setAnalogOutTriggerCondition()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setAnalogOutTriggerCondition (M2K_TRIGGER_CONDITION_OUT condition)
+
+pure virtual
+
+ +

Configures the triggering condition when the source of the AnalogOut trigger event is set to TRIGGER_TI_0.

+
Parameters
+ + +
conditionof type M2K_TRIGGER_CONDITION_OUT:
+ NONE_OUT - disabled;
+ LOW_LEVEL_OUT;
+ HIGH_LEVEL_OUT;
+ ANY_EDGE_OUT;
+ RISING_EDGE_OUT;
+ FALLING_EDGE_OUT;
+
+
+
+
Note
For the other sources this condition is ignored, the configuration is forwarded by the corresponding interface.
+
+Only available from firmware v0.33.
+ +
+
+ +

◆ setAnalogOutTriggerSource()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setAnalogOutTriggerSource (M2K_TRIGGER_SOURCE_OUT src)
+
+pure virtual
+
+ +

Select which interface triggers the AnalogOut.

+
Parameters
+ + +
srcof type M2K_TRIGGER_SOURCE_OUT:
+ TRIGGER_NONE - trigger events are disabled;
+ TRIGGER_TI - trigger events on the TI pin will trigger the AnalogOut interface;
+ TRIGGER_ADC - trigger events on the AnalogIn interface will trigger the AnalogOut interface;
+ TRIGGER_LA - trigger events on the DigitalIn interface will trigger the AnalogOut interface;
+
+
+
+
Note
Only available from firmware v0.33.
+ +
+
+ +

◆ setAnalogOutTriggerStatus()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setAnalogOutTriggerStatus (M2K_TRIGGER_STATUS_ANALOG_OUT status)
+
+pure virtual
+
+ +

Defines the action to be performed when a trigger event occurs.

+
Parameters
+ + +
statusof type M2K_TRIGGER_STATUS_ANALOG_OUT:
+ DISABLED - no action is performed when a trigger event occurs;
+ START - the AnalogOut interface starts outputting samples;
+ STOP - the AnalogOut interface stops outputting samples;
+
+
+
+
Note
Only available from firmware v0.33.
+ +
+
+ +

◆ setAnalogSource()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setAnalogSource (M2K_TRIGGER_SOURCE_ANALOG src)
+
+pure virtual
+
+ +

Set the source of the analog trigger.

+
Parameters
+ + +
srcanalog trigger source (channel1, channel2, etc)
+
+
+ +
+
+ +

◆ setAnalogSourceChannel()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setAnalogSourceChannel (unsigned int chnIdx)
+
+pure virtual
+
+ +

Set the channel source of the analog trigger.

+
Parameters
+ + +
chnIdxthe index of the channel that should be used
+
+
+ +
+
+ +

◆ setAnalogStreamingFlag()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setAnalogStreamingFlag (bool enable)
+
+pure virtual
+
+ +

Set the streaming flag for the analog part.

+
Parameters
+ + +
enablethe streaming
+
+
+ +
+
+ +

◆ setDigitalCondition() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setDigitalCondition (unsigned int chnIdx,
M2K_TRIGGER_CONDITION_DIGITAL cond 
)
+
+pure virtual
+
+ +

Set the trigger condition for the digital trigger on a specific channel.

+
Parameters
+ + + +
chnIdxThe index of the required channel
condthe specific trigger condition
+
+
+ +
+
+ +

◆ setDigitalCondition() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setDigitalCondition (libm2k::digital::DIO_CHANNEL chnIdx,
M2K_TRIGGER_CONDITION_DIGITAL cond 
)
+
+pure virtual
+
+ +

Set the trigger condition for the digital trigger on a specific channel.

+
Parameters
+ + + +
chnIdxAn enumerator corresponding to the index of the required channel
condthe specific trigger condition
+
+
+ +
+
+ +

◆ setDigitalDelay()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setDigitalDelay (int delay)
+
+pure virtual
+
+ +

Set the digital trigger delay.

+
Parameters
+ + +
delaythe value of the digital delay
+
+
+
Note
the delay can have negative values The negative values are used to place the trigger inside the buffer The value of the delay represents the number of samples in buffer before the triggered sample If the value is 0, the triggered sample will be the first one in the buffer For a buffer of 1000 samples, in order to have the trigger at the middle, you need to set it to -500 The minimum negative value is -8192
+
+the delay can have positive values TBD
+ +
+
+ +

◆ setDigitalExternalCondition()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setDigitalExternalCondition (M2K_TRIGGER_CONDITION_DIGITAL cond)
+
+pure virtual
+
+ +

setDigitalExternalCondition

+
Parameters
+ + +
cond: M2K_TRIGGER_CONDITION_DIGITAL
+
+
+ +
+
+ +

◆ setDigitalMode()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setDigitalMode (libm2k::digital::DIO_TRIGGER_MODE mode)
+
+pure virtual
+
+ +

Set the mode for the digital trigger.

+
Parameters
+ + +
modethe digital trigger mode (DIO_OR/DIO_AND)
+
+
+ +
+
+ +

◆ setDigitalSource()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setDigitalSource (M2K_TRIGGER_SOURCE_DIGITAL external_src)
+
+virtual
+
+ +

Select which interface triggers the DigitalIn.

+
Parameters
+ + +
external_srcof type M2K_TRIGGER_SOURCE_DIGITAL:
+ SRC_TRIGGER_IN - trigger events on the TI(trigger in) pin trigger the DigitalIn interface;
+ SRC_ANALOG_IN - trigger events on the AnalogIn interface trigger the DigitalIn interface;
+ SRC_NONE - trigger events on the DigitalIn are conditioned by the internal digital trigger structure;
+
+
+
+
Note
Only available from firmware v0.24.
+ +
+
+ +

◆ setDigitalStreamingFlag()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::M2kHardwareTrigger::setDigitalStreamingFlag (bool enable)
+
+pure virtual
+
+ +

Set the streaming flag for the digital part.

+
Parameters
+ + +
enablethe streaming
+
+
+
Note
The digital condition needs to be set before setting the digital streaming flag to true, otherwise after setting the streaming flag to true, a trigger might occur on the old condition.
+ +
+
+
+ + + + diff --git a/group__powersupply.html b/group__powersupply.html new file mode 100644 index 00000000..e3bb07ef --- /dev/null +++ b/group__powersupply.html @@ -0,0 +1,327 @@ + + + + + + + +libm2k: PowerSupply + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
PowerSupply
+
+
+ +

Contains the representation of the power supply. +More...

+
+Collaboration diagram for PowerSupply:
+
+
+ + + + +
+
+ + + + + +

+Classes

class  libm2k::analog::M2kPowerSupply
 Controls the power supply. More...
 
+ + + + + + + + + + + + + + + + +

+Functions

virtual void libm2k::analog::M2kPowerSupply::enableChannel (unsigned int chn, bool en)=0
 Enable or disable the given channel. More...
 
virtual void libm2k::analog::M2kPowerSupply::enableAll (bool en)=0
 Enable or disable all channels. More...
 
virtual double libm2k::analog::M2kPowerSupply::readChannel (unsigned int chn, bool calibrated=true)=0
 Retrieve the value of a given channel. More...
 
virtual void libm2k::analog::M2kPowerSupply::pushChannel (unsigned int chn, double value, bool calibrated=true)=0
 Set the voltage for the given channel. More...
 
virtual bool libm2k::analog::M2kPowerSupply::anyChannelEnabled ()=0
 Check if there is at least one enabled channel. More...
 
+

Detailed Description

+

Contains the representation of the power supply.

+

Function Documentation

+ +

◆ anyChannelEnabled()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool libm2k::analog::M2kPowerSupply::anyChannelEnabled ()
+
+pure virtual
+
+ +

Check if there is at least one enabled channel.

+
Returns
On succes, true
+
+Otherwise, false
+ +
+
+ +

◆ enableAll()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void libm2k::analog::M2kPowerSupply::enableAll (bool en)
+
+pure virtual
+
+ +

Enable or disable all channels.

+
Parameters
+ + +
enA boolean value corresponding to the state of the channels
+
+
+ +
+
+ +

◆ enableChannel()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kPowerSupply::enableChannel (unsigned int chn,
bool en 
)
+
+pure virtual
+
+ +

Enable or disable the given channel.

+
Parameters
+ + + +
chnThe index corresponding to the channel
enA boolean value corresponding to the state of the channel
+
+
+ +
+
+ +

◆ pushChannel()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void libm2k::analog::M2kPowerSupply::pushChannel (unsigned int chn,
double value,
bool calibrated = true 
)
+
+pure virtual
+
+ +

Set the voltage for the given channel.

+
Parameters
+ + + + +
chnThe index corresponding to the channel
valueThe voltage (up to 5V)
calibratedWritten values are converted using the calibration coefficients from the IIO context by default; This boolean flag specifies whether the coefficients should be used.
+
+
+ +
+
+ +

◆ readChannel()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual double libm2k::analog::M2kPowerSupply::readChannel (unsigned int chn,
bool calibrated = true 
)
+
+pure virtual
+
+ +

Retrieve the value of a given channel.

+
Parameters
+ + + +
chnThe index corresponding to the channel
calibratedRead values are converted using the calibration coefficients from the IIO context by default; This boolean flag specifies whether the coefficients should be used.
+
+
+
Returns
double The voltage transmitted by the given channel
+ +
+
+
+ + + + diff --git a/group__powersupply.map b/group__powersupply.map new file mode 100644 index 00000000..21aec2a3 --- /dev/null +++ b/group__powersupply.map @@ -0,0 +1,4 @@ + + + + diff --git a/group__powersupply.md5 b/group__powersupply.md5 new file mode 100644 index 00000000..66d158ad --- /dev/null +++ b/group__powersupply.md5 @@ -0,0 +1 @@ +16c3c5bfa5ab6a84bdb9c16ffaff65bf \ No newline at end of file diff --git a/group__powersupply.png b/group__powersupply.png new file mode 100644 index 00000000..c10bee37 Binary files /dev/null and b/group__powersupply.png differ diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 00000000..b22ca293 --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,95 @@ + + + + + + + +libm2k: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
+

Go to the graphical class hierarchy

+This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12]
+ + + + + + + + + + + + + +
 Clibm2k::CALIBRATION_PARAMETERSCalibration parameters of m2k
 Clibm2k::context::ContextControls the IIO context
 Clibm2k::context::M2kControls the ADALM2000
 Clibm2k::CONTEXT_INFOAdditional information about the context
 Clibm2k::analog::DMMControls the digital multimeter
 Clibm2k::analog::DMM_READINGThe structure of a DMM
 Clibm2k::IIO_CONTEXT_VERSIONThe version of the backend
 Clibm2k::analog::M2kAnalogInControls the analogical input compound
 Clibm2k::analog::M2kAnalogOutControls the analogical output compound
 Clibm2k::digital::M2kDigitalControls the digital input and output segment
 Clibm2k::M2kHardwareTriggerControls the hardware trigger for ADALM2000
 Clibm2k::analog::M2kPowerSupplyControls the power supply
 Clibm2k::SETTINGSTriggering system
+
+
+ + + + diff --git a/img/libm2k-cpp_logo.png b/img/libm2k-cpp_logo.png new file mode 100644 index 00000000..0d737c3c Binary files /dev/null and b/img/libm2k-cpp_logo.png differ diff --git a/img/libm2k-cs_logo.png b/img/libm2k-cs_logo.png new file mode 100644 index 00000000..2cdbfe25 Binary files /dev/null and b/img/libm2k-cs_logo.png differ diff --git a/img/libm2k-labview_logo.png b/img/libm2k-labview_logo.png new file mode 100644 index 00000000..b794fbba Binary files /dev/null and b/img/libm2k-labview_logo.png differ diff --git a/img/libm2k-matlab_logo.png b/img/libm2k-matlab_logo.png new file mode 100644 index 00000000..ec3859fb Binary files /dev/null and b/img/libm2k-matlab_logo.png differ diff --git a/img/libm2k-python_logo.png b/img/libm2k-python_logo.png new file mode 100644 index 00000000..d7ceebf6 Binary files /dev/null and b/img/libm2k-python_logo.png differ diff --git a/img/libm2k.svg b/img/libm2k.svg new file mode 100644 index 00000000..152412a9 --- /dev/null +++ b/img/libm2k.svg @@ -0,0 +1,1777 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + INTERFACE LIBARY FOR THE ADALM2000 + + + + + + C++ + CODE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MATLAB® & SIMULINK® INTERFACE LIBARY FOR THE ADALM2000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NATIONAL INSTRUMENTS LABVIEW® INTERFACE LIBARY FOR THE ADALM2000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PYTHON INTERFACE LIBARY FOR THE ADALM2000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + C++ INTERFACE LIBARY FOR THE ADALM2000 + + + + + + C++ + CODE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + C# INTERFACE LIBARY FOR THE ADALM2000 + + + + + + C# + CODE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/libm2k_async_acq.png b/img/libm2k_async_acq.png new file mode 100644 index 00000000..d163022b Binary files /dev/null and b/img/libm2k_async_acq.png differ diff --git a/img/libm2k_class_diagram.png b/img/libm2k_class_diagram.png new file mode 100644 index 00000000..270eaea3 Binary files /dev/null and b/img/libm2k_class_diagram.png differ diff --git a/img/libm2k_logo.png b/img/libm2k_logo.png new file mode 100644 index 00000000..ae579f74 Binary files /dev/null and b/img/libm2k_logo.png differ diff --git a/img/libm2k_m2k_open.png b/img/libm2k_m2k_open.png new file mode 100644 index 00000000..9a1ecadd Binary files /dev/null and b/img/libm2k_m2k_open.png differ diff --git a/img/libm2k_sync_acq.png b/img/libm2k_sync_acq.png new file mode 100644 index 00000000..17863ce4 Binary files /dev/null and b/img/libm2k_sync_acq.png differ diff --git a/img/libm2k_top_level.png b/img/libm2k_top_level.png new file mode 100644 index 00000000..ccdfefdc Binary files /dev/null and b/img/libm2k_top_level.png differ diff --git a/img/libm2k_w.svg b/img/libm2k_w.svg new file mode 100644 index 00000000..c2eddba5 --- /dev/null +++ b/img/libm2k_w.svg @@ -0,0 +1,1936 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INTERFACE LIBARY FOR THE ADALM2000 + + + + + + C++ + CODE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MATLAB® & SIMULINK® INTERFACE LIBARY FOR THE ADALM2000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NATIONAL INSTRUMENTS LABVIEW® INTERFACE LIBARY FOR THE ADALM2000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PYTHON INTERFACE LIBARY FOR THE ADALM2000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + C++ INTERFACE LIBARY FOR THE ADALM2000 + + + + + + C++ + CODE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + C# INTERFACE LIBARY FOR THE ADALM2000 + + C# + CODE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/index.html b/index.html new file mode 100644 index 00000000..a9f1e472 --- /dev/null +++ b/index.html @@ -0,0 +1,146 @@ + + + + + + + +libm2k: Main Page + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
libm2k Documentation
+
+
+ +
libm2k_logo +

+License

+

libm2k is licensed under the GNU Lesser General Public License v2.1

+

+Architecture

+

libm2k is a C++ library for interfacing with the ADALM2000, splitted into more correlated components, interconnected by a context. These M2K components represent the functionalities of ADALM2000:

+
    +
  • AnalogIn - oscilloscope or voltmeter
    +
  • +
  • AnalogOut - signal generator
    +
  • +
  • Digital - logic analyzer or pattern generator
    +
  • +
  • PowerSupply - constant voltage generator
    +
  • +
  • DMM - digital multimeter
    +
  • +
+

+Class Diagram

+

The class diagram containing details for all public classes of libm2k.

+libm2k Class Diagram +

+Top Level Diagram

+

The top level diagram provides an overview for the library structure. The components are organized in their corresponding namespaces.

+libm2k Top Level Diagram +

+M2K Open Sequence Diagram

+

In this diagram the necessary steps to create an M2K context and get a specific device are presented. libm2k M2K Open Sequence Diagram +

+Asynchronous Acquisition Sequence Diagram

+

The sequence diagram shows an example to the asynchronous acquisition flow for Analog In or Digital In. Running "startAcquisition(number_of_samples)" will create, initialize and populate the available kernel buffers with data. Everytime we call "getSamples", we retrieve data from those kernel buffers, which will automatically be refilled. libm2k Asynchronous Acquisition Sequence Diagram +

+Synchronous Acquisition Sequence Diagram

+

The sequence diagram shows an example to the synchronous acquisition flow for Analog In or Digital In. Running "getSamples(number_of_samples)" will create and initialize, but it will also populate all the available kernel buffers with data and it will return one buffer to the user. libm2k Synchronous Acquisition Sequence Diagram +

+Python Bindings

+libm2k-python_logo +

In order to use libm2k in Python applications please check the libm2k Python Bindings API

+

+Example

+

The following code shows a simple example on how to use libm2k together with the digital side of ADALM2000.

+

There are multiple examples provided for libm2k and can be found on the Github libm2k examples page. The examples are created to ease the work for a libm2k user. To get familiar with libm2k API, the examples can be modified and built out of the libm2k source code tree by keeping the CMake configuration file provided for each example.

+
// This example will generate a binary counter on the first N_BITS of the
// digital interface and read them back - no additional connection required
#include <iostream>
#include <libm2k/m2k.hpp>
#include <libm2k/context.hpp>
#include <libm2k/contextbuilder.hpp>
#include <libm2k/digital/m2kdigital.hpp>
#include <bitset>
using namespace std;
using namespace libm2k;
using namespace libm2k::digital;
using namespace libm2k::context;
#define N_BITS (4)
int main()
{
Context *c = contextOpen();
if (!c) {
std::cout << "Connection Error: No ADALM2000 device available/connected to your PC." << std::endl;
return 1;
}
M2k* ctx = c->toM2k();
M2kDigital *dig = ctx->getDigital();
dig->setSampleRateIn(100000);
dig->setSampleRateOut(100000);
for(int i=0;i<N_BITS;i++)
{
dig->setDirection(i, DIO_OUTPUT);
dig->enableChannel(i, true);
}
vector<unsigned short> bufferOut;
vector<unsigned short> bufferIn;
for(int i=0;i< (1<<N_BITS); i++)
{
bufferOut.push_back(i);
}
dig->setCyclic(true);
dig->push(bufferOut);
bufferIn = dig->getSamples(1000);
for(auto val : bufferIn)
{
cout<<bitset<16>(val)<<endl;
}
dig->stopBufferOut();
return 0;
}

+FAQ

+

Useful questions and answers for the libm2k API usage and ADALM2000 manipulation

+

+How can I acquire raw data fast and convert it to the corresponding value in Volts (in Python)?

+

The Python bindings API are not a 100% mirror of the C++ code. Therefore, some methods might have a slightly different return type for Python (it is necessary to check the Python Bindings API Documentation listed above). For example, the getSamplesRawInterleaved() method will return 4*nb_samples elements in the Python list. In order to make the acquisition faster, all the samples are returned in a bytes list. One sample for one channel (for AnalogIn) is represented using 2 bytes. The returned list of bytes will be interleaved, this meaning that it should be interpreted as one sample from CHANNEL_1, one sample from CHANNEL_2 and so on. One thing to keep in mind is that a sample corresponds to 2 elements in the list.

+

Let's take an example:

+
samples = getSamplesRawInterleaved(10)
samples.tolist()
#will return:
[243, 255, 2, 0, 246, 255, 2, 0, 244, 255, 2, 0, 246, 255, 2, 0, 244, 255, 2, 0, 244, 255, 1, 0, 243, 255, 0, 0, 245, 255, 3, 0, 245, 255, 2, 0, 245, 255, 2, 0]
samples.tobytes()
#will return:
b'\xf3\xff\x02\x00\xf6\xff\x02\x00\xf4\xff\x02\x00\xf6\xff\x02\x00\xf4\xff\x02\x00\xf4\xff\x01\x00\xf3\xff\x00\x00\xf5\xff\x03\x00\xf5\xff\x02\x00\xf5\xff\x02\x00'
#[243, 255] corresponds to the first sample on CHANNEL_1
#[2, 0] corresponds to the first sample on CHANNEL_2

In order to convert all the samples you can use the following chunk of Python code:

+
import struct
#enable channels, acquire samples
samples = samples.tobytes()
count = int(len(samples)/2)
value_list = struct.unpack('h'*count, samples) #'h' is the format for short
#value_list will be similar to the following: (-13, 2, -10, 2, -12, 2, -10, 2, -12, 2, -12, 1, -13, 0, -11, 3, -11, 2, -11, 2)

Next thing is to convert it into Volts. In Python, for AnalogIn() you have 2 exposed methods: libm2k::analog::M2kAnalogIn::convertVoltsToRaw(unsigned int channel, double voltage) and libm2k::analog::M2kAnalogIn::convertRawToVolts(unsigned int channel, short raw). Running convertRawToVolts(0, value_list[0]) should provide the needed Volts value for CHANNEL_1.

+
+
+ + + + diff --git a/inherit_graph_0.map b/inherit_graph_0.map new file mode 100644 index 00000000..ced25296 --- /dev/null +++ b/inherit_graph_0.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_0.md5 b/inherit_graph_0.md5 new file mode 100644 index 00000000..5fbf6263 --- /dev/null +++ b/inherit_graph_0.md5 @@ -0,0 +1 @@ +92190bb54688e06933dea3a0347ad01b \ No newline at end of file diff --git a/inherit_graph_0.png b/inherit_graph_0.png new file mode 100644 index 00000000..3217b597 Binary files /dev/null and b/inherit_graph_0.png differ diff --git a/inherit_graph_1.map b/inherit_graph_1.map new file mode 100644 index 00000000..d66501cd --- /dev/null +++ b/inherit_graph_1.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_1.md5 b/inherit_graph_1.md5 new file mode 100644 index 00000000..0fcc896c --- /dev/null +++ b/inherit_graph_1.md5 @@ -0,0 +1 @@ +b67461a69de48c01c42c0e5598db4b29 \ No newline at end of file diff --git a/inherit_graph_1.png b/inherit_graph_1.png new file mode 100644 index 00000000..028bfd24 Binary files /dev/null and b/inherit_graph_1.png differ diff --git a/inherit_graph_10.map b/inherit_graph_10.map new file mode 100644 index 00000000..1683ffb7 --- /dev/null +++ b/inherit_graph_10.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_10.md5 b/inherit_graph_10.md5 new file mode 100644 index 00000000..b8233be6 --- /dev/null +++ b/inherit_graph_10.md5 @@ -0,0 +1 @@ +4ef3bfc1b2f2d716afc9975d20f60d80 \ No newline at end of file diff --git a/inherit_graph_10.png b/inherit_graph_10.png new file mode 100644 index 00000000..03353261 Binary files /dev/null and b/inherit_graph_10.png differ diff --git a/inherit_graph_11.map b/inherit_graph_11.map new file mode 100644 index 00000000..092a1bf0 --- /dev/null +++ b/inherit_graph_11.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_11.md5 b/inherit_graph_11.md5 new file mode 100644 index 00000000..7f8cb239 --- /dev/null +++ b/inherit_graph_11.md5 @@ -0,0 +1 @@ +15e059e1e5f7d0564a4f8fa0f08c3291 \ No newline at end of file diff --git a/inherit_graph_11.png b/inherit_graph_11.png new file mode 100644 index 00000000..0a29a3b0 Binary files /dev/null and b/inherit_graph_11.png differ diff --git a/inherit_graph_2.map b/inherit_graph_2.map new file mode 100644 index 00000000..b069cda7 --- /dev/null +++ b/inherit_graph_2.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_2.md5 b/inherit_graph_2.md5 new file mode 100644 index 00000000..cdc241c8 --- /dev/null +++ b/inherit_graph_2.md5 @@ -0,0 +1 @@ +43d4a6609de4aa4e79e225b7490a7b67 \ No newline at end of file diff --git a/inherit_graph_2.png b/inherit_graph_2.png new file mode 100644 index 00000000..ffa96b66 Binary files /dev/null and b/inherit_graph_2.png differ diff --git a/inherit_graph_3.map b/inherit_graph_3.map new file mode 100644 index 00000000..a169a380 --- /dev/null +++ b/inherit_graph_3.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_3.md5 b/inherit_graph_3.md5 new file mode 100644 index 00000000..d36d9701 --- /dev/null +++ b/inherit_graph_3.md5 @@ -0,0 +1 @@ +ad3ebd0dfb74213008681ccf8e76d10c \ No newline at end of file diff --git a/inherit_graph_3.png b/inherit_graph_3.png new file mode 100644 index 00000000..ed11cc3b Binary files /dev/null and b/inherit_graph_3.png differ diff --git a/inherit_graph_4.map b/inherit_graph_4.map new file mode 100644 index 00000000..e06fa522 --- /dev/null +++ b/inherit_graph_4.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_4.md5 b/inherit_graph_4.md5 new file mode 100644 index 00000000..09179e03 --- /dev/null +++ b/inherit_graph_4.md5 @@ -0,0 +1 @@ +37d639e4c6ca4382619871dff75159d5 \ No newline at end of file diff --git a/inherit_graph_4.png b/inherit_graph_4.png new file mode 100644 index 00000000..c9f4ec3a Binary files /dev/null and b/inherit_graph_4.png differ diff --git a/inherit_graph_5.map b/inherit_graph_5.map new file mode 100644 index 00000000..3d98d086 --- /dev/null +++ b/inherit_graph_5.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_5.md5 b/inherit_graph_5.md5 new file mode 100644 index 00000000..007d1aec --- /dev/null +++ b/inherit_graph_5.md5 @@ -0,0 +1 @@ +d64da55e33bc87e3288786f35aa217ea \ No newline at end of file diff --git a/inherit_graph_5.png b/inherit_graph_5.png new file mode 100644 index 00000000..a34edb77 Binary files /dev/null and b/inherit_graph_5.png differ diff --git a/inherit_graph_6.map b/inherit_graph_6.map new file mode 100644 index 00000000..26a43c98 --- /dev/null +++ b/inherit_graph_6.map @@ -0,0 +1,4 @@ + + + + diff --git a/inherit_graph_6.md5 b/inherit_graph_6.md5 new file mode 100644 index 00000000..6a19bb15 --- /dev/null +++ b/inherit_graph_6.md5 @@ -0,0 +1 @@ +2148257177dd6dd4a37b7fad7b415a65 \ No newline at end of file diff --git a/inherit_graph_6.png b/inherit_graph_6.png new file mode 100644 index 00000000..cbcc4258 Binary files /dev/null and b/inherit_graph_6.png differ diff --git a/inherit_graph_7.map b/inherit_graph_7.map new file mode 100644 index 00000000..a08ce55b --- /dev/null +++ b/inherit_graph_7.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_7.md5 b/inherit_graph_7.md5 new file mode 100644 index 00000000..2b717129 --- /dev/null +++ b/inherit_graph_7.md5 @@ -0,0 +1 @@ +46ba16212d14cc2c12adeba70b55d871 \ No newline at end of file diff --git a/inherit_graph_7.png b/inherit_graph_7.png new file mode 100644 index 00000000..6c126628 Binary files /dev/null and b/inherit_graph_7.png differ diff --git a/inherit_graph_8.map b/inherit_graph_8.map new file mode 100644 index 00000000..1a6b6d59 --- /dev/null +++ b/inherit_graph_8.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_8.md5 b/inherit_graph_8.md5 new file mode 100644 index 00000000..1589c911 --- /dev/null +++ b/inherit_graph_8.md5 @@ -0,0 +1 @@ +80e5635c05227a2b43c5c34abcfff7e1 \ No newline at end of file diff --git a/inherit_graph_8.png b/inherit_graph_8.png new file mode 100644 index 00000000..68c1bace Binary files /dev/null and b/inherit_graph_8.png differ diff --git a/inherit_graph_9.map b/inherit_graph_9.map new file mode 100644 index 00000000..1973497b --- /dev/null +++ b/inherit_graph_9.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_9.md5 b/inherit_graph_9.md5 new file mode 100644 index 00000000..a8d342db --- /dev/null +++ b/inherit_graph_9.md5 @@ -0,0 +1 @@ +2cd50595f891749c3e6e310ae2b9fd13 \ No newline at end of file diff --git a/inherit_graph_9.png b/inherit_graph_9.png new file mode 100644 index 00000000..1ca8ff1f Binary files /dev/null and b/inherit_graph_9.png differ diff --git a/inherits.html b/inherits.html new file mode 100644 index 00000000..c5d72e0d --- /dev/null +++ b/inherits.html @@ -0,0 +1,141 @@ + + + + + + + +libm2k: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+ + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 00000000..1ee895ca --- /dev/null +++ b/jquery.js @@ -0,0 +1,87 @@ +/*! + * jQuery JavaScript Library v1.7.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Wed Mar 21 12:46:34 2012 -0700 + */ +(function(bd,L){var av=bd.document,bu=bd.navigator,bm=bd.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bd.jQuery,bH=bd.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bd.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bd.attachEvent("onload",bF.ready);var b0=false;try{b0=bd.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0!=null&&b0==b0.window},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bd.JSON&&bd.JSON.parse){return bd.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){if(typeof b2!=="string"||!b2){return null}var b0,b1;try{if(bd.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bd.execScript||function(b1){bd["eval"].call(bd,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aK.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aK.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bH=bv.getElementsByTagName("*");bE=bv.getElementsByTagName("a")[0];if(!bH||!bH.length||!bE){return{}}bF=av.createElement("select");bx=bF.appendChild(av.createElement("option"));bD=bv.getElementsByTagName("input")[0];bI={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bE.getAttribute("style")),hrefNormalized:(bE.getAttribute("href")==="/a"),opacity:/^0.55/.test(bE.style.opacity),cssFloat:!!bE.style.cssFloat,checkOn:(bD.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true,pixelMargin:true};b.boxModel=bI.boxModel=(av.compatMode==="CSS1Compat");bD.checked=true;bI.noCloneChecked=bD.cloneNode(true).checked;bF.disabled=true;bI.optDisabled=!bx.disabled;try{delete bv.test}catch(bB){bI.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bI.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bD=av.createElement("input");bD.value="t";bD.setAttribute("type","radio");bI.radioValue=bD.value==="t";bD.setAttribute("checked","checked");bD.setAttribute("name","t");bv.appendChild(bD);bC=av.createDocumentFragment();bC.appendChild(bv.lastChild);bI.checkClone=bC.cloneNode(true).cloneNode(true).lastChild.checked;bI.appendChecked=bD.checked;bC.removeChild(bD);bC.appendChild(bv);if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bA="on"+by;bw=(bA in bv);if(!bw){bv.setAttribute(bA,"return;");bw=(typeof bv[bA]==="function")}bI[by+"Bubbles"]=bw}}bC.removeChild(bv);bC=bF=bx=bv=bD=null;b(function(){var bM,bV,bW,bU,bO,bP,bR,bL,bK,bQ,bN,e,bT,bS=av.getElementsByTagName("body")[0];if(!bS){return}bL=1;bT="padding:0;margin:0;border:";bN="position:absolute;top:0;left:0;width:1px;height:1px;";e=bT+"0;visibility:hidden;";bK="style='"+bN+bT+"5px solid #000;";bQ="
";bM=av.createElement("div");bM.style.cssText=e+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bS.insertBefore(bM,bS.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bI.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);if(bd.getComputedStyle){bv.innerHTML="";bR=av.createElement("div");bR.style.width="0";bR.style.marginRight="0";bv.style.width="2px";bv.appendChild(bR);bI.reliableMarginRight=(parseInt((bd.getComputedStyle(bR,null)||{marginRight:0}).marginRight,10)||0)===0}if(typeof bv.style.zoom!=="undefined"){bv.innerHTML="";bv.style.width=bv.style.padding="1px";bv.style.border=0;bv.style.overflow="hidden";bv.style.display="inline";bv.style.zoom=1;bI.inlineBlockNeedsLayout=(bv.offsetWidth===3);bv.style.display="block";bv.style.overflow="visible";bv.innerHTML="
";bI.shrinkWrapBlocks=(bv.offsetWidth!==3)}bv.style.cssText=bN+e;bv.innerHTML=bQ;bV=bv.firstChild;bW=bV.firstChild;bO=bV.nextSibling.firstChild.firstChild;bP={doesNotAddBorder:(bW.offsetTop!==5),doesAddBorderForTableAndCells:(bO.offsetTop===5)};bW.style.position="fixed";bW.style.top="20px";bP.fixedPosition=(bW.offsetTop===20||bW.offsetTop===15);bW.style.position=bW.style.top="";bV.style.overflow="hidden";bV.style.position="relative";bP.subtractsBorderForOverflowNotVisible=(bW.offsetTop===-5);bP.doesNotIncludeMarginInBodyOffset=(bS.offsetTop!==bL);if(bd.getComputedStyle){bv.style.marginTop="1%";bI.pixelMargin=(bd.getComputedStyle(bv,null)||{marginTop:0}).marginTop!=="1%"}if(typeof bM.style.zoom!=="undefined"){bM.style.zoom=1}bS.removeChild(bM);bR=bv=bM=null;b.extend(bI,bP)});return bI})();var aT=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA1,null,false)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a6(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?+by:aT.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bj(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bj(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bj(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){var bw=2;if(typeof e!=="string"){bv=e;e="fx";bw--}if(arguments.length1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,b.prop,e,bv,arguments.length>1)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(ag);for(bw=0,bv=this.length;bw-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.type]||b.valHooks[bw.nodeName.toLowerCase()];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aV,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aZ:bf)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(by,bA){var bz,bB,bw,e,bv,bx=0;if(bA&&by.nodeType===1){bB=bA.toLowerCase().split(ag);e=bB.length;for(;bx=0)}}})});var be=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/(?:^|\s)hover(\.\S+)?\b/,aP=/^key/,bg=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler;by=bv.selector}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bd,bI])}}for(bC=0;bCbC){bv.push({elem:this,matches:bD.slice(bC)})}for(bJ=0;bJ0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aP.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bg.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}bE.match.globalPOS=bD;var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(B(bx[0])||B(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function B(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||bb.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aH(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aS.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aS="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ah=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,v=/]","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bn=/\/(java|ecma)script/i,aO=/^\s*",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){return b.access(this,function(bv){return bv===L?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(bv))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(e){return b.access(this,function(by){var bx=this[0]||{},bw=0,bv=this.length;if(by===L){return bx.nodeType===1?bx.innerHTML.replace(ah,""):null}if(typeof by==="string"&&!ae.test(by)&&(b.support.leadingWhitespace||!ar.test(by))&&!ax[(d.exec(by)||["",""])[1].toLowerCase()]){by=by.replace(R,"<$1>");try{for(;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bh(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function D(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function am(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||b.isXMLDoc(by)||!ai.test("<"+by.nodeName+">")?by.cloneNode(true):am(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){aj(by,bz);e=bh(by);bv=bh(bz);for(bx=0;e[bx];++bx){if(bv[bx]){aj(e[bx],bv[bx])}}}if(bA){s(by,bz);if(bw){e=bh(by);bv=bh(bz);for(bx=0;e[bx];++bx){s(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bI,bw,bv,bx){var bA,bH,bD,bJ=[];bw=bw||av;if(typeof bw.createElement==="undefined"){bw=bw.ownerDocument||bw[0]&&bw[0].ownerDocument||av}for(var bE=0,bG;(bG=bI[bE])!=null;bE++){if(typeof bG==="number"){bG+=""}if(!bG){continue}if(typeof bG==="string"){if(!W.test(bG)){bG=bw.createTextNode(bG)}else{bG=bG.replace(R,"<$1>");var bN=(d.exec(bG)||["",""])[1].toLowerCase(),bz=ax[bN]||ax._default,bK=bz[0],bB=bw.createElement("div"),bL=ac.childNodes,bM;if(bw===av){ac.appendChild(bB)}else{a(bw).appendChild(bB)}bB.innerHTML=bz[1]+bG+bz[2];while(bK--){bB=bB.lastChild}if(!b.support.tbody){var by=v.test(bG),e=bN==="table"&&!by?bB.firstChild&&bB.firstChild.childNodes:bz[1]===""&&!by?bB.childNodes:[];for(bD=e.length-1;bD>=0;--bD){if(b.nodeName(e[bD],"tbody")&&!e[bD].childNodes.length){e[bD].parentNode.removeChild(e[bD])}}}if(!b.support.leadingWhitespace&&ar.test(bG)){bB.insertBefore(bw.createTextNode(ar.exec(bG)[0]),bB.firstChild)}bG=bB.childNodes;if(bB){bB.parentNode.removeChild(bB);if(bL.length>0){bM=bL[bL.length-1];if(bM&&bM.parentNode){bM.parentNode.removeChild(bM)}}}}}var bF;if(!b.support.appendChecked){if(bG[0]&&typeof(bF=bG.length)==="number"){for(bD=0;bD1)};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(by,bx,bz){var e={},bw,bv;for(bv in bx){e[bv]=by.style[bv];by.style[bv]=bx[bv]}bw=bz.call(by);for(bv in bx){by.style[bv]=e[bv]}return bw}});b.curCSS=b.css;if(av.defaultView&&av.defaultView.getComputedStyle){aJ=function(bA,bw){var bv,bz,e,by,bx=bA.style;bw=bw.replace(y,"-$1").toLowerCase();if((bz=bA.ownerDocument.defaultView)&&(e=bz.getComputedStyle(bA,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(bA.ownerDocument.documentElement,bA)){bv=b.style(bA,bw)}}if(!b.support.pixelMargin&&e&&aE.test(bw)&&a1.test(bv)){by=bx.width;bx.width=bv;bv=e.width;bx.width=by}return bv}}if(av.documentElement.currentStyle){aY=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv==null&&bx&&(by=bx[bw])){bv=by}if(a1.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":bv;bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aJ||aY;function af(by,bw,bv){var bz=bw==="width"?by.offsetWidth:by.offsetHeight,bx=bw==="width"?1:0,e=4;if(bz>0){if(bv!=="border"){for(;bx=1&&b.trim(bw.replace(al,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=al.test(bw)?bw.replace(al,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bv,e){return b.swap(bv,{display:"inline-block"},function(){if(e){return Z(bv,"margin-right")}else{return bv.style.marginRight}})}}}});if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}b.each({margin:"",padding:"",border:"Width"},function(e,bv){b.cssHooks[e+bv]={expand:function(by){var bx,bz=typeof by==="string"?by.split(" "):[by],bw={};for(bx=0;bx<4;bx++){bw[e+G[bx]+bv]=bz[bx]||bz[bx-2]||bz[0]}return bw}}});var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,a0=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aN=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aR=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a7=/)<[^<]*)*<\/script>/gi,p=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,z=b.fn.load,aa={},q={},aF,r,aW=["*/"]+["*"];try{aF=bm.href}catch(aw){aF=av.createElement("a");aF.href="";aF=aF.href}r=K.exec(aF.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a7,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||p.test(this.nodeName)||a0.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){an(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}an(bv,e);return bv},ajaxSettings:{url:aF,isLocal:aN.test(r[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bd.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(q),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bk(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=F(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,r[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=r[1]||bI[2]!=r[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(r[3]||(r[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aX(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aR.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aW+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aX(q,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){u(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function u(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{u(bw+"["+(typeof bz==="object"?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&b.type(by)==="object"){for(var e in by){u(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bk(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function F(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!ba){ba=av.createElement("iframe");ba.frameBorder=ba.width=ba.height=0}e.appendChild(ba);if(!m||!ba.createElement){m=(ba.contentWindow||ba.contentDocument).document;m.write((b.support.boxModel?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(ba)}Q[bx]=bw}return Q[bx]}var a8,V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){a8=function(by,bH,bw,bB){try{bB=by.getBoundingClientRect()}catch(bF){}if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aL(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{a8=function(bz,bE,bx){var bC,bw=bz.offsetParent,bv=bz,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.fn.offset=function(e){if(arguments.length){return e===L?this:this.each(function(bx){b.offset.setOffset(this,e,bx)})}var bv=this[0],bw=bv&&bv.ownerDocument;if(!bw){return null}if(bv===bw.body){return b.offset.bodyOffset(bv)}return a8(bv,bw,bw.documentElement)};b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(bw,bv){var e=/Y/.test(bv);b.fn[bw]=function(bx){return b.access(this,function(by,bB,bA){var bz=aL(by);if(bA===L){return bz?(bv in bz)?bz[bv]:b.support.boxModel&&bz.document.documentElement[bB]||bz.document.body[bB]:by[bB]}if(bz){bz.scrollTo(!e?bA:b(bz).scrollLeft(),e?bA:b(bz).scrollTop())}else{by[bB]=bA}},bw,bx,arguments.length,null)}});function aL(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each({Height:"height",Width:"width"},function(bw,bx){var bv="client"+bw,e="scroll"+bw,by="offset"+bw;b.fn["inner"+bw]=function(){var bz=this[0];return bz?bz.style?parseFloat(b.css(bz,bx,"padding")):this[bx]():null};b.fn["outer"+bw]=function(bA){var bz=this[0];return bz?bz.style?parseFloat(b.css(bz,bx,bA?"margin":"border")):this[bx]():null};b.fn[bx]=function(bz){return b.access(this,function(bC,bB,bD){var bF,bE,bG,bA;if(b.isWindow(bC)){bF=bC.document;bE=bF.documentElement[bv];return b.support.boxModel&&bE||bF.body&&bF.body[bv]||bE}if(bC.nodeType===9){bF=bC.documentElement;if(bF[bv]>=bF[e]){return bF[bv]}return Math.max(bC.body[e],bF[e],bC.body[by],bF[by])}if(bD===L){bG=b.css(bC,bB);bA=parseFloat(bG);return b.isNumeric(bA)?bA:bG}b(bC).css(bB,bD)},bx,bz,arguments.length,null)}});bd.jQuery=bd.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + + + +
+
+
m2k.hpp
+
+
+
1 /*
2  * Copyright (c) 2019 Analog Devices Inc.
3  *
4  * This file is part of libm2k
5  * (see http://www.github.com/analogdevicesinc/libm2k).
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as published by
9  * the Free Software Foundation, either version 2.1 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef M2K_H
23 #define M2K_H
24 
25 #include <libm2k/m2kglobal.hpp>
26 #include <libm2k/context.hpp>
27 #include <libm2k/enums.hpp>
28 #include <iostream>
29 #include <vector>
30 #include <map>
31 
32 namespace libm2k {
33 namespace analog {
34 class M2kAnalogIn;
35 class M2kAnalogOut;
36 class M2kPowerSupply;
37 }
38 
39 namespace digital {
40 class M2kDigital;
41 }
42 
43 class M2kCalibration;
44 
45 namespace context {
46 
54 class LIBM2K_API M2k : public virtual Context
55 {
56 public:
60  virtual ~M2k() {}
61 
62 
73  virtual void reset() = 0;
74 
75 
79  virtual void deinitialize() = 0;
80 
84  virtual bool calibrate() = 0;
85 
86 
93  virtual bool calibrateADC() = 0;
94 
95 
102  virtual bool calibrateDAC() = 0;
103 
104 
108  virtual bool resetCalibration() = 0;
109 
110 
117  virtual double calibrateFromContext() = 0;
118 
119 
126  virtual libm2k::digital::M2kDigital* getDigital() = 0;
127 
128 
135  virtual libm2k::analog::M2kPowerSupply* getPowerSupply() = 0;
136 
137 
144  virtual libm2k::analog::M2kAnalogIn* getAnalogIn() = 0;
145 
146 
154  virtual libm2k::analog::M2kAnalogIn* getAnalogIn(std::string dev_name) = 0;
155 
156 
163  virtual libm2k::analog::M2kAnalogOut* getAnalogOut() = 0;
164 
165 
169  virtual std::vector<libm2k::analog::M2kAnalogIn*> getAllAnalogIn() = 0;
170 
171 
175  virtual std::vector<libm2k::analog::M2kAnalogOut*> getAllAnalogOut() = 0;
176 
177 
182  virtual bool hasMixedSignal() = 0;
183 
184 
191  virtual void startMixedSignalAcquisition(unsigned int nb_samples) = 0;
192 
193 
199  virtual void stopMixedSignalAcquisition() = 0;
200 
201 
208  virtual int getDacCalibrationOffset(unsigned int chn) = 0;
209 
210 
217  virtual double getDacCalibrationGain(unsigned int chn) = 0;
218 
219 
226  virtual int getAdcCalibrationOffset(unsigned int chn) = 0;
227 
228 
235  virtual double getAdcCalibrationGain(unsigned int chn) = 0;
236 
237 
245  virtual void setDacCalibrationOffset(unsigned int chn, int offset) = 0;
246 
247 
256  virtual void setDacCalibrationGain(unsigned int chn, double gain) = 0;
257 
258 
266  virtual void setAdcCalibrationOffset(unsigned int chn, int offset) = 0;
267 
268 
277  virtual void setAdcCalibrationGain(unsigned int chn, double gain) = 0;
278 
279 
284  virtual bool hasContextCalibration() = 0;
285 
286 
291  virtual std::map<double, std::shared_ptr<struct CALIBRATION_PARAMETERS>> &getLUT() = 0;
292 
293 
298  virtual bool isCalibrated() = 0;
299 
300 
308  virtual void setLed(bool on) = 0;
309 
310 
317  virtual bool getLed() = 0;
318 };
319 }
320 }
321 #endif // M2K_H
Controls the power supply.
Definition: m2kpowersupply.hpp:42
+
Controls the analogical output compound.
Definition: m2kanalogout.hpp:52
+
Controls the ADALM2000.
Definition: m2k.hpp:54
+
Controls the analogical input compound.
Definition: m2kanalogin.hpp:46
+
Controls the IIO context.
Definition: context.hpp:52
+
Controls the digital input and output segment.
Definition: m2kdigital.hpp:44
+
Generic M2K enumerations.
+
+ + + + diff --git a/m2kanalogin_8hpp_source.html b/m2kanalogin_8hpp_source.html new file mode 100644 index 00000000..3ad35ceb --- /dev/null +++ b/m2kanalogin_8hpp_source.html @@ -0,0 +1,85 @@ + + + + + + + +libm2k: m2kanalogin.hpp Source File + + + + + + + + + +
+
+
+ + + + + +
+
libm2k +
+
+ + + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
m2kanalogin.hpp
+
+
+
1 /*
2  * Copyright (c) 2019 Analog Devices Inc.
3  *
4  * This file is part of libm2k
5  * (see http://www.github.com/analogdevicesinc/libm2k).
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as published by
9  * the Free Software Foundation, either version 2.1 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef M2KANALOGIN_HPP
23 #define M2KANALOGIN_HPP
24 
25 #include <libm2k/m2kglobal.hpp>
26 #include <libm2k/analog/enums.hpp>
27 #include <libm2k/m2khardwaretrigger.hpp>
28 #include <vector>
29 #include <map>
30 #include <memory>
31 
32 namespace libm2k {
38 namespace analog {
46 class LIBM2K_API M2kAnalogIn
47 {
48 public:
52  virtual ~M2kAnalogIn() {}
53 
57  virtual void reset() = 0;
58 
63  virtual void startAcquisition(unsigned int nb_samples) = 0;
64 
65 
69  virtual void stopAcquisition() = 0;
70 
71 
82  virtual std::vector<std::vector<double>> getSamples(unsigned int nb_samples) = 0;
83 
84 
95  virtual std::vector<std::vector<double>> getSamplesRaw(unsigned int nb_samples) = 0;
96 
97 
110  virtual const double* getSamplesInterleaved(unsigned int nb_samples_per_channel) = 0;
111 
112 
125  virtual const short* getSamplesRawInterleaved(unsigned int nb_samples_per_channel) = 0;
126 
127 
142  virtual const double* getSamplesInterleaved_matlab(unsigned int nb_samples) = 0;
143 
144 
159  virtual const short* getSamplesRawInterleaved_matlab(unsigned int nb_samples) = 0;
160 
161 
168  virtual short getVoltageRaw(unsigned int ch) = 0;
169 
170 
177  virtual double getVoltage(unsigned int ch) = 0;
178 
179 
186  virtual short getVoltageRaw(libm2k::analog::ANALOG_IN_CHANNEL ch) = 0;
187 
188 
195  virtual double getVoltage(libm2k::analog::ANALOG_IN_CHANNEL ch) = 0;
196 
197 
205  virtual std::vector<short> getVoltageRaw() = 0;
206 
207 
215  virtual std::vector<double> getVoltage() = 0;
216 
217 
223  virtual const short *getVoltageRawP() = 0;
224 
225 
231  virtual const double *getVoltageP() = 0;
232 
238  virtual void setVerticalOffset(ANALOG_IN_CHANNEL channel, double vertOffset) = 0;
239 
245  virtual double getVerticalOffset(ANALOG_IN_CHANNEL channel) = 0;
246 
247 
254  virtual double getScalingFactor(libm2k::analog::ANALOG_IN_CHANNEL ch) = 0;
255 
256 
263  virtual void setRange(ANALOG_IN_CHANNEL channel, M2K_RANGE range) = 0;
264 
265 
273  virtual void setRange(ANALOG_IN_CHANNEL channel, double min, double max) = 0;
274 
275 
282  virtual libm2k::analog::M2K_RANGE getRange(libm2k::analog::ANALOG_IN_CHANNEL channel) = 0;
283 
284 
291  virtual std::pair<double, double> getRangeLimits(libm2k::analog::M2K_RANGE range) = 0;
292 
293 
299  virtual std::vector<std::pair<std::string, std::pair<double, double>>> getAvailableRanges() = 0;
300 
301 
307  virtual int getOversamplingRatio() = 0;
308 
309 
316  virtual int getOversamplingRatio(unsigned int chn_idx) = 0;
317 
318 
325  virtual int setOversamplingRatio(int oversampling) = 0;
326 
327 
335  virtual int setOversamplingRatio(unsigned int chn_idx, int oversampling) = 0;
336 
337 
343  virtual double getSampleRate() = 0;
344 
345 
350  virtual std::vector<double> getAvailableSampleRates() = 0;
351 
358  virtual double setSampleRate(double samplerate) = 0;
359 
360 
367  virtual std::pair<double, double> getHysteresisRange(ANALOG_IN_CHANNEL chn) = 0;
368 
369 
376  virtual double getFilterCompensation(double samplerate) = 0;
377 
378 
385  virtual double getValueForRange(M2K_RANGE range) = 0;
386 
387 
394  virtual double convertRawToVolts(unsigned int channel, short raw) = 0;
395 
396 
404  virtual short convertVoltsToRaw(unsigned int channel, double voltage) = 0;
405 
406 
412  virtual unsigned int getNbChannels() = 0;
413 
414 
420  virtual std::string getName() = 0;
421 
422 
429  virtual void enableChannel(unsigned int chnIdx, bool enable) = 0;
430 
431 
439  virtual bool isChannelEnabled(unsigned int chnIdx) = 0;
440 
441 
446  virtual void cancelAcquisition() = 0;
447 
448 
453  virtual void setKernelBuffersCount(unsigned int count) = 0;
454 
459  virtual unsigned int getKernelBuffersCount() const = 0;
460 
461 
467  virtual libm2k::M2kHardwareTrigger* getTrigger() = 0;
468 
474  virtual struct IIO_OBJECTS getIioObjects() = 0;
475 
476 
488  virtual void getSamples(std::vector<std::vector<double>> &data, unsigned int nb_samples) = 0;
489 
495  virtual std::string getChannelName(unsigned int channel) = 0;
496 
501  virtual double getMaximumSamplerate() = 0;
502 
503 };
504 }
505 }
506 
507 #endif //M2KANALOGIN_HPP
Controls the analogical input compound.
Definition: m2kanalogin.hpp:46
+
Analogical enumerations.
+
Controls the hardware trigger for ADALM2000.
Definition: m2khardwaretrigger.hpp:41
+
ANALOG_IN_CHANNEL
Indexes of the channels.
Definition: analog/enums.hpp:59
+
M2K_RANGE
Range of the signal's amplitude.
Definition: analog/enums.hpp:70
+
+ + + + diff --git a/m2kanalogout_8hpp_source.html b/m2kanalogout_8hpp_source.html new file mode 100644 index 00000000..c5dbf465 --- /dev/null +++ b/m2kanalogout_8hpp_source.html @@ -0,0 +1,83 @@ + + + + + + + +libm2k: m2kanalogout.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
m2kanalogout.hpp
+
+
+
1 /*
2  * Copyright (c) 2019 Analog Devices Inc.
3  *
4  * This file is part of libm2k
5  * (see http://www.github.com/analogdevicesinc/libm2k).
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as published by
9  * the Free Software Foundation, either version 2.1 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef M2KANALOGOUT_HPP
23 #define M2KANALOGOUT_HPP
24 
25 #include <libm2k/m2kglobal.hpp>
26 #include <libm2k/enums.hpp>
27 #include <libm2k/m2khardwaretrigger.hpp>
28 #include <vector>
29 #include <memory>
30 #include <map>
31 
32 extern "C" {
33  struct iio_context;
34 }
35 
36 namespace libm2k {
37 
42 namespace analog {
43 
44 
52 class LIBM2K_API M2kAnalogOut
53 {
54 public:
58  virtual ~M2kAnalogOut() {}
59 
60 
64  virtual void reset() = 0;
65 
66 
67 
72  virtual std::vector<int> getOversamplingRatio() = 0;
73 
74 
81  virtual int getOversamplingRatio(unsigned int chn) = 0;
82 
89  virtual std::vector<int> setOversamplingRatio(std::vector<int> oversampling_ratio) = 0;
90 
91 
98  virtual int setOversamplingRatio(unsigned int chn, int oversampling_ratio) = 0;
99 
104  virtual std::vector<double> getSampleRate() = 0;
105 
106 
113  virtual double getSampleRate(unsigned int chn) = 0;
114 
115 
121  virtual std::vector<double> getAvailableSampleRates(unsigned int chn) = 0;
122 
123 
130  virtual std::vector<double> setSampleRate(std::vector<double> samplerates) = 0;
131 
132 
140  virtual double setSampleRate(unsigned int chn, double samplerate) = 0;
141 
142 
146  virtual void setSyncedDma(bool en, int chn = -1) = 0;
147 
151  virtual bool getSyncedDma(int chn = -1) = 0;
152 
156  virtual void setSyncedStartDma(bool en, int chn = -1) = 0;
157 
161  virtual bool getSyncedStartDma(int chn = -1) = 0;
162 
170  virtual void setCyclic(bool en) = 0;
171 
172 
181  virtual void setCyclic(unsigned int chn, bool en) = 0;
182 
183 
190  virtual bool getCyclic(unsigned int chn) = 0;
191 
192 
201  virtual double getScalingFactor(unsigned int chn) = 0;
202 
203 
210  virtual double getFilterCompensation(double samplerate) = 0;
211 
212 
227  virtual void pushBytes(unsigned int chnIdx, double *data, unsigned int nb_samples) = 0;
228 
229 
244  virtual void pushRawBytes(unsigned int chnIdx, short *data, unsigned int nb_samples) = 0;
245 
246 
260  virtual void pushInterleaved(double *data, unsigned int nb_channels, unsigned int nb_samples) = 0;
261 
262 
276  virtual void pushRawInterleaved(short *data, unsigned int nb_channels, unsigned int nb_samples) = 0;
277 
278 
292  virtual void push(unsigned int chnIdx, std::vector<double> const &data) = 0;
293 
294 
308  virtual void pushRaw(unsigned int chnIdx, std::vector<short> const &data) = 0;
309 
310 
323  virtual void push(std::vector<std::vector<double>> const &data) = 0;
324 
325 
338  virtual void pushRaw(std::vector<std::vector<short>> const &data) = 0;
339 
340 
347  virtual void stop() = 0;
348 
349 
358  virtual void stop(unsigned int chn) = 0;
359 
360 
365  virtual void cancelBuffer() = 0;
366 
367 
373  virtual void cancelBuffer(unsigned int chn) = 0;
374 
383  virtual void enableChannel(unsigned int chnIdx, bool enable) = 0;
384 
385 
394  virtual bool isChannelEnabled(unsigned int chnIdx) = 0;
395 
396 
409  virtual bool isPushDone(unsigned int chnIdx) const = 0;
410 
411 
417  virtual void setKernelBuffersCount(unsigned int chnIdx, unsigned int count) = 0;
418 
424  virtual unsigned int getKernelBuffersCount(unsigned int chnIdx) const = 0;
425 
426 
433  virtual short convertVoltsToRaw(unsigned int channel, double voltage) = 0;
434 
435 
442  virtual double convertRawToVolts(unsigned int channel, short raw) = 0;
443 
444 
450  virtual struct IIO_OBJECTS getIioObjects() = 0;
451 
452 
457  virtual unsigned int getNbChannels() = 0;
458 
459 
465  virtual std::string getChannelName(unsigned int channel) = 0;
466 
472  virtual double getMaximumSamplerate(unsigned int chn_idx) = 0;
473 
474 
484  virtual unsigned short setVoltage(unsigned int chn_idx, double volts) = 0;
485 
495  virtual unsigned short setVoltageRaw(unsigned int chn_idx, unsigned short raw) = 0;
496 
497 
503  virtual libm2k::M2kHardwareTrigger* getTrigger() = 0;
504 
505 
519  virtual void setBufferRearmOnTrigger(bool enable) = 0;
520 
521 
529  virtual bool getBufferRearmOnTrigger() const = 0;
530 };
531 }
532 }
533 
534 
535 #endif //M2KANALOGOUT_HPP
Controls the analogical output compound.
Definition: m2kanalogout.hpp:52
+
Controls the hardware trigger for ADALM2000.
Definition: m2khardwaretrigger.hpp:41
+
Generic M2K enumerations.
+
+ + + + diff --git a/m2kdigital_8hpp_source.html b/m2kdigital_8hpp_source.html new file mode 100644 index 00000000..9da22de8 --- /dev/null +++ b/m2kdigital_8hpp_source.html @@ -0,0 +1,88 @@ + + + + + + + +libm2k: m2kdigital.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
m2kdigital.hpp
+
+
+
1 /*
2  * Copyright (c) 2019 Analog Devices Inc.
3  *
4  * This file is part of libm2k
5  * (see http://www.github.com/analogdevicesinc/libm2k).
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as published by
9  * the Free Software Foundation, either version 2.1 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef M2KDIGITAL_HPP
23 #define M2KDIGITAL_HPP
24 
25 #include <libm2k/m2kglobal.hpp>
26 #include <libm2k/digital/enums.hpp>
27 #include <libm2k/analog/enums.hpp>
28 #include <libm2k/m2khardwaretrigger.hpp>
29 #include <string>
30 #include <vector>
31 
32 namespace libm2k {
33 
34 namespace digital {
35 
36 
44 class LIBM2K_API M2kDigital
45 {
46 public:
47  virtual ~M2kDigital() {}
48 
49 
53  virtual void reset() = 0;
54 
55 
61  virtual void setDirection(unsigned short mask) = 0;
62 
63 
69  virtual void setDirection(unsigned int index, DIO_DIRECTION dir) = 0;
70 
71 
78  virtual void setDirection(unsigned int index, bool dir) = 0;
79 
80 
87  virtual void setDirection(DIO_CHANNEL index, bool dir) = 0;
88 
89 
95  virtual void setDirection(DIO_CHANNEL index, DIO_DIRECTION dir) = 0;
96 
97 
104  virtual DIO_DIRECTION getDirection(DIO_CHANNEL index) = 0;
105 
106 
114  virtual void setValueRaw(DIO_CHANNEL index, DIO_LEVEL level) = 0;
115 
116 
124  virtual void push(std::vector<unsigned short> const &data) = 0;
125 
126 
135  virtual void push(unsigned short *data, unsigned int nb_samples) = 0;
136 
137 
145  virtual void setValueRaw(unsigned int index, DIO_LEVEL level) = 0;
146 
147 
155  virtual void setValueRaw(DIO_CHANNEL index, bool level) = 0;
156 
157 
164  virtual DIO_LEVEL getValueRaw(DIO_CHANNEL index) = 0;
165 
166 
173  virtual DIO_LEVEL getValueRaw(unsigned int index) = 0;
174 
175 
179  virtual void stopBufferOut() = 0;
180 
185  virtual void startAcquisition(unsigned int nb_samples) = 0;
186 
187 
191  virtual void stopAcquisition() = 0;
192 
193 
198  virtual void cancelAcquisition() = 0;
199 
204  virtual void cancelBufferOut() = 0;
205 
206 
215  virtual std::vector<unsigned short> getSamples(unsigned int nb_samples) = 0;
216 
224  virtual const unsigned short *getSamplesP(unsigned int nb_samples) = 0;
225 
226  /* Enable/disable TX channels only*/
227 
228 
237  virtual void enableChannel(unsigned int index, bool enable) = 0;
238 
239 
248  virtual void enableChannel(DIO_CHANNEL index, bool enable) = 0;
249 
250 
258  virtual void enableAllOut(bool enable) = 0;
259 
260 
268  virtual bool anyChannelEnabled(DIO_DIRECTION dir) = 0;
269 
270 
277  virtual void setOutputMode(DIO_CHANNEL chn, DIO_MODE mode) = 0;
278 
279 
286  virtual void setOutputMode(unsigned int chn, DIO_MODE mode) = 0;
287 
288 
295  virtual DIO_MODE getOutputMode(DIO_CHANNEL chn) = 0;
296 
297 
304  virtual DIO_MODE getOutputMode(unsigned int chn) = 0;
305 
306 
313  virtual double setSampleRateIn(double samplerate) = 0;
314 
315 
322  virtual double setSampleRateOut(double samplerate) = 0;
323 
324 
329  virtual double getSampleRateIn() = 0;
330 
331 
337  virtual double getSampleRateOut() = 0;
338 
339 
345  virtual bool getCyclic() = 0;
346 
347 
353  virtual void setCyclic(bool cyclic) = 0;
354 
355 
360  virtual libm2k::M2kHardwareTrigger* getTrigger() = 0;
361 
362 
367  virtual void setKernelBuffersCountIn(unsigned int count) = 0;
368 
369 
374  virtual void setKernelBuffersCountOut(unsigned int count) = 0;
375 
376 
382  virtual struct IIO_OBJECTS getIioObjects() = 0;
383 
384 
390  virtual unsigned int getNbChannelsIn() = 0;
391 
392 
398  virtual unsigned int getNbChannelsOut() = 0;
399 
400 
408  virtual void getSamples(std::vector<unsigned short> &data, unsigned int nb_samples) = 0;
409 
410 
416  virtual void setRateMux() = 0;
417 
418 
424  virtual void resetRateMux() = 0;
425 
433  virtual void setExternalClocksource(bool external) = 0;
434 
442  virtual bool isClocksourceExternal() = 0;
443 };
444 }
445 }
446 #endif //M2KDIGITAL_HPP
DIO_LEVEL
Logic voltage levels.
Definition: digital/enums.hpp:56
+
DIO_CHANNEL
Indexes of the channels.
Definition: digital/enums.hpp:69
+
Digital enumerations.
+
Analogical enumerations.
+
Controls the hardware trigger for ADALM2000.
Definition: m2khardwaretrigger.hpp:41
+
DIO_MODE
Output mode for a digital channel.
Definition: digital/enums.hpp:94
+
Controls the digital input and output segment.
Definition: m2kdigital.hpp:44
+
DIO_DIRECTION
Direction of a digital channel.
Definition: digital/enums.hpp:43
+
+ + + + diff --git a/m2khardwaretrigger_8hpp_source.html b/m2khardwaretrigger_8hpp_source.html new file mode 100644 index 00000000..2e558fc1 --- /dev/null +++ b/m2khardwaretrigger_8hpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +libm2k: m2khardwaretrigger.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
m2khardwaretrigger.hpp
+
+
+
1 /*
2  * Copyright (c) 2019 Analog Devices Inc.
3  *
4  * This file is part of libm2k
5  * (see http://www.github.com/analogdevicesinc/libm2k).
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as published by
9  * the Free Software Foundation, either version 2.1 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef M2KHARDWARETRIGGER_HPP
23 #define M2KHARDWARETRIGGER_HPP
24 
25 #include <libm2k/enums.hpp>
26 #include <libm2k/digital/enums.hpp>
27 #include <libm2k/m2kglobal.hpp>
28 #include <libm2k/m2k.hpp>
29 #include <vector>
30 #include <memory>
31 
32 namespace libm2k {
33 
41 class LIBM2K_API M2kHardwareTrigger
42 {
43 public:
47  virtual ~M2kHardwareTrigger() {}
48 
49 
53  virtual void reset() = 0;
54 
60  virtual int getAnalogLevelRaw(unsigned int chnIdx) = 0;
61 
62 
68  virtual void setAnalogLevelRaw(unsigned int chnIdx, int level) = 0;
69 
70 
76  virtual void setAnalogLevel(unsigned int chnIdx, double v_level) = 0;
77 
78 
84  virtual double getAnalogLevel(unsigned int chnIdx) = 0;
85 
86 
92  virtual double getAnalogHysteresis(unsigned int chnIdx) = 0;
93 
94 
100  virtual void setAnalogHysteresis(unsigned int chnIdx, double hysteresis) = 0;
101 
102 
108  virtual M2K_TRIGGER_CONDITION_ANALOG getAnalogCondition(unsigned int chnIdx) = 0;
109 
110 
116  virtual void setAnalogCondition(unsigned int chnIdx, M2K_TRIGGER_CONDITION_ANALOG cond) = 0;
117 
118 
124  virtual M2K_TRIGGER_CONDITION_DIGITAL getDigitalCondition(unsigned int chnIdx) = 0;
125 
126 
132  virtual M2K_TRIGGER_CONDITION_DIGITAL getDigitalCondition(libm2k::digital::DIO_CHANNEL chnIdx) = 0;
133 
134 
140  virtual void setDigitalCondition(unsigned int chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond) = 0;
141 
142 
148  virtual void setDigitalCondition(libm2k::digital::DIO_CHANNEL chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond) = 0;
149 
150 
151 
157  virtual M2K_TRIGGER_MODE getAnalogMode(unsigned int chnIdx) = 0;
158 
159 
165  virtual void setAnalogMode(unsigned int chnIdx, M2K_TRIGGER_MODE mode) = 0;
166 
167 
172  virtual libm2k::digital::DIO_TRIGGER_MODE getDigitalMode() = 0;
173 
174 
179  virtual void setDigitalMode(libm2k::digital::DIO_TRIGGER_MODE mode) = 0;
180 
181 
186  virtual M2K_TRIGGER_SOURCE_ANALOG getAnalogSource() = 0;
187 
188 
193  virtual void setAnalogSource(M2K_TRIGGER_SOURCE_ANALOG src) = 0;
194 
195 
200  virtual int getAnalogSourceChannel() = 0;
201 
202 
207  virtual void setAnalogSourceChannel(unsigned int chnIdx) = 0;
208 
209 
224  virtual int getAnalogDelay() const = 0;
225 
226 
241  virtual void setAnalogDelay(int delay) = 0;
242 
243 
258  virtual int getDigitalDelay() const = 0;
259 
260 
275  virtual void setDigitalDelay(int delay) = 0;
276 
277 
281  virtual struct SETTINGS *getCurrentHwSettings() = 0;
282 
283 
287  virtual void setHwTriggerSettings(struct SETTINGS *settings) = 0;
288 
289 
294  virtual void setAnalogStreamingFlag(bool enable) = 0;
295 
296 
301  virtual bool getAnalogStreamingFlag() = 0;
302 
303 
313  virtual void setDigitalStreamingFlag(bool enable) = 0;
314 
315 
320  virtual bool getDigitalStreamingFlag() = 0;
321 
322 
326  virtual void setCalibParameters(unsigned int chnIdx, double scaling, double vert_offset) = 0;
327 
328 
334  virtual M2K_TRIGGER_CONDITION_DIGITAL getAnalogExternalCondition(unsigned int chnIdx) = 0;
335 
336 
342  virtual void setAnalogExternalCondition(unsigned int chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond) = 0;
343 
344 
349  virtual M2K_TRIGGER_CONDITION_DIGITAL getDigitalExternalCondition() const = 0;
350 
351 
356  virtual void setDigitalExternalCondition(M2K_TRIGGER_CONDITION_DIGITAL cond) = 0;
357 
358 
370  virtual void setAnalogExternalOutSelect(M2K_TRIGGER_OUT_SELECT output_select);
371 
372 
382  virtual M2K_TRIGGER_OUT_SELECT getAnalogExternalOutSelect();
383 
384 
388  virtual bool hasExternalTriggerIn() const = 0;
389 
390 
394  virtual bool hasExternalTriggerOut() const = 0;
395 
396 
400  virtual bool hasCrossInstrumentTrigger() const = 0;
401 
402 
411  virtual void setDigitalSource(M2K_TRIGGER_SOURCE_DIGITAL external_src);
412 
413 
422  virtual M2K_TRIGGER_SOURCE_DIGITAL getDigitalSource() const;
423 
424 
434  virtual void setAnalogOutTriggerSource(M2K_TRIGGER_SOURCE_OUT src) = 0;
435 
436 
446  virtual M2K_TRIGGER_SOURCE_OUT getAnalogOutTriggerSource() const = 0;
447 
448 
461  virtual void setAnalogOutTriggerCondition(M2K_TRIGGER_CONDITION_OUT condition) = 0;
462 
463 
475  virtual M2K_TRIGGER_CONDITION_OUT getAnalogOutTriggerCondition() const = 0;
476 
485  virtual void setAnalogOutTriggerStatus(M2K_TRIGGER_STATUS_ANALOG_OUT status) = 0;
486 
487 
496  virtual M2K_TRIGGER_STATUS_ANALOG_OUT getAnalogOutTriggerStatus() const = 0;
497 };
498 }
499 
500 #endif //M2KHARDWARETRIGGER_HPP
M2K_TRIGGER_STATUS_ANALOG_OUT
The status value determines the action that the output interface will take when the trigger condition...
Definition: enums.hpp:182
+
M2K_TRIGGER_SOURCE_OUT
Selects the source trigger for the output interfaces.
Definition: enums.hpp:158
+
M2K_TRIGGER_SOURCE_DIGITAL
Select the source for the digital trigger.
Definition: enums.hpp:193
+
DIO_CHANNEL
Indexes of the channels.
Definition: digital/enums.hpp:69
+
M2K_TRIGGER_CONDITION_DIGITAL
Condition of triggering.
Definition: enums.hpp:109
+
M2K_TRIGGER_CONDITION_OUT
Trigger condition when the source for M2K_TRIGGER_SOURCE_OUT is TRIGGER_TI.
Definition: enums.hpp:169
+
Digital enumerations.
+
M2K_TRIGGER_CONDITION_ANALOG
Condition of triggering.
Definition: enums.hpp:96
+
M2K_TRIGGER_MODE
Select the mode for the analog trigger.
Definition: enums.hpp:123
+
M2K_TRIGGER_OUT_SELECT
Select which trigger event will be forwarded on TO pin (trigger out)
Definition: enums.hpp:205
+
Triggering system.
Definition: enums.hpp:219
+
DIO_TRIGGER_MODE
Triggering mode for digital channels.
Definition: digital/enums.hpp:105
+
Controls the hardware trigger for ADALM2000.
Definition: m2khardwaretrigger.hpp:41
+
M2K_TRIGGER_SOURCE_ANALOG
Select the source for the analog trigger.
Definition: enums.hpp:140
+
Generic M2K enumerations.
+
+ + + + diff --git a/m2kpowersupply_8hpp_source.html b/m2kpowersupply_8hpp_source.html new file mode 100644 index 00000000..3eeee5fa --- /dev/null +++ b/m2kpowersupply_8hpp_source.html @@ -0,0 +1,81 @@ + + + + + + + +libm2k: m2kpowersupply.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
libm2k +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
m2kpowersupply.hpp
+
+
+
1 /*
2  * Copyright (c) 2019 Analog Devices Inc.
3  *
4  * This file is part of libm2k
5  * (see http://www.github.com/analogdevicesinc/libm2k).
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as published by
9  * the Free Software Foundation, either version 2.1 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef M2KPOWERSUPPLY_HPP
23 #define M2KPOWERSUPPLY_HPP
24 
25 #include <libm2k/m2kglobal.hpp>
26 #include <vector>
27 #include <memory>
28 
29 namespace libm2k {
34 namespace analog {
42 class LIBM2K_API M2kPowerSupply {
43 public:
47  virtual ~M2kPowerSupply() {}
48 
49 
53  virtual void reset() = 0;
54 
55 
62  virtual void enableChannel(unsigned int chn, bool en) = 0;
63 
64 
70  virtual void enableAll(bool en) = 0;
71 
72 
82  virtual double readChannel(unsigned int chn, bool calibrated = true) = 0;
83 
84 
94  virtual void pushChannel(unsigned int chn, double value, bool calibrated = true) = 0;
95 
96 
100  virtual void powerDownDacs(bool powerdown) = 0;
101 
102 
109  virtual bool anyChannelEnabled() = 0;
110 };
111 }
112 }
113 
114 
115 
116 #endif //M2KPOWERSUPPLY_HPP
Controls the power supply.
Definition: m2kpowersupply.hpp:42
+
+ + + + diff --git a/menu.js b/menu.js new file mode 100644 index 00000000..433c15b8 --- /dev/null +++ b/menu.js @@ -0,0 +1,50 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 00000000..91701c45 --- /dev/null +++ b/menudata.js @@ -0,0 +1,63 @@ +/* +@ @licstart The following is the entire license notice for the +JavaScript code in this file. + +Copyright (C) 1997-2017 by Dimitri van Heesch + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +@licend The above is the entire license notice +for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Modules",url:"modules.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"inherits.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"c",url:"functions_c.html#index_c"}, +{text:"d",url:"functions_d.html#index_d"}, +{text:"e",url:"functions_e.html#index_e"}, +{text:"g",url:"functions_g.html#index_g"}, +{text:"h",url:"functions_h.html#index_h"}, +{text:"i",url:"functions_i.html#index_i"}, +{text:"l",url:"functions_l.html#index_l"}, +{text:"m",url:"functions_m.html#index_m"}, +{text:"n",url:"functions_n.html#index_n"}, +{text:"p",url:"functions_p.html#index_p"}, +{text:"r",url:"functions_r.html#index_r"}, +{text:"s",url:"functions_s.html#index_s"}, +{text:"t",url:"functions_t.html#index_t"}, +{text:"u",url:"functions_u.html#index_u"}, +{text:"v",url:"functions_v.html#index_v"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"c",url:"functions_func_c.html#index_c"}, +{text:"e",url:"functions_func_e.html#index_e"}, +{text:"g",url:"functions_func_g.html#index_g"}, +{text:"h",url:"functions_func_h.html#index_h"}, +{text:"i",url:"functions_func_i.html#index_i"}, +{text:"l",url:"functions_func_l.html#index_l"}, +{text:"p",url:"functions_func_p.html#index_p"}, +{text:"r",url:"functions_func_r.html#index_r"}, +{text:"s",url:"functions_func_s.html#index_s"}, +{text:"t",url:"functions_func_t.html#index_t"}]}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/modules.html b/modules.html new file mode 100644 index 00000000..4c0f9bb9 --- /dev/null +++ b/modules.html @@ -0,0 +1,90 @@ + + + + + + + +libm2k: Modules + + + + + + + + + +
    +
    + + + + + + +
    +
    libm2k +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Modules
    +
    +
    +
    Here is a list of all modules:
    +
    [detail level 12]
    + + + + + + + + + + +
     M2kContains the representation of the M2K
     ContextContains the representation of a generic IIO context
     ContextBuilderCreates/destroys the context
     DigitalContains the representation of the digital segment
     AnalogContains all analogical components
     AnalogInContains the representation of the analogical input segment
     AnalogOutContains the representation of the analogical output segment
     PowerSupplyContains the representation of the power supply
     DMMContains the representation of the digital multimeter
     HardwareTriggerContains the representation of the ADALM2000 trigger system
    +
    +
    + + + + diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 00000000..72a58a52 Binary files /dev/null and b/nav_f.png differ diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 00000000..2093a237 Binary files /dev/null and b/nav_g.png differ diff --git a/nav_h.png b/nav_h.png new file mode 100644 index 00000000..33389b10 Binary files /dev/null and b/nav_h.png differ diff --git a/open.png b/open.png new file mode 100644 index 00000000..30f75c7e Binary files /dev/null and b/open.png differ diff --git a/python/html/sphinx/build/conf.py b/python/html/sphinx/build/conf.py new file mode 100644 index 00000000..4e54fe50 --- /dev/null +++ b/python/html/sphinx/build/conf.py @@ -0,0 +1,59 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +import sphinx_rtd_theme + +# -- Project information ----------------------------------------------------- + +project = 'libm2k' +copyright = '2020, Analog Devices Inc.' +author = 'Analog Devices Inc.' + +# The full version, including alpha/beta/rc tags +release = 'v0.9.0' + + +# The master toctree document. +master_doc = "index" + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ["sphinx.ext.autodoc", "sphinx_rtd_theme"] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +#html_static_path = ['_static'] diff --git a/python/html/sphinx/build/doctrees/environment.pickle b/python/html/sphinx/build/doctrees/environment.pickle new file mode 100644 index 00000000..04bb34c8 Binary files /dev/null and b/python/html/sphinx/build/doctrees/environment.pickle differ diff --git a/python/html/sphinx/build/doctrees/examples.doctree b/python/html/sphinx/build/doctrees/examples.doctree new file mode 100644 index 00000000..2eec6f90 Binary files /dev/null and b/python/html/sphinx/build/doctrees/examples.doctree differ diff --git a/python/html/sphinx/build/doctrees/index.doctree b/python/html/sphinx/build/doctrees/index.doctree new file mode 100644 index 00000000..5d270847 Binary files /dev/null and b/python/html/sphinx/build/doctrees/index.doctree differ diff --git a/python/html/sphinx/build/doctrees/libm2k.doctree b/python/html/sphinx/build/doctrees/libm2k.doctree new file mode 100644 index 00000000..a2ca84f3 Binary files /dev/null and b/python/html/sphinx/build/doctrees/libm2k.doctree differ diff --git a/python/html/sphinx/build/html/.buildinfo b/python/html/sphinx/build/html/.buildinfo new file mode 100644 index 00000000..d7ea1cef --- /dev/null +++ b/python/html/sphinx/build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: ea53b2a1ed5aa040e360472ca33435cb +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/python/html/sphinx/build/html/_sources/examples.rst.txt b/python/html/sphinx/build/html/_sources/examples.rst.txt new file mode 100644 index 00000000..1ae81672 --- /dev/null +++ b/python/html/sphinx/build/html/_sources/examples.rst.txt @@ -0,0 +1,71 @@ +libm2k Examples +=================== + + +Generating data using the ADALM2000 DAC and acquiring it using the ADALM2000 ADC + +.. code-block:: python + + # This example assumes the following connections: + # W1 -> 1+ + # W2 -> 2+ + # GND -> 1- + # GND -> 2- + # + # The application will generate a sine and triangular wave on W1 and W2. The signal is fed back into the analog input + # and the voltage values are displayed on the screen + + import libm2k + import matplotlib.pyplot as plt + import time + import numpy as np + + ctx=libm2k.m2kOpen() + if ctx is None: + print("Connection Error: No ADALM2000 device available/connected to your PC.") + exit(1) + + ctx.calibrateADC() + ctx.calibrateDAC() + + ain=ctx.getAnalogIn() + aout=ctx.getAnalogOut() + trig=ain.getTrigger() + + ain.enableChannel(0,True) + ain.enableChannel(1,True) + ain.setSampleRate(100000) + ain.setRange(0,-10,10) + + ### uncomment the following block to enable triggering + #trig.setAnalogSource(0) # Channel 0 as source + #trig.setAnalogCondition(0,libm2k.RISING_EDGE_ANALOG) + #trig.setAnalogLevel(0,0.5) # Set trigger level at 0.5 + #trig.setAnalogDelay(0) # Trigger is centered + #trig.setAnalogMode(1, libm2k.ANALOG) + + aout.setSampleRate(0, 750000) + aout.setSampleRate(1, 750000) + aout.enableChannel(0, True) + aout.enableChannel(1, True) + + x=np.linspace(-np.pi,np.pi,1024) + buffer1=np.linspace(-2.0,2.00,1024) + buffer2=np.sin(x) + + buffer = [buffer1, buffer2] + + aout.setCyclic(True) + aout.push(buffer) + + for i in range(10): # gets 10 triggered samples then quits + data = ain.getSamples(1000) + plt.plot(data[0]) + plt.plot(data[1]) + plt.show() + time.sleep(0.1) + + libm2k.contextClose(ctx) + + +Other Python examples are available in the `source repository `_ diff --git a/python/html/sphinx/build/html/_sources/index.rst.txt b/python/html/sphinx/build/html/_sources/index.rst.txt new file mode 100644 index 00000000..46a865b7 --- /dev/null +++ b/python/html/sphinx/build/html/_sources/index.rst.txt @@ -0,0 +1,21 @@ +.. libm2k documentation master file, created by + sphinx-quickstart on Fri Apr 10 14:15:12 2020. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +libm2k documentation - Library for interfacing with the ADALM2000 +==================================================================== + +.. toctree:: + :maxdepth: 2 + + libm2k + examples + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/python/html/sphinx/build/html/_sources/libm2k.rst.txt b/python/html/sphinx/build/html/_sources/libm2k.rst.txt new file mode 100644 index 00000000..c6864f5a --- /dev/null +++ b/python/html/sphinx/build/html/_sources/libm2k.rst.txt @@ -0,0 +1,7 @@ +libm2k Module +============= + +.. automodule:: libm2k + :members: + :undoc-members: + :show-inheritance: diff --git a/python/html/sphinx/build/html/_static/_sphinx_javascript_frameworks_compat.js b/python/html/sphinx/build/html/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 00000000..81415803 --- /dev/null +++ b/python/html/sphinx/build/html/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/python/html/sphinx/build/html/_static/basic.css b/python/html/sphinx/build/html/_static/basic.css new file mode 100644 index 00000000..cfc60b86 --- /dev/null +++ b/python/html/sphinx/build/html/_static/basic.css @@ -0,0 +1,921 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/python/html/sphinx/build/html/_static/css/badge_only.css b/python/html/sphinx/build/html/_static/css/badge_only.css new file mode 100644 index 00000000..88ba55b9 --- /dev/null +++ b/python/html/sphinx/build/html/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px} \ No newline at end of file diff --git a/python/html/sphinx/build/html/_static/css/fonts/Roboto-Slab-Bold.woff b/python/html/sphinx/build/html/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 b/python/html/sphinx/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/Roboto-Slab-Regular.woff b/python/html/sphinx/build/html/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 b/python/html/sphinx/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.eot b/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.svg b/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.ttf b/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.woff b/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.woff2 b/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/lato-bold-italic.woff b/python/html/sphinx/build/html/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/lato-bold-italic.woff differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/lato-bold-italic.woff2 b/python/html/sphinx/build/html/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/lato-bold.woff b/python/html/sphinx/build/html/_static/css/fonts/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/lato-bold.woff differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/lato-bold.woff2 b/python/html/sphinx/build/html/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/lato-bold.woff2 differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/lato-normal-italic.woff b/python/html/sphinx/build/html/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/lato-normal-italic.woff differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/lato-normal-italic.woff2 b/python/html/sphinx/build/html/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/lato-normal.woff b/python/html/sphinx/build/html/_static/css/fonts/lato-normal.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/lato-normal.woff differ diff --git a/python/html/sphinx/build/html/_static/css/fonts/lato-normal.woff2 b/python/html/sphinx/build/html/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/python/html/sphinx/build/html/_static/css/fonts/lato-normal.woff2 differ diff --git a/python/html/sphinx/build/html/_static/css/theme.css b/python/html/sphinx/build/html/_static/css/theme.css new file mode 100644 index 00000000..0f14f106 --- /dev/null +++ b/python/html/sphinx/build/html/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:"ï€"}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:"ï€"}.fa-search-plus:before{content:""}.fa-search-minus:before{content:"ï€"}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:"ï€"}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:"ï€"}.fa-map-marker:before{content:"ï"}.fa-adjust:before{content:"ï‚"}.fa-tint:before{content:"ïƒ"}.fa-edit:before,.fa-pencil-square-o:before{content:"ï„"}.fa-share-square-o:before{content:"ï…"}.fa-check-square-o:before{content:"ï†"}.fa-arrows:before{content:"ï‡"}.fa-step-backward:before{content:"ïˆ"}.fa-fast-backward:before{content:"ï‰"}.fa-backward:before{content:"ïŠ"}.fa-play:before{content:"ï‹"}.fa-pause:before{content:"ïŒ"}.fa-stop:before{content:"ï"}.fa-forward:before{content:"ïŽ"}.fa-fast-forward:before{content:"ï"}.fa-step-forward:before{content:"ï‘"}.fa-eject:before{content:"ï’"}.fa-chevron-left:before{content:"ï“"}.fa-chevron-right:before{content:"ï”"}.fa-plus-circle:before{content:"ï•"}.fa-minus-circle:before{content:"ï–"}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:"ï—"}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:"ï˜"}.fa-question-circle:before{content:"ï™"}.fa-info-circle:before{content:"ïš"}.fa-crosshairs:before{content:"ï›"}.fa-times-circle-o:before{content:"ïœ"}.fa-check-circle-o:before{content:"ï"}.fa-ban:before{content:"ïž"}.fa-arrow-left:before{content:"ï "}.fa-arrow-right:before{content:"ï¡"}.fa-arrow-up:before{content:"ï¢"}.fa-arrow-down:before{content:"ï£"}.fa-mail-forward:before,.fa-share:before{content:"ï¤"}.fa-expand:before{content:"ï¥"}.fa-compress:before{content:"ï¦"}.fa-plus:before{content:"ï§"}.fa-minus:before{content:"ï¨"}.fa-asterisk:before{content:"ï©"}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:"ïª"}.fa-gift:before{content:"ï«"}.fa-leaf:before{content:"ï¬"}.fa-fire:before,.icon-fire:before{content:"ï­"}.fa-eye:before{content:"ï®"}.fa-eye-slash:before{content:"ï°"}.fa-exclamation-triangle:before,.fa-warning:before{content:"ï±"}.fa-plane:before{content:"ï²"}.fa-calendar:before{content:"ï³"}.fa-random:before{content:"ï´"}.fa-comment:before{content:"ïµ"}.fa-magnet:before{content:"ï¶"}.fa-chevron-up:before{content:"ï·"}.fa-chevron-down:before{content:"ï¸"}.fa-retweet:before{content:"ï¹"}.fa-shopping-cart:before{content:"ïº"}.fa-folder:before{content:"ï»"}.fa-folder-open:before{content:"ï¼"}.fa-arrows-v:before{content:"ï½"}.fa-arrows-h:before{content:"ï¾"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"ï‚€"}.fa-twitter-square:before{content:"ï‚"}.fa-facebook-square:before{content:"ï‚‚"}.fa-camera-retro:before{content:""}.fa-key:before{content:"ï‚„"}.fa-cogs:before,.fa-gears:before{content:"ï‚…"}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:"ï‚Š"}.fa-sign-out:before{content:"ï‚‹"}.fa-linkedin-square:before{content:"ï‚Œ"}.fa-thumb-tack:before{content:"ï‚"}.fa-external-link:before{content:"ï‚Ž"}.fa-sign-in:before{content:"ï‚"}.fa-trophy:before{content:"ï‚‘"}.fa-github-square:before{content:"ï‚’"}.fa-upload:before{content:"ï‚“"}.fa-lemon-o:before{content:"ï‚”"}.fa-phone:before{content:"ï‚•"}.fa-square-o:before{content:"ï‚–"}.fa-bookmark-o:before{content:"ï‚—"}.fa-phone-square:before{content:""}.fa-twitter:before{content:"ï‚™"}.fa-facebook-f:before,.fa-facebook:before{content:"ï‚š"}.fa-github:before,.icon-github:before{content:"ï‚›"}.fa-unlock:before{content:"ï‚œ"}.fa-credit-card:before{content:"ï‚"}.fa-feed:before,.fa-rss:before{content:"ï‚ž"}.fa-hdd-o:before{content:"ï‚ "}.fa-bullhorn:before{content:"ï‚¡"}.fa-bell:before{content:""}.fa-certificate:before{content:"ï‚£"}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:"ï‚¥"}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:"ï‚©"}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:"ï‚«"}.fa-globe:before{content:""}.fa-wrench:before{content:"ï‚­"}.fa-tasks:before{content:"ï‚®"}.fa-filter:before{content:"ï‚°"}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:"ïƒ"}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:"ïƒ"}.fa-table:before{content:""}.fa-magic:before{content:"ïƒ"}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:"ïƒ"}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:"ï‚¢"}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:"ï„€"}.fa-angle-double-right:before{content:"ï„"}.fa-angle-double-up:before{content:"ï„‚"}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:"ï„„"}.fa-angle-right:before{content:"ï„…"}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:"ï„Š"}.fa-mobile-phone:before,.fa-mobile:before{content:"ï„‹"}.fa-circle-o:before{content:"ï„Œ"}.fa-quote-left:before{content:"ï„"}.fa-quote-right:before{content:"ï„Ž"}.fa-spinner:before{content:"ï„"}.fa-circle:before{content:"ï„‘"}.fa-mail-reply:before,.fa-reply:before{content:"ï„’"}.fa-github-alt:before{content:"ï„“"}.fa-folder-o:before{content:"ï„”"}.fa-folder-open-o:before{content:"ï„•"}.fa-smile-o:before{content:""}.fa-frown-o:before{content:"ï„™"}.fa-meh-o:before{content:"ï„š"}.fa-gamepad:before{content:"ï„›"}.fa-keyboard-o:before{content:"ï„œ"}.fa-flag-o:before{content:"ï„"}.fa-flag-checkered:before{content:"ï„ž"}.fa-terminal:before{content:"ï„ "}.fa-code:before{content:"ï„¡"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"ï„¢"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"ï„£"}.fa-location-arrow:before{content:""}.fa-crop:before{content:"ï„¥"}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:"ï„©"}.fa-exclamation:before{content:""}.fa-superscript:before{content:"ï„«"}.fa-subscript:before{content:""}.fa-eraser:before{content:"ï„­"}.fa-puzzle-piece:before{content:"ï„®"}.fa-microphone:before{content:"ï„°"}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:"ï„´"}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:"ï„·"}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:"ï„»"}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:"ï…€"}.fa-ellipsis-h:before{content:"ï…"}.fa-ellipsis-v:before{content:"ï…‚"}.fa-rss-square:before{content:"ï…ƒ"}.fa-play-circle:before{content:"ï…„"}.fa-ticket:before{content:"ï……"}.fa-minus-square:before{content:"ï…†"}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:"ï…‡"}.fa-level-up:before{content:"ï…ˆ"}.fa-level-down:before{content:"ï…‰"}.fa-check-square:before{content:"ï…Š"}.fa-pencil-square:before{content:"ï…‹"}.fa-external-link-square:before{content:"ï…Œ"}.fa-share-square:before{content:"ï…"}.fa-compass:before{content:"ï…Ž"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"ï…"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"ï…‘"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"ï…’"}.fa-eur:before,.fa-euro:before{content:"ï…“"}.fa-gbp:before{content:"ï…”"}.fa-dollar:before,.fa-usd:before{content:"ï…•"}.fa-inr:before,.fa-rupee:before{content:"ï…–"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"ï…—"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"ï…˜"}.fa-krw:before,.fa-won:before{content:"ï…™"}.fa-bitcoin:before,.fa-btc:before{content:"ï…š"}.fa-file:before{content:"ï…›"}.fa-file-text:before{content:"ï…œ"}.fa-sort-alpha-asc:before{content:"ï…"}.fa-sort-alpha-desc:before{content:"ï…ž"}.fa-sort-amount-asc:before{content:"ï… "}.fa-sort-amount-desc:before{content:"ï…¡"}.fa-sort-numeric-asc:before{content:"ï…¢"}.fa-sort-numeric-desc:before{content:"ï…£"}.fa-thumbs-up:before{content:"ï…¤"}.fa-thumbs-down:before{content:"ï…¥"}.fa-youtube-square:before{content:"ï…¦"}.fa-youtube:before{content:"ï…§"}.fa-xing:before{content:"ï…¨"}.fa-xing-square:before{content:"ï…©"}.fa-youtube-play:before{content:"ï…ª"}.fa-dropbox:before{content:"ï…«"}.fa-stack-overflow:before{content:"ï…¬"}.fa-instagram:before{content:"ï…­"}.fa-flickr:before{content:"ï…®"}.fa-adn:before{content:"ï…°"}.fa-bitbucket:before,.icon-bitbucket:before{content:"ï…±"}.fa-bitbucket-square:before{content:"ï…²"}.fa-tumblr:before{content:"ï…³"}.fa-tumblr-square:before{content:"ï…´"}.fa-long-arrow-down:before{content:"ï…µ"}.fa-long-arrow-up:before{content:"ï…¶"}.fa-long-arrow-left:before{content:"ï…·"}.fa-long-arrow-right:before{content:"ï…¸"}.fa-apple:before{content:"ï…¹"}.fa-windows:before{content:"ï…º"}.fa-android:before{content:"ï…»"}.fa-linux:before{content:"ï…¼"}.fa-dribbble:before{content:"ï…½"}.fa-skype:before{content:"ï…¾"}.fa-foursquare:before{content:""}.fa-trello:before{content:"ï†"}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:"ï†"}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:"ï†"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:"ï†"}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:"ï‡"}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"ï‡"}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"ï‡"}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:"ï‡"}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:"ïˆ"}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:"ïˆ"}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:"ïˆ"}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:"ïˆ"}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"ï‰"}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:"ï‰"}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:"ï‰"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:"ï‰"}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:"ïŠ"}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:"ïŠ"}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:"ïŠ"}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:"ïŠ"}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:"ï‹€"}.fa-id-badge:before{content:"ï‹"}.fa-drivers-license:before,.fa-id-card:before{content:"ï‹‚"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:"ï‹„"}.fa-free-code-camp:before{content:"ï‹…"}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"ï‹Š"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"ï‹‹"}.fa-shower:before{content:"ï‹Œ"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:"ï‹"}.fa-podcast:before{content:"ï‹Ž"}.fa-window-maximize:before{content:"ï‹"}.fa-window-minimize:before{content:"ï‹‘"}.fa-window-restore:before{content:"ï‹’"}.fa-times-rectangle:before,.fa-window-close:before{content:"ï‹“"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"ï‹”"}.fa-bandcamp:before{content:"ï‹•"}.fa-grav:before{content:"ï‹–"}.fa-etsy:before{content:"ï‹—"}.fa-imdb:before{content:""}.fa-ravelry:before{content:"ï‹™"}.fa-eercast:before{content:"ï‹š"}.fa-microchip:before{content:"ï‹›"}.fa-snowflake-o:before{content:"ï‹œ"}.fa-superpowers:before{content:"ï‹"}.fa-wpexplorer:before{content:"ï‹ž"}.fa-meetup:before{content:"ï‹ "}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search .wy-dropdown>aactive,.wy-side-nav-search .wy-dropdown>afocus,.wy-side-nav-search>a:hover,.wy-side-nav-search>aactive,.wy-side-nav-search>afocus{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon,.wy-side-nav-search>a.icon{display:block}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.switch-menus{position:relative;display:block;margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-side-nav-search>div.switch-menus>div.language-switch,.wy-side-nav-search>div.switch-menus>div.version-switch{display:inline-block;padding:.2em}.wy-side-nav-search>div.switch-menus>div.language-switch select,.wy-side-nav-search>div.switch-menus>div.version-switch select{display:inline-block;margin-right:-2rem;padding-right:2rem;max-width:240px;text-align-last:center;background:none;border:none;border-radius:0;box-shadow:none;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-size:1em;font-weight:400;color:hsla(0,0%,100%,.3);cursor:pointer;appearance:none;-webkit-appearance:none;-moz-appearance:none}.wy-side-nav-search>div.switch-menus>div.language-switch select:active,.wy-side-nav-search>div.switch-menus>div.language-switch select:focus,.wy-side-nav-search>div.switch-menus>div.language-switch select:hover,.wy-side-nav-search>div.switch-menus>div.version-switch select:active,.wy-side-nav-search>div.switch-menus>div.version-switch select:focus,.wy-side-nav-search>div.switch-menus>div.version-switch select:hover{background:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.5)}.wy-side-nav-search>div.switch-menus>div.language-switch select option,.wy-side-nav-search>div.switch-menus>div.version-switch select option{color:#000}.wy-side-nav-search>div.switch-menus>div.language-switch:has(>select):after,.wy-side-nav-search>div.switch-menus>div.version-switch:has(>select):after{display:inline-block;width:1.5em;height:100%;padding:.1em;content:"\f0d7";font-size:1em;line-height:1.2em;font-family:FontAwesome;text-align:center;pointer-events:none;box-sizing:border-box}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/python/html/sphinx/build/html/_static/doctools.js b/python/html/sphinx/build/html/_static/doctools.js new file mode 100644 index 00000000..d06a71d7 --- /dev/null +++ b/python/html/sphinx/build/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/python/html/sphinx/build/html/_static/documentation_options.js b/python/html/sphinx/build/html/_static/documentation_options.js new file mode 100644 index 00000000..eccb963b --- /dev/null +++ b/python/html/sphinx/build/html/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: 'v0.9.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/python/html/sphinx/build/html/_static/file.png b/python/html/sphinx/build/html/_static/file.png new file mode 100644 index 00000000..a858a410 Binary files /dev/null and b/python/html/sphinx/build/html/_static/file.png differ diff --git a/python/html/sphinx/build/html/_static/fonts/Inconsolata-Bold.ttf b/python/html/sphinx/build/html/_static/fonts/Inconsolata-Bold.ttf new file mode 100644 index 00000000..809c1f58 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Inconsolata-Bold.ttf differ diff --git a/python/html/sphinx/build/html/_static/fonts/Inconsolata-Regular.ttf b/python/html/sphinx/build/html/_static/fonts/Inconsolata-Regular.ttf new file mode 100644 index 00000000..fc981ce7 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Inconsolata-Regular.ttf differ diff --git a/python/html/sphinx/build/html/_static/fonts/Inconsolata.ttf b/python/html/sphinx/build/html/_static/fonts/Inconsolata.ttf new file mode 100644 index 00000000..4b8a36d2 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Inconsolata.ttf differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato-Bold.ttf b/python/html/sphinx/build/html/_static/fonts/Lato-Bold.ttf new file mode 100644 index 00000000..1d23c706 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato-Bold.ttf differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato-Regular.ttf b/python/html/sphinx/build/html/_static/fonts/Lato-Regular.ttf new file mode 100644 index 00000000..0f3d0f83 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato-Regular.ttf differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-bold.eot b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bold.eot new file mode 100644 index 00000000..3361183a Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bold.eot differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-bold.ttf b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bold.ttf new file mode 100644 index 00000000..29f691d5 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bold.ttf differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-bold.woff b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bold.woff differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-bold.woff2 b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bold.woff2 differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.eot b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.eot new file mode 100644 index 00000000..3d415493 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.eot differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.ttf b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.ttf new file mode 100644 index 00000000..f402040b Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.ttf differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.woff b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.woff differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.woff2 b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.woff2 differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-italic.eot b/python/html/sphinx/build/html/_static/fonts/Lato/lato-italic.eot new file mode 100644 index 00000000..3f826421 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-italic.eot differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-italic.ttf b/python/html/sphinx/build/html/_static/fonts/Lato/lato-italic.ttf new file mode 100644 index 00000000..b4bfc9b2 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-italic.ttf differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-italic.woff b/python/html/sphinx/build/html/_static/fonts/Lato/lato-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-italic.woff differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-italic.woff2 b/python/html/sphinx/build/html/_static/fonts/Lato/lato-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-italic.woff2 differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-regular.eot b/python/html/sphinx/build/html/_static/fonts/Lato/lato-regular.eot new file mode 100644 index 00000000..11e3f2a5 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-regular.eot differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-regular.ttf b/python/html/sphinx/build/html/_static/fonts/Lato/lato-regular.ttf new file mode 100644 index 00000000..74decd9e Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-regular.ttf differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-regular.woff b/python/html/sphinx/build/html/_static/fonts/Lato/lato-regular.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-regular.woff differ diff --git a/python/html/sphinx/build/html/_static/fonts/Lato/lato-regular.woff2 b/python/html/sphinx/build/html/_static/fonts/Lato/lato-regular.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/Lato/lato-regular.woff2 differ diff --git a/python/html/sphinx/build/html/_static/fonts/RobotoSlab-Bold.ttf b/python/html/sphinx/build/html/_static/fonts/RobotoSlab-Bold.ttf new file mode 100644 index 00000000..df5d1df2 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/RobotoSlab-Bold.ttf differ diff --git a/python/html/sphinx/build/html/_static/fonts/RobotoSlab-Regular.ttf b/python/html/sphinx/build/html/_static/fonts/RobotoSlab-Regular.ttf new file mode 100644 index 00000000..eb52a790 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/RobotoSlab-Regular.ttf differ diff --git a/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot new file mode 100644 index 00000000..79dc8efe Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot differ diff --git a/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf new file mode 100644 index 00000000..df5d1df2 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf differ diff --git a/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff differ diff --git a/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 differ diff --git a/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot new file mode 100644 index 00000000..2f7ca78a Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot differ diff --git a/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf new file mode 100644 index 00000000..eb52a790 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf differ diff --git a/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff differ diff --git a/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 differ diff --git a/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.eot b/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.eot differ diff --git a/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.svg b/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.ttf b/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.ttf differ diff --git a/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.woff b/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.woff differ diff --git a/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.woff2 b/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/python/html/sphinx/build/html/_static/fonts/fontawesome-webfont.woff2 differ diff --git a/python/html/sphinx/build/html/_static/jquery.js b/python/html/sphinx/build/html/_static/jquery.js new file mode 100644 index 00000000..c4c6022f --- /dev/null +++ b/python/html/sphinx/build/html/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/python/html/sphinx/build/html/_static/js/html5shiv.min.js b/python/html/sphinx/build/html/_static/js/html5shiv.min.js new file mode 100644 index 00000000..cd1c674f --- /dev/null +++ b/python/html/sphinx/build/html/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/python/html/sphinx/build/html/_static/js/modernizr.min.js b/python/html/sphinx/build/html/_static/js/modernizr.min.js new file mode 100644 index 00000000..f65d4797 --- /dev/null +++ b/python/html/sphinx/build/html/_static/js/modernizr.min.js @@ -0,0 +1,4 @@ +/* Modernizr 2.6.2 (Custom Build) | MIT & BSD + * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load + */ +;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d',a,""].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f"),n("table.docutils.footnote").wrap("
    "),n("table.docutils.citation").wrap("
    "),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t +
    Languages
    + ${config.projects.translations + .map( + (translation) => ` +
    + ${translation.language.code} +
    + `, + ) + .join("\n")} + + `; + return languagesHTML; + } + + function renderVersions(config) { + if (!config.versions.active.length) { + return ""; + } + const versionsHTML = ` +
    +
    Versions
    + ${config.versions.active + .map( + (version) => ` +
    + ${version.slug} +
    + `, + ) + .join("\n")} +
    + `; + return versionsHTML; + } + + function renderDownloads(config) { + if (!Object.keys(config.versions.current.downloads).length) { + return ""; + } + const downloadsNameDisplay = { + pdf: "PDF", + epub: "Epub", + htmlzip: "HTML", + }; + + const downloadsHTML = ` +
    +
    Downloads
    + ${Object.entries(config.versions.current.downloads) + .map( + ([name, url]) => ` +
    + ${downloadsNameDisplay[name]} +
    + `, + ) + .join("\n")} +
    + `; + return downloadsHTML; + } + + document.addEventListener("readthedocs-addons-data-ready", function (event) { + const config = event.detail.data(); + + const flyout = ` +
    + + Read the Docs + v: ${config.versions.current.slug} + + +
    +
    + ${renderLanguages(config)} + ${renderVersions(config)} + ${renderDownloads(config)} +
    +
    On Read the Docs
    +
    + Project Home +
    +
    + Builds +
    +
    + Downloads +
    +
    +
    +
    Search
    +
    +
    + +
    +
    +
    +
    + + Hosted by Read the Docs + +
    +
    + `; + + // Inject the generated flyout into the body HTML element. + document.body.insertAdjacentHTML("beforeend", flyout); + + // Trigger the Read the Docs Addons Search modal when clicking on the "Search docs" input from inside the flyout. + document + .querySelector("#flyout-search-form") + .addEventListener("focusin", () => { + const event = new CustomEvent("readthedocs-search-show"); + document.dispatchEvent(event); + }); + }) +} + +if (themeLanguageSelector || themeVersionSelector) { + function onSelectorSwitch(event) { + const option = event.target.selectedIndex; + const item = event.target.options[option]; + window.location.href = item.dataset.url; + } + + document.addEventListener("readthedocs-addons-data-ready", function (event) { + const config = event.detail.data(); + + const versionSwitch = document.querySelector( + "div.switch-menus > div.version-switch", + ); + if (themeVersionSelector) { + let versions = config.versions.active; + if (config.versions.current.hidden || config.versions.current.type === "external") { + versions.unshift(config.versions.current); + } + const versionSelect = ` + + `; + + versionSwitch.innerHTML = versionSelect; + versionSwitch.firstElementChild.addEventListener("change", onSelectorSwitch); + } + + const languageSwitch = document.querySelector( + "div.switch-menus > div.language-switch", + ); + + if (themeLanguageSelector) { + if (config.projects.translations.length) { + // Add the current language to the options on the selector + let languages = config.projects.translations.concat( + config.projects.current, + ); + languages = languages.sort((a, b) => + a.language.name.localeCompare(b.language.name), + ); + + const languageSelect = ` + + `; + + languageSwitch.innerHTML = languageSelect; + languageSwitch.firstElementChild.addEventListener("change", onSelectorSwitch); + } + else { + languageSwitch.remove(); + } + } + }); +} + +document.addEventListener("readthedocs-addons-data-ready", function (event) { + // Trigger the Read the Docs Addons Search modal when clicking on "Search docs" input from the topnav. + document + .querySelector("[role='search'] input") + .addEventListener("focusin", () => { + const event = new CustomEvent("readthedocs-search-show"); + document.dispatchEvent(event); + }); +}); \ No newline at end of file diff --git a/python/html/sphinx/build/html/_static/language_data.js b/python/html/sphinx/build/html/_static/language_data.js new file mode 100644 index 00000000..250f5665 --- /dev/null +++ b/python/html/sphinx/build/html/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, is available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/python/html/sphinx/build/html/_static/minus.png b/python/html/sphinx/build/html/_static/minus.png new file mode 100644 index 00000000..d96755fd Binary files /dev/null and b/python/html/sphinx/build/html/_static/minus.png differ diff --git a/python/html/sphinx/build/html/_static/plus.png b/python/html/sphinx/build/html/_static/plus.png new file mode 100644 index 00000000..7107cec9 Binary files /dev/null and b/python/html/sphinx/build/html/_static/plus.png differ diff --git a/python/html/sphinx/build/html/_static/pygments.css b/python/html/sphinx/build/html/_static/pygments.css new file mode 100644 index 00000000..84ab3030 --- /dev/null +++ b/python/html/sphinx/build/html/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #008000; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #9C6500 } /* Comment.Preproc */ +.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #E40000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #008400 } /* Generic.Inserted */ +.highlight .go { color: #717171 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #008000 } /* Keyword.Pseudo */ +.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #B00040 } /* Keyword.Type */ +.highlight .m { color: #666666 } /* Literal.Number */ +.highlight .s { color: #BA2121 } /* Literal.String */ +.highlight .na { color: #687822 } /* Name.Attribute */ +.highlight .nb { color: #008000 } /* Name.Builtin */ +.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.highlight .no { color: #880000 } /* Name.Constant */ +.highlight .nd { color: #AA22FF } /* Name.Decorator */ +.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0000FF } /* Name.Function */ +.highlight .nl { color: #767600 } /* Name.Label */ +.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #19177C } /* Name.Variable */ +.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #666666 } /* Literal.Number.Bin */ +.highlight .mf { color: #666666 } /* Literal.Number.Float */ +.highlight .mh { color: #666666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666666 } /* Literal.Number.Oct */ +.highlight .sa { color: #BA2121 } /* Literal.String.Affix */ +.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ +.highlight .sc { color: #BA2121 } /* Literal.String.Char */ +.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ +.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ +.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #008000 } /* Literal.String.Other */ +.highlight .sr { color: #A45A77 } /* Literal.String.Regex */ +.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0000FF } /* Name.Function.Magic */ +.highlight .vc { color: #19177C } /* Name.Variable.Class */ +.highlight .vg { color: #19177C } /* Name.Variable.Global */ +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.highlight .vm { color: #19177C } /* Name.Variable.Magic */ +.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/python/html/sphinx/build/html/_static/searchtools.js b/python/html/sphinx/build/html/_static/searchtools.js new file mode 100644 index 00000000..97d56a74 --- /dev/null +++ b/python/html/sphinx/build/html/_static/searchtools.js @@ -0,0 +1,566 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = docUrlRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = docUrlRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/python/html/sphinx/build/html/_static/sphinx_highlight.js b/python/html/sphinx/build/html/_static/sphinx_highlight.js new file mode 100644 index 00000000..aae669d7 --- /dev/null +++ b/python/html/sphinx/build/html/_static/sphinx_highlight.js @@ -0,0 +1,144 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + parent.insertBefore( + span, + parent.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(SphinxHighlight.highlightSearchWords); +_ready(SphinxHighlight.initEscapeListener); diff --git a/python/html/sphinx/build/html/_static/underscore.js b/python/html/sphinx/build/html/_static/underscore.js new file mode 100644 index 00000000..709ae8e3 --- /dev/null +++ b/python/html/sphinx/build/html/_static/underscore.js @@ -0,0 +1,1707 @@ +// Underscore.js 1.9.1 +// http://underscorejs.org +// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +(function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` (`self`) in the browser, `global` + // on the server, or `this` in some virtual machines. We use `self` + // instead of `window` for `WebWorker` support. + var root = typeof self == 'object' && self.self === self && self || + typeof global == 'object' && global.global === global && global || + this || + {}; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype; + var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; + + // Create quick reference variables for speed access to core prototypes. + var push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create; + + // Naked function reference for surrogate-prototype-swapping. + var Ctor = function(){}; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for their old module API. If we're in + // the browser, add `_` as a global object. + // (`nodeType` is checked to ensure that `module` + // and `exports` are not HTML elements.) + if (typeof exports != 'undefined' && !exports.nodeType) { + if (typeof module != 'undefined' && !module.nodeType && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.9.1'; + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + var optimizeCb = function(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + // The 2-argument case is omitted because we’re not using it. + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + }; + + var builtinIteratee; + + // An internal function to generate callbacks that can be applied to each + // element in a collection, returning the desired result — either `identity`, + // an arbitrary callback, a property matcher, or a property accessor. + var cb = function(value, context, argCount) { + if (_.iteratee !== builtinIteratee) return _.iteratee(value, context); + if (value == null) return _.identity; + if (_.isFunction(value)) return optimizeCb(value, context, argCount); + if (_.isObject(value) && !_.isArray(value)) return _.matcher(value); + return _.property(value); + }; + + // External wrapper for our callback generator. Users may customize + // `_.iteratee` if they want additional predicate/iteratee shorthand styles. + // This abstraction hides the internal-only argCount argument. + _.iteratee = builtinIteratee = function(value, context) { + return cb(value, context, Infinity); + }; + + // Some functions take a variable number of arguments, or a few expected + // arguments at the beginning and then a variable number of values to operate + // on. This helper accumulates all remaining arguments past the function’s + // argument length (or an explicit `startIndex`), into an array that becomes + // the last argument. Similar to ES6’s "rest parameter". + var restArguments = function(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; + }; + + // An internal function for creating a new object that inherits from another. + var baseCreate = function(prototype) { + if (!_.isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + }; + + var shallowProperty = function(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + }; + + var has = function(obj, path) { + return obj != null && hasOwnProperty.call(obj, path); + } + + var deepGet = function(obj, path) { + var length = path.length; + for (var i = 0; i < length; i++) { + if (obj == null) return void 0; + obj = obj[path[i]]; + } + return length ? obj : void 0; + }; + + // Helper for collection methods to determine whether a collection + // should be iterated as an array or as an object. + // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + var getLength = shallowProperty('length'); + var isArrayLike = function(collection) { + var length = getLength(collection); + return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; + }; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + _.each = _.forEach = function(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var keys = _.keys(obj); + for (i = 0, length = keys.length; i < length; i++) { + iteratee(obj[keys[i]], keys[i], obj); + } + } + return obj; + }; + + // Return the results of applying the iteratee to each element. + _.map = _.collect = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Create a reducing function iterating left or right. + var createReduce = function(dir) { + // Wrap code that reassigns argument variables in a separate function than + // the one that accesses `arguments.length` to avoid a perf hit. (#1991) + var reducer = function(obj, iteratee, memo, initial) { + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + index = dir > 0 ? 0 : length - 1; + if (!initial) { + memo = obj[keys ? keys[index] : index]; + index += dir; + } + for (; index >= 0 && index < length; index += dir) { + var currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + }; + + return function(obj, iteratee, memo, context) { + var initial = arguments.length >= 3; + return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial); + }; + }; + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + _.reduce = _.foldl = _.inject = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + _.reduceRight = _.foldr = createReduce(-1); + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, predicate, context) { + var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey; + var key = keyFinder(obj, predicate, context); + if (key !== void 0 && key !== -1) return obj[key]; + }; + + // Return all the elements that pass a truth test. + // Aliased as `select`. + _.filter = _.select = function(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + _.each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, predicate, context) { + return _.filter(obj, _.negate(cb(predicate)), context); + }; + + // Determine whether all of the elements match a truth test. + // Aliased as `all`. + _.every = _.all = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + }; + + // Determine if at least one element in the object matches a truth test. + // Aliased as `any`. + _.some = _.any = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + }; + + // Determine if the array or object contains a given item (using `===`). + // Aliased as `includes` and `include`. + _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return _.indexOf(obj, item, fromIndex) >= 0; + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = restArguments(function(obj, path, args) { + var contextPath, func; + if (_.isFunction(path)) { + func = path; + } else if (_.isArray(path)) { + contextPath = path.slice(0, -1); + path = path[path.length - 1]; + } + return _.map(obj, function(context) { + var method = func; + if (!method) { + if (contextPath && contextPath.length) { + context = deepGet(context, contextPath); + } + if (context == null) return void 0; + method = context[path]; + } + return method == null ? method : method.apply(context, args); + }); + }); + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, _.property(key)); + }; + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + _.where = function(obj, attrs) { + return _.filter(obj, _.matcher(attrs)); + }; + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + _.findWhere = function(obj, attrs) { + return _.find(obj, _.matcher(attrs)); + }; + + // Return the maximum element (or element-based computation). + _.max = function(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value != null && value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(v, index, list) { + computed = iteratee(v, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = v; + lastComputed = computed; + } + }); + } + return result; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value != null && value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(v, index, list) { + computed = iteratee(v, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = v; + lastComputed = computed; + } + }); + } + return result; + }; + + // Shuffle a collection. + _.shuffle = function(obj) { + return _.sample(obj, Infinity); + }; + + // Sample **n** random values from a collection using the modern version of the + // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + _.sample = function(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + return obj[_.random(obj.length - 1)]; + } + var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj); + var length = getLength(sample); + n = Math.max(Math.min(n, length), 0); + var last = length - 1; + for (var index = 0; index < n; index++) { + var rand = _.random(index, last); + var temp = sample[index]; + sample[index] = sample[rand]; + sample[rand] = temp; + } + return sample.slice(0, n); + }; + + // Sort the object's values by a criterion produced by an iteratee. + _.sortBy = function(obj, iteratee, context) { + var index = 0; + iteratee = cb(iteratee, context); + return _.pluck(_.map(obj, function(value, key, list) { + return { + value: value, + index: index++, + criteria: iteratee(value, key, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + }; + + // An internal function used for aggregate "group by" operations. + var group = function(behavior, partition) { + return function(obj, iteratee, context) { + var result = partition ? [[], []] : {}; + iteratee = cb(iteratee, context); + _.each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + _.indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + _.countBy = group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; + }); + + var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; + // Safely create a real, live array from anything iterable. + _.toArray = function(obj) { + if (!obj) return []; + if (_.isArray(obj)) return slice.call(obj); + if (_.isString(obj)) { + // Keep surrogate pair characters together + return obj.match(reStrSymbol); + } + if (isArrayLike(obj)) return _.map(obj, _.identity); + return _.values(obj); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + if (obj == null) return 0; + return isArrayLike(obj) ? obj.length : _.keys(obj).length; + }; + + // Split a collection into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + _.partition = group(function(result, value, pass) { + result[pass ? 0 : 1].push(value); + }, true); + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head` and `take`. The **guard** check + // allows it to work with `_.map`. + _.first = _.head = _.take = function(array, n, guard) { + if (array == null || array.length < 1) return n == null ? void 0 : []; + if (n == null || guard) return array[0]; + return _.initial(array, array.length - n); + }; + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + _.initial = function(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + _.last = function(array, n, guard) { + if (array == null || array.length < 1) return n == null ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return _.rest(array, Math.max(0, array.length - n)); + }; + + // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. + // Especially useful on the arguments object. Passing an **n** will return + // the rest N values in the array. + _.rest = _.tail = _.drop = function(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, Boolean); + }; + + // Internal implementation of a recursive `flatten` function. + var flatten = function(input, shallow, strict, output) { + output = output || []; + var idx = output.length; + for (var i = 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { + // Flatten current level of array or arguments object. + if (shallow) { + var j = 0, len = value.length; + while (j < len) output[idx++] = value[j++]; + } else { + flatten(value, shallow, strict, output); + idx = output.length; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + }; + + // Flatten out an array, either recursively (by default), or just one level. + _.flatten = function(array, shallow) { + return flatten(array, shallow, false); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = restArguments(function(array, otherArrays) { + return _.difference(array, otherArrays); + }); + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // The faster algorithm will not work with an iteratee if the iteratee + // is not a one-to-one function, so providing an iteratee will disable + // the faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iteratee, context) { + if (!_.isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!_.contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!_.contains(result, value)) { + result.push(value); + } + } + return result; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = restArguments(function(arrays) { + return _.uniq(flatten(arrays, true, true)); + }); + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersection = function(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (_.contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!_.contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return _.filter(array, function(value){ + return !_.contains(rest, value); + }); + }); + + // Complement of _.zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices. + _.unzip = function(array) { + var length = array && _.max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = _.pluck(array, index); + } + return result; + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = restArguments(_.unzip); + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. Passing by pairs is the reverse of _.pairs. + _.object = function(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + }; + + // Generator function to create the findIndex and findLastIndex functions. + var createPredicateIndexFinder = function(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + }; + + // Returns the first index on an array-like that passes a predicate test. + _.findIndex = createPredicateIndexFinder(1); + _.findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + }; + + // Generator function to create the indexOf and lastIndexOf functions. + var createIndexFinder = function(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), _.isNaN); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + }; + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); + _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + }; + + // Chunk a single array into multiple arrays, each containing `count` or fewer + // items. + _.chunk = function(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; + }; + + // Function (ahem) Functions + // ------------------ + + // Determines whether to execute a function as a constructor + // or a normal function with the provided arguments. + var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (_.isObject(result)) return result; + return self; + }; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + _.bind = restArguments(function(func, context, args) { + if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); + var bound = restArguments(function(callArgs) { + return executeBound(func, bound, context, this, args.concat(callArgs)); + }); + return bound; + }); + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder by default, allowing any combination of arguments to be + // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument. + _.partial = restArguments(function(func, boundArgs) { + var placeholder = _.partial.placeholder; + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }); + + _.partial.placeholder = _; + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + _.bindAll = restArguments(function(obj, keys) { + keys = flatten(keys, false, false); + var index = keys.length; + if (index < 1) throw new Error('bindAll must be passed function names'); + while (index--) { + var key = keys[index]; + obj[key] = _.bind(obj[key], obj); + } + }); + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = restArguments(function(func, wait, args) { + return setTimeout(function() { + return func.apply(null, args); + }, wait); + }); + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = _.partial(_.delay, _, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var timeout, context, args, result; + var previous = 0; + if (!options) options = {}; + + var later = function() { + previous = options.leading === false ? 0 : _.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + + var throttled = function() { + var now = _.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + + throttled.cancel = function() { + clearTimeout(timeout); + previous = 0; + timeout = context = args = null; + }; + + return throttled; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, result; + + var later = function(context, args) { + timeout = null; + if (args) result = func.apply(context, args); + }; + + var debounced = restArguments(function(args) { + if (timeout) clearTimeout(timeout); + if (immediate) { + var callNow = !timeout; + timeout = setTimeout(later, wait); + if (callNow) result = func.apply(this, args); + } else { + timeout = _.delay(later, wait, this, args); + } + + return result; + }); + + debounced.cancel = function() { + clearTimeout(timeout); + timeout = null; + }; + + return debounced; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return _.partial(wrapper, func); + }; + + // Returns a negated version of the passed-in predicate. + _.negate = function(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + }; + + // Returns a function that will only be executed on and after the Nth call. + _.after = function(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + }; + + // Returns a function that will only be executed up to (but not including) the Nth call. + _.before = function(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = _.partial(_.before, 2); + + _.restArguments = restArguments; + + // Object Functions + // ---------------- + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + var collectNonEnumProps = function(obj, keys) { + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = _.isFunction(constructor) && constructor.prototype || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { + keys.push(prop); + } + } + }; + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys`. + _.keys = function(obj) { + if (!_.isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve all the property names of an object. + _.allKeys = function(obj) { + if (!_.isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[keys[i]]; + } + return values; + }; + + // Returns the results of applying the iteratee to each element of the object. + // In contrast to _.map it returns an object. + _.mapObject = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = _.keys(obj), + length = keys.length, + results = {}; + for (var index = 0; index < length; index++) { + var currentKey = keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Convert an object into a list of `[key, value]` pairs. + // The opposite of _.object. + _.pairs = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [keys[i], obj[keys[i]]]; + } + return pairs; + }; + + // Invert the keys and values of an object. The values must be serializable. + _.invert = function(obj) { + var result = {}; + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + result[obj[keys[i]]] = keys[i]; + } + return result; + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods`. + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // An internal function for creating assigner functions. + var createAssigner = function(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = createAssigner(_.allKeys); + + // Assigns a given object with all the own properties in the passed-in object(s). + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + _.extendOwn = _.assign = createAssigner(_.keys); + + // Returns the first key on an object that passes a predicate test. + _.findKey = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = _.keys(obj), key; + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + }; + + // Internal pick helper function to determine if `obj` has key `key`. + var keyInObj = function(value, key, obj) { + return key in obj; + }; + + // Return a copy of the object only containing the whitelisted properties. + _.pick = restArguments(function(obj, keys) { + var result = {}, iteratee = keys[0]; + if (obj == null) return result; + if (_.isFunction(iteratee)) { + if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); + keys = _.allKeys(obj); + } else { + iteratee = keyInObj; + keys = flatten(keys, false, false); + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }); + + // Return a copy of the object without the blacklisted properties. + _.omit = restArguments(function(obj, keys) { + var iteratee = keys[0], context; + if (_.isFunction(iteratee)) { + iteratee = _.negate(iteratee); + if (keys.length > 1) context = keys[1]; + } else { + keys = _.map(flatten(keys, false, false), String); + iteratee = function(value, key) { + return !_.contains(keys, key); + }; + } + return _.pick(obj, iteratee, context); + }); + + // Fill in a given object with default properties. + _.defaults = createAssigner(_.allKeys, true); + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + _.create = function(prototype, props) { + var result = baseCreate(prototype); + if (props) _.extendOwn(result, props); + return result; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Returns whether an object has a given set of `key:value` pairs. + _.isMatch = function(object, attrs) { + var keys = _.keys(attrs), length = keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + }; + + + // Internal recursive comparison function for `isEqual`. + var eq, deepEq; + eq = function(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); + }; + + // Internal recursive comparison function for `isEqual`. + deepEq = function(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + switch (className) { + // Strings, numbers, regular expressions, dates, and booleans are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + } + + var areArrays = className === '[object Array]'; + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && + _.isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var keys = _.keys(a), key; + length = keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (_.keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (obj == null) return true; + if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; + return _.keys(obj).length === 0; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType === 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) === '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + }; + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet. + _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) { + _['is' + name] = function(obj) { + return toString.call(obj) === '[object ' + name + ']'; + }; + }); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return has(obj, 'callee'); + }; + } + + // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, + // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). + var nodelist = root.document && root.document.childNodes; + if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') { + _.isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + // Is a given object a finite number? + _.isFinite = function(obj) { + return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj)); + }; + + // Is the given value `NaN`? + _.isNaN = function(obj) { + return _.isNumber(obj) && isNaN(obj); + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + _.has = function(obj, path) { + if (!_.isArray(path)) { + return has(obj, path); + } + var length = path.length; + for (var i = 0; i < length; i++) { + var key = path[i]; + if (obj == null || !hasOwnProperty.call(obj, key)) { + return false; + } + obj = obj[key]; + } + return !!length; + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iteratees. + _.identity = function(value) { + return value; + }; + + // Predicate-generating functions. Often useful outside of Underscore. + _.constant = function(value) { + return function() { + return value; + }; + }; + + _.noop = function(){}; + + // Creates a function that, when passed an object, will traverse that object’s + // properties down the given `path`, specified as an array of keys or indexes. + _.property = function(path) { + if (!_.isArray(path)) { + return shallowProperty(path); + } + return function(obj) { + return deepGet(obj, path); + }; + }; + + // Generates a function for a given object that returns a given property. + _.propertyOf = function(obj) { + if (obj == null) { + return function(){}; + } + return function(path) { + return !_.isArray(path) ? obj[path] : deepGet(obj, path); + }; + }; + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + _.matcher = _.matches = function(attrs) { + attrs = _.extendOwn({}, attrs); + return function(obj) { + return _.isMatch(obj, attrs); + }; + }; + + // Run a function **n** times. + _.times = function(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + }; + + // Return a random integer between min and max (inclusive). + _.random = function(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + }; + + // A (possibly faster) way to get the current timestamp as an integer. + _.now = Date.now || function() { + return new Date().getTime(); + }; + + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + var unescapeMap = _.invert(escapeMap); + + // Functions for escaping and unescaping strings to/from HTML interpolation. + var createEscaper = function(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped. + var source = '(?:' + _.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; + _.escape = createEscaper(escapeMap); + _.unescape = createEscaper(unescapeMap); + + // Traverses the children of `obj` along `path`. If a child is a function, it + // is invoked with its parent as context. Returns the value of the final + // child, or `fallback` if any child is undefined. + _.result = function(obj, path, fallback) { + if (!_.isArray(path)) path = [path]; + var length = path.length; + if (!length) { + return _.isFunction(fallback) ? fallback.call(obj) : fallback; + } + for (var i = 0; i < length; i++) { + var prop = obj == null ? void 0 : obj[path[i]]; + if (prop === void 0) { + prop = fallback; + i = length; // Ensure we don't continue iterating. + } + obj = _.isFunction(prop) ? prop.call(obj) : prop; + } + return obj; + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate: /<%([\s\S]+?)%>/g, + interpolate: /<%=([\s\S]+?)%>/g, + escape: /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g; + + var escapeChar = function(match) { + return '\\' + escapes[match]; + }; + + // In order to prevent third-party code injection through + // `_.templateSettings.variable`, we test it against the following regular + // expression. It is intentionally a bit more liberal than just matching valid + // identifiers, but still prevents possible loopholes through defaults or + // destructuring assignment. + var bareIdentifier = /^\s*(\w|\$)+\s*$/; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + _.template = function(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escapeRegExp, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offset. + return match; + }); + source += "';\n"; + + var argument = settings.variable; + if (argument) { + // Insure against third-party code injection. + if (!bareIdentifier.test(argument)) throw new Error( + 'variable is not a bare identifier: ' + argument + ); + } else { + // If a variable is not specified, place data values in local scope. + source = 'with(obj||{}){\n' + source + '}\n'; + argument = 'obj'; + } + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + var render; + try { + render = new Function(argument, '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled source as a convenience for precompilation. + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + }; + + // Add a "chain" function. Start chaining a wrapped Underscore object. + _.chain = function(obj) { + var instance = _(obj); + instance._chain = true; + return instance; + }; + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + var chainResult = function(instance, obj) { + return instance._chain ? _(obj).chain() : obj; + }; + + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + _.each(_.functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; + return chainResult(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + _.each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return chainResult(this, method.apply(this._wrapped, arguments)); + }; + }); + + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxy for some methods used in engine operations + // such as arithmetic and JSON stringification. + _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; + + _.prototype.toString = function() { + return String(this._wrapped); + }; + + // AMD registration happens at the end for compatibility with AMD loaders + // that may not enforce next-turn semantics on modules. Even though general + // practice for AMD registration is to be anonymous, underscore registers + // as a named module because, like jQuery, it is a base library that is + // popular enough to be bundled in a third party lib, but not be part of + // an AMD load request. Those cases could generate an error when an + // anonymous define() is called outside of a loader request. + if (typeof define == 'function' && define.amd) { + define('underscore', [], function() { + return _; + }); + } +}()); diff --git a/python/html/sphinx/build/html/examples.html b/python/html/sphinx/build/html/examples.html new file mode 100644 index 00000000..fab4f2ce --- /dev/null +++ b/python/html/sphinx/build/html/examples.html @@ -0,0 +1,171 @@ + + + + + + + + + libm2k Examples — libm2k v0.9.0 documentation + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    libm2k Examplesïƒ

    +

    Generating data using the ADALM2000 DAC and acquiring it using the ADALM2000 ADC

    +
    # This example assumes the following connections:
    +# W1 -> 1+
    +# W2 -> 2+
    +# GND -> 1-
    +# GND -> 2-
    +#
    +# The application will generate a sine and triangular wave on W1 and W2. The signal is fed back into the analog input
    +# and the voltage values are displayed on the screen
    +
    +import libm2k
    +import matplotlib.pyplot as plt
    +import time
    +import numpy as np
    +
    +ctx=libm2k.m2kOpen()
    +if ctx is None:
    +      print("Connection Error: No ADALM2000 device available/connected to your PC.")
    +      exit(1)
    +
    +ctx.calibrateADC()
    +ctx.calibrateDAC()
    +
    +ain=ctx.getAnalogIn()
    +aout=ctx.getAnalogOut()
    +trig=ain.getTrigger()
    +
    +ain.enableChannel(0,True)
    +ain.enableChannel(1,True)
    +ain.setSampleRate(100000)
    +ain.setRange(0,-10,10)
    +
    +### uncomment the following block to enable triggering
    +#trig.setAnalogSource(0) # Channel 0 as source
    +#trig.setAnalogCondition(0,libm2k.RISING_EDGE_ANALOG)
    +#trig.setAnalogLevel(0,0.5)  # Set trigger level at 0.5
    +#trig.setAnalogDelay(0) # Trigger is centered
    +#trig.setAnalogMode(1, libm2k.ANALOG)
    +
    +aout.setSampleRate(0, 750000)
    +aout.setSampleRate(1, 750000)
    +aout.enableChannel(0, True)
    +aout.enableChannel(1, True)
    +
    +x=np.linspace(-np.pi,np.pi,1024)
    +buffer1=np.linspace(-2.0,2.00,1024)
    +buffer2=np.sin(x)
    +
    +buffer = [buffer1, buffer2]
    +
    +aout.setCyclic(True)
    +aout.push(buffer)
    +
    +for i in range(10): # gets 10 triggered samples then quits
    +    data = ain.getSamples(1000)
    +    plt.plot(data[0])
    +    plt.plot(data[1])
    +    plt.show()
    +    time.sleep(0.1)
    +
    +libm2k.contextClose(ctx)
    +
    +
    +

    Other Python examples are available in the source repository

    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/python/html/sphinx/build/html/genindex.html b/python/html/sphinx/build/html/genindex.html new file mode 100644 index 00000000..783d1a8c --- /dev/null +++ b/python/html/sphinx/build/html/genindex.html @@ -0,0 +1,2271 @@ + + + + + + + + Index — libm2k v0.9.0 documentation + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    +
      +
    • + +
    • +
    • +
    +
    +
    +
    +
    + + +

    Index

    + +
    + A + | B + | C + | D + | E + | F + | G + | H + | I + | K + | L + | M + | N + | P + | R + | S + | T + | U + | V + | W + +
    +

    A

    + + + +
    + +

    B

    + + + +
    + +

    C

    + + + +
    + +

    D

    + + + +
    + +

    E

    + + + +
    + +

    F

    + + +
    + +

    G

    + + + +
    + +

    H

    + + + +
    + +

    I

    + + + +
    + +

    K

    + + +
    + +

    L

    + + + +
    + +

    M

    + + + +
    + +

    N

    + + + +
    + +

    P

    + + + +
    + +

    R

    + + + +
    + +

    S

    + + + +
    + +

    T

    + + + +
    + +

    U

    + + + +
    + +

    V

    + + + +
    + +

    W

    + + +
    + + + +
    +
    +
    + +
    + +
    +

    © Copyright 2020, Analog Devices Inc..

    +
    + + Built with Sphinx using a + theme + provided by Read the Docs. + + +
    +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/python/html/sphinx/build/html/index.html b/python/html/sphinx/build/html/index.html new file mode 100644 index 00000000..ca5d01ed --- /dev/null +++ b/python/html/sphinx/build/html/index.html @@ -0,0 +1,203 @@ + + + + + + + + + libm2k documentation - Library for interfacing with the ADALM2000 — libm2k v0.9.0 documentation + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    +
      +
    • + +
    • + View page source +
    • +
    +
    +
    + + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/python/html/sphinx/build/html/libm2k.html b/python/html/sphinx/build/html/libm2k.html new file mode 100644 index 00000000..e819012e --- /dev/null +++ b/python/html/sphinx/build/html/libm2k.html @@ -0,0 +1,7919 @@ + + + + + + + + + libm2k Module — libm2k v0.9.0 documentation + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    libm2k Moduleïƒ

    +
    +
    +libm2k.ALWAYS = 0ïƒ
    +

    ALWAYS - Disable analog trigger;

    +
    + +
    +
    +libm2k.ANALOG = 1ïƒ
    +

    ANALOG - Trigger condition specified only by analog trigger (CH1 and CH2)

    +
    + +
    +
    +class libm2k.CALIBRATION_PARAMETERSïƒ
    +

    Bases: object

    +

    Calibration parameters of m2k

    +
    +
    +property adc_gain_ch_1ïƒ
    +

    ADC calibration gain - channel 1

    +
    + +
    +
    +property adc_gain_ch_2ïƒ
    +

    ADC calibration gain - channel 2

    +
    + +
    +
    +property adc_offset_ch_1ïƒ
    +

    ADC calibration offset - channel 1

    +
    + +
    +
    +property adc_offset_ch_2ïƒ
    +

    ADC calibration offset - channel 2

    +
    + +
    +
    +property dac_a_gainïƒ
    +

    DAC calibration gain - channel 1

    +
    + +
    +
    +property dac_a_offsetïƒ
    +

    DAC calibration offset - channel 1

    +
    + +
    +
    +property dac_b_gainïƒ
    +

    DAC calibration gain - channel 2

    +
    + +
    +
    +property dac_b_offsetïƒ
    +

    DAC calibration offset - channel 2

    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +libm2k.CHANNEL_1 = 0ïƒ
    +

    CHANNEL_1 - trigger events on analog CHANNEL_1 trigger the AnalogIn interface

    +
    + +
    +
    +libm2k.CHANNEL_2 = 1ïƒ
    +

    CHANNEL_2 - trigger events on analog CHANNEL_2 trigger the AnalogIn interface

    +
    + +
    +
    +class libm2k.CONTEXT_INFOïƒ
    +

    Bases: object

    +

    Additional information about the context

    +
    +
    +property id_productïƒ
    +

    Product ID extracted from IIO context

    +
    + +
    +
    +property id_vendorïƒ
    +

    Vendor ID extracted from IIO context

    +
    + +
    +
    +property manufacturerïƒ
    +

    Manufacturer extracted from IIO context

    +
    + +
    +
    +property productïƒ
    +

    Product name extracted from IIO context

    +
    + +
    +
    +property serialïƒ
    +

    Serial number

    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    +
    +property uriïƒ
    +

    IIO context URI

    +
    + +
    + +
    +
    +class libm2k.Context(*args, **kwargs)ïƒ
    +

    Bases: object

    +
    +
    +deinitialize()ïƒ
    +
    + +
    +
    +getAllDevices()ïƒ
    +

    Retrieve all the available devices +:rtype: std::unordered_set< std::string > +:return: a list of strings containing all the devices

    +
    + +
    +
    +getAllDmm()ïƒ
    +

    Retrieve all the DMM objects +:rtype: std::vector< libm2k::analog::DMM *,std::allocator< libm2k::analog::DMM * > > +:return: A list of DMM objects

    +
    + +
    +
    +getAvailableContextAttributes()ïƒ
    +

    Retrieve all the available context attributes +:rtype: std::vector< std::string,std::allocator< std::string > > +:return: A list of strings containing all the context attributes

    +
    + +
    +
    +getContextAttributeValue(attr)ïƒ
    +

    Retrieve the value of one context attribute +:type attr: string +:param attr: The name of the required attribute +:rtype: string +:return: On success, return a string containing the value of the attribute +:raises: On error, throw an exception if the attribute is not found

    +
    + +
    +
    +getContextDescription()ïƒ
    +

    Retrieve a detailed context description +:rtype: string +:return: string containing the current context description

    +
    + +
    +
    +getDMM(*args)ïƒ
    +

    Overload 1:

    +

    Retrieve the DMM object at a certain index +:type index: int +:param index: The index corresponding to the DMM +:rtype: DMM +:return: On success, a pointer to a DMM object +:rtype: DMM +:return: On error, nullptr is returned

    +
    +

    +
    +

    Overload 2:

    +

    Retrieve the DMM object which has the provided name +:type name: string +:param name: The name corresponding to the DMM +:rtype: DMM +:return: On success, a pointer to a DMM object +:rtype: DMM +:return: On error, nullptr is returned

    +
    + +
    +
    +getDmmCount()ïƒ
    +

    Retrieve the number of DMM objects +:rtype: int +:return: an unsigned int representing the number of DMM objects in the context

    +
    + +
    +
    +getFirmwareVersion()ïƒ
    +

    Retrieve the firmware version of the current context +:rtype: string +:return: a string containing the firmware version

    +
    + +
    +
    +getIioContext()ïƒ
    +

    Retrieve the iio context +:rtype: iio_context +:return: A pointer to the iio context

    +
    + +
    +
    +getIioContextVersion()ïƒ
    +

    Get the version of the backend in use +:rtype: IIO_CONTEXT_VERSION +:return: IIO_CONTEXT_VERSION struct

    +
    + +
    +
    +getSerialNumber()ïƒ
    +

    Retrieve the current context serial number +:rtype: string +:return: string containing the current context serial number

    +
    + +
    +
    +getUri()ïƒ
    +

    Get the URI of the current context +:rtype: string +:return: string containing the context URI (ex: “usb:1.2.3â€, “ip:192.168.2.1â€)

    +
    + +
    +
    +logAllAttributes()ïƒ
    +

    Log all the attributes +Notes: The logging system should be enabled

    +
    + +
    +
    +reset()ïƒ
    +
    + +
    +
    +setTimeout(timeout)ïƒ
    +

    Set a timeout for I/O operations +:type timeout: int +:param timeout: A positive integer representing the time in milliseconds after which a timeout occurs. A value of 0 is used to specify that no timeout should occur.

    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    +
    +toGeneric()ïƒ
    +

    Convert the current context to Generic context, if possible +:rtype: Generic +:return: On success, return the corresponding Generic object +:rtype: Generic +:return: On error, return a nullptr

    +
    + +
    +
    +toM2k()ïƒ
    +

    Convert the current context to M2k context, if possible +:rtype: M2k +:return: On success, return the corresponding M2k object +:rtype: M2k +:return: On error, return a nullptr

    +
    + +
    + +
    +
    +class libm2k.ContextBuilderïƒ
    +

    Bases: object

    +
    +
    +static contextClose(arg1, deinit=True)ïƒ
    +
    + +
    +
    +static contextCloseAll()ïƒ
    +
    + +
    +
    +static contextOpen(*args)ïƒ
    +

    Overload 1:

    +
    +

    +
    +

    Overload 2:

    +
    +

    +
    +

    Overload 3:

    +
    + +
    +
    +static enableLogging(enable)ïƒ
    +
    + +
    +
    +static getAllContexts()ïƒ
    +
    + +
    +
    +static getContextsInfo()ïƒ
    +
    + +
    +
    +static getVersion()ïƒ
    +
    + +
    +
    +static m2kOpen(*args)ïƒ
    +

    Overload 1:

    +
    +

    +
    +

    Overload 2:

    +
    +

    +
    +

    Overload 3:

    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +libm2k.ContextBuilder_contextClose(arg1, deinit=True)ïƒ
    +
    + +
    +
    +libm2k.ContextBuilder_contextCloseAll()ïƒ
    +
    + +
    +
    +libm2k.ContextBuilder_contextOpen(*args)ïƒ
    +

    Overload 1:

    +
    +

    +
    +

    Overload 2:

    +
    +

    +
    +

    Overload 3:

    +
    + +
    +
    +libm2k.ContextBuilder_enableLogging(enable)ïƒ
    +
    + +
    +
    +libm2k.ContextBuilder_getAllContexts()ïƒ
    +
    + +
    +
    +libm2k.ContextBuilder_getContextsInfo()ïƒ
    +
    + +
    +
    +libm2k.ContextBuilder_getVersion()ïƒ
    +
    + +
    +
    +libm2k.ContextBuilder_m2kOpen(*args)ïƒ
    +

    Overload 1:

    +
    +

    +
    +

    Overload 2:

    +
    +

    +
    +

    Overload 3:

    +
    + +
    +
    +class libm2k.DMM(*args, **kwargs)ïƒ
    +

    Bases: object

    +
    +
    +getAllChannels()ïƒ
    +

    Retrieve all channels

    +
    +
    Return type:
    +

    std::vector< std::string,std::allocator< std::string > >

    +
    +
    Returns:
    +

    A list containing the name of all channels

    +
    +
    +
    + +
    +
    +getName()ïƒ
    +

    Retrieve the device’s name

    +
    +
    Return type:
    +

    string

    +
    +
    Returns:
    +

    The name of the device

    +
    +
    +
    + +
    +
    +readAll()ïƒ
    +

    Retrieve additional information about all channels

    +
    +
    Return type:
    +

    std::vector< libm2k::analog::DMM_READING,std::allocator< libm2k::analog::DMM_READING > >

    +
    +
    Returns:
    +

    A list containing structures for each channel

    +
    +
    +
    + +
    +
    +readChannel(*args)ïƒ
    +

    Overload 1:

    +

    Retrieve additional information about the given channel

    +
    +
    Parameters:
    +

    index (int) – The index corresponding to the channel

    +
    +
    Return type:
    +

    DMM_READING

    +
    +
    Returns:
    +

    A structure containing additional information

    +
    +
    +
    +

    +
    +

    Overload 2:

    +

    Retrieve additional information about the given channel

    +
    +
    Parameters:
    +

    chn_name (string) – The name corresponding to the channel

    +
    +
    Return type:
    +

    DMM_READING

    +
    +
    Returns:
    +

    A structure containing additional information

    +
    +
    +
    + +
    +
    +reset()ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.DMMReading(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.DMM_READINGïƒ
    +

    Bases: object

    +

    The structure of a DMM

    +
    +
    +property idïƒ
    +

    Channel’s id

    +
    + +
    +
    +property nameïƒ
    +

    The name of the channel

    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    +
    +property unit_nameïƒ
    +

    Unit of measurement

    +
    + +
    +
    +property unit_symbolïƒ
    +

    Unit symbol

    +
    + +
    +
    +property valueïƒ
    +

    The measured value

    +
    + +
    + +
    +
    +class libm2k.DMMs(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +libm2k.EXTERNAL = 2ïƒ
    +

    EXTERNAL - Trigger condition specified only by external trigger (TI)

    +
    + +
    +
    +class libm2k.FMCOMMSïƒ
    +

    Bases: object

    +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.Generic(*args, **kwargs)ïƒ
    +

    Bases: Context

    +
    +
    +getAnalogIn(*args)ïƒ
    +
    + +
    +
    +getAnalogInCount()ïƒ
    +
    + +
    +
    +getAnalogOut(*args)ïƒ
    +
    + +
    +
    +getAnalogOutCount()ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.GenericAnalogIn(*args, **kwargs)ïƒ
    +

    Bases: object

    +
    +
    +enableChannel(index, enable)ïƒ
    +
    + +
    +
    +getAvailableSampleRates(*args)ïƒ
    +
    + +
    +
    +getDeviceName()ïƒ
    +
    + +
    +
    +getIioObjects()ïƒ
    +
    + +
    +
    +getMaximumSamplerate(*args)ïƒ
    +
    + +
    +
    +getNbChannels()ïƒ
    +
    + +
    +
    +getSampleRate(*args)ïƒ
    +
    + +
    +
    +getSamplesInterleaved(nb_samples)ïƒ
    +
    + +
    +
    +getSamplesRawInterleaved(nb_samples)ïƒ
    +
    + +
    +
    +setKernelBuffersCount(count)ïƒ
    +
    + +
    +
    +setSampleRate(*args)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.GenericAnalogOut(*args, **kwargs)ïƒ
    +

    Bases: object

    +
    +
    +enableChannel(chnIdx, enable)ïƒ
    +
    + +
    +
    +getAvailableSampleRates()ïƒ
    +
    + +
    +
    +getCyclic(chn)ïƒ
    +
    + +
    +
    +getName()ïƒ
    +
    + +
    +
    +getSampleRate(*args)ïƒ
    +
    + +
    +
    +isChannelEnabled(chnIdx)ïƒ
    +
    + +
    +
    +push(*args)ïƒ
    +
    + +
    +
    +pushRaw(*args)ïƒ
    +
    + +
    +
    +setCyclic(*args)ïƒ
    +
    + +
    +
    +setSampleRate(*args)ïƒ
    +
    + +
    +
    +stop()ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.IIO_CONTEXT_VERSIONïƒ
    +

    Bases: object

    +

    The version of the backend

    +
    +
    +property git_tagïƒ
    +

    git tag

    +
    + +
    +
    +property majorïƒ
    +

    major version

    +
    + +
    +
    +property minorïƒ
    +

    minor version

    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.IIO_OBJECTSïƒ
    +

    Bases: object

    +
    +
    +property buffers_rxïƒ
    +
    + +
    +
    +property buffers_txïƒ
    +
    + +
    +
    +property channels_inïƒ
    +
    + +
    +
    +property channels_outïƒ
    +
    + +
    +
    +property contextïƒ
    +
    + +
    +
    +property devicesïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.IioBuffers(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.IioChannels(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.IioDevices(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.M2k(*args, **kwargs)ïƒ
    +

    Bases: Context

    +
    +
    +calibrate()ïƒ
    +
    + +
    +
    +calibrateADC()ïƒ
    +

    Calibrate the ADC

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    On succces, true

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    Otherwise, false

    +
    +
    +
    + +
    +
    +calibrateDAC()ïƒ
    +

    Calibrate the DAC

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    On succces, true

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    Otherwise, false

    +
    +
    +
    + +
    +
    +calibrateFromContext()ïƒ
    +

    Calibrate both ADC and DACs using predefined calibration values located in context +:rtype: float +:return: The closest temperature found in the lookup table

    +

    Notes: Only available from firmware v0.26.

    +
    + +
    +
    +deinitialize()ïƒ
    +
    + +
    +
    +getAdcCalibrationGain(chn)ïƒ
    +

    Get the calibration gain of the ADC

    +
    +
    Parameters:
    +

    chn (int) – The index corresponding to a channel

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The value of the calibration gain

    +
    +
    +
    + +
    +
    +getAdcCalibrationOffset(chn)ïƒ
    +

    Get the calibration offset of the ADC

    +
    +
    Parameters:
    +

    chn (int) – The index corresponding to a channel

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    The value of the calibration offset

    +
    +
    +
    + +
    +
    +getAllAnalogIn()ïƒ
    +
    + +
    +
    +getAllAnalogOut()ïƒ
    +
    + +
    +
    +getAnalogIn(*args)ïƒ
    +

    Overload 1:

    +

    Retrieve the AnalogIn object

    +
    +
    Return type:
    +

    M2kAnalogIn

    +
    +
    Returns:
    +

    On success, a pointer to an AnalogIn object

    +
    +
    Return type:
    +

    M2kAnalogIn

    +
    +
    Returns:
    +

    On error, null is returned

    +
    +
    +
    +

    +
    +

    Overload 2:

    +

    Retrieve the AnalogIn object of a device

    +
    +
    Parameters:
    +

    dev_name (string) – The name corresponding to a device

    +
    +
    Return type:
    +

    M2kAnalogIn

    +
    +
    Returns:
    +

    On success, a pointer to an AnalogIn object

    +
    +
    Return type:
    +

    M2kAnalogIn

    +
    +
    Returns:
    +

    If the name does not correspond to any device, null is returned

    +
    +
    +
    + +
    +
    +getAnalogOut()ïƒ
    +

    Retrieve the AnalogOut object

    +
    +
    Return type:
    +

    M2kAnalogOut

    +
    +
    Returns:
    +

    On success, a pointer to an AnalogOut object

    +
    +
    Return type:
    +

    M2kAnalogOut

    +
    +
    Returns:
    +

    On error, null is returned

    +
    +
    +
    + +
    +
    +getDacCalibrationGain(chn)ïƒ
    +

    Get the calibration gain of the DAC

    +
    +
    Parameters:
    +

    chn (int) – The index corresponding to a channel

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The value of the calibration gain

    +
    +
    +
    + +
    +
    +getDacCalibrationOffset(chn)ïƒ
    +

    Get the calibration offset of the DAC

    +
    +
    Parameters:
    +

    chn (int) – The index corresponding to a channel

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    The value of the calibration offset

    +
    +
    +
    + +
    +
    +getDigital()ïƒ
    +

    Retrieve the Digital object

    +
    +
    Return type:
    +

    M2kDigital

    +
    +
    Returns:
    +

    On success, a pointer to a Digital object

    +
    +
    Raises:
    +

    EXC_INVALID_PARAMETER No M2K digital device found

    +
    +
    +
    + +
    +
    +getLUT()ïƒ
    +

    Retrieve the predefined calibration parameter +:rtype: std::map< double,std::shared_ptr< libm2k::CALIBRATION_PARAMETERS >,std::less< double >,std::allocator< std::pair< double const,std::shared_ptr< libm2k::CALIBRATION_PARAMETERS > > > > +:return: Map <temperature, parameters>

    +
    + +
    +
    +getLed()ïƒ
    +

    Retrieve the state of the led

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    If the led is turned on, true

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    Otherwise, false

    +
    +
    +
    + +
    +
    +getPowerSupply()ïƒ
    +

    Retrieve the PowerSupply object

    +
    +
    Return type:
    +

    M2kPowerSupply

    +
    +
    Returns:
    +

    On success, a pointer to a PowerSupply object

    +
    +
    Raises:
    +

    EXC_INVALID_PARAMETER No M2K power supply

    +
    +
    +
    + +
    +
    +hasContextCalibration()ïƒ
    +

    Check if the calibration based on temperature can be performed +:rtype: boolean +:return: True if the calibration parameters are available, False otherwise

    +
    + +
    +
    +hasMixedSignal()ïƒ
    +

    Check if the mixed signal acquisition is available on the current firmware version +:rtype: boolean +:return: True if the mixed signal acquisition is available, false otherwise

    +
    + +
    +
    +isCalibrated()ïƒ
    +

    Check if the board was calibrated +:rtype: boolean +:return: True if the board was calibrated, False otherwise

    +
    + +
    +
    +reset()ïƒ
    +
    +
    Reset the M2K device to default settings:
      +
    • Reset calibration coefficients

    • +
    • Maximum samplerates

    • +
    • Set oversampling ratio to 1

    • +
    • Set AnalogIn range to low range

    • +
    • Set kernel buffers count to 4 (analog/digital and in/out devices)

    • +
    • Disable all TX digital channels and enable all RX digital channels

    • +
    +
    +
    +

    Notes: A calibration is needed afterwards

    +
    + +
    +
    +resetCalibration()ïƒ
    +
    + +
    +
    +setAdcCalibrationGain(chn, gain)ïƒ
    +

    Set the calibration gain of the ADC +:type chn: int +:param chn: The index corresponding to a channel +:type gain: float +:param gain: The calibration gain value +Notes: Overrides the calibration coefficients.

    +

    Can be reset by running a calibration.

    +

    The gain value is currently limited at the (-2,2) range by the hardware.

    +
    + +
    +
    +setAdcCalibrationOffset(chn, offset)ïƒ
    +

    Set the calibration offset of the ADC +:type chn: int +:param chn: The index corresponding to a channel +:type offset: int +:param offset: The calibration offset value +Notes: Overrides the calibration coefficients.

    +

    Can be reset by running a calibration.

    +
    + +
    +
    +setDacCalibrationGain(chn, gain)ïƒ
    +

    Set the calibration gain of the DAC +:type chn: int +:param chn: The index corresponding to a channel +:type gain: float +:param gain: The calibration gain value +Notes: Overrides the calibration coefficients.

    +

    Can be reset by running a calibration.

    +

    The gain value is currently limited at the (-2,2) range by the hardware.

    +
    + +
    +
    +setDacCalibrationOffset(chn, offset)ïƒ
    +

    Set the calibration offset of the DAC +:type chn: int +:param chn: The index corresponding to a channel +:type offset: int +:param offset: The calibration offset value +Notes: Overrides the calibration coefficients.

    +

    Can be reset by running a calibration.

    +
    + +
    +
    +setLed(on)ïƒ
    +

    Turn on or off the board’s led

    +
    +
    Parameters:
    +

    on (boolean) – A boolean value corresponding to the state of the led

    +
    +
    +

    Notes: For turning on the led, set the parameter true.

    +
    + +
    +
    +startMixedSignalAcquisition(nb_samples)ïƒ
    +

    Initiate the mixed acquisition +:type nb_samples: int +:param nb_samples: The number of samples that will be retrieved

    +

    Notes: Only available from firmware v0.26.

    +
    + +
    +
    +stopMixedSignalAcquisition()ïƒ
    +

    Stop the mixed acquisition

    +

    Notes: Only available from firmware v0.26.

    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.M2kAnalogIn(*args, **kwargs)ïƒ
    +

    Bases: object

    +
    +
    +cancelAcquisition()ïƒ
    +

    Cancel all buffer operations +Notes: Should be used to cancel an ongoing acquisition

    +
    + +
    +
    +convertRawToVolts(channel, raw)ïƒ
    +

    Convert the raw value of a sample into volts +:type raw: int +:param raw:: the raw value of a sample; +:type channel: int +:param channel:: The index corresponding to the channel; +:rtype: float +:return: The value of a sample converted into volts;

    +
    + +
    +
    +convertVoltsToRaw(channel, voltage)ïƒ
    +

    Convert the voltage value of a sample into raw

    +
    +
    Parameters:
    +
      +
    • voltage (float) – The voltage value of a sample;

    • +
    • channel (int) – The index corresponding to the channel;

    • +
    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    The value of a sample converted into raw;

    +
    +
    +
    + +
    +
    +enableChannel(chnIdx, enable)ïƒ
    +

    Enable or disable the given channel

    +
    +
    Parameters:
    +
      +
    • chnIdx (int) – The index corresponding to the channel

    • +
    • enable (boolean) – A boolean value corresponding to the channel’s state

    • +
    +
    +
    +
    + +
    +
    +getAvailableRanges()ïƒ
    +

    Retrieve all ranges that are available

    +
    +
    Return type:
    +

    std::vector< std::pair< std::string,std::pair< double,double > >,std::allocator< std::pair< std::string,std::pair< double,double > > > >

    +
    +
    Returns:
    +

    A list of pairs containing all available ranges and their name

    +
    +
    +
    + +
    +
    +getAvailableSampleRates()ïƒ
    +
    +
    Return type:
    +

    std::vector< double,std::allocator< double > >

    +
    +
    Returns:
    +

    The list of available samplerates for this device

    +
    +
    +
    + +
    +
    +getChannelName(channel)ïƒ
    +

    Get the channel name for each ADC channel +:type channel: int +:param channel: - unsigned int representing the index of the channel +:rtype: string +:return: std::string - name of the channel

    +
    + +
    +
    +getFilterCompensation(samplerate)ïƒ
    +

    Retrieve the filter compensation for the given sample rate

    +
    +
    Parameters:
    +

    samplerate (float) – A double value representing the sample rate

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The value of the filter compensation

    +
    +
    +
    + +
    +
    +getHysteresisRange(chn)ïƒ
    +

    Retrieve the bounds of the analogical trigger’s hysteresis for the given channel

    +
    +
    Parameters:
    +

    chn (int) – An enumerator corresponding to the channel’s index

    +
    +
    Return type:
    +

    std::pair< double,double >

    +
    +
    Returns:
    +

    A pair containing the lower and upper bound

    +
    +
    +
    + +
    +
    +getIioObjects()ïƒ
    +

    Get access to IIO channels, buffers, devices and context. +Can be used when debugging directly with libiio. +:rtype: IIO_OBJECTS +:return: IIO_OBJECTS structure.

    +
    + +
    +
    +getKernelBuffersCount()ïƒ
    +

    Get the number of kernel buffers +:rtype: int +:return: the number of previously set kernel buffers (saved in this session)

    +
    + +
    +
    +getMaximumSamplerate()ïƒ
    +

    Get the maximum samplerate for the ADC +:rtype: float +:return: double - the value of the maximum samplerate

    +
    + +
    +
    +getName()ïƒ
    +

    Retrieve the name of the device

    +
    +
    Return type:
    +

    string

    +
    +
    Returns:
    +

    The name of the device

    +
    +
    +
    + +
    +
    +getNbChannels()ïƒ
    +

    Retrieve the number of analogical channels

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    The number of channels

    +
    +
    +
    + +
    +
    +getOversamplingRatio(*args)ïƒ
    +

    Overload 1:

    +

    Retrieve the global oversampling ratio

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    The value of the global ratio

    +
    +
    +
    +

    +
    +

    Overload 2:

    +

    Retrieve the oversampling ratio for the given channel

    +
    +
    Parameters:
    +

    chn_idx (int) – The index corresponding to the channel

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    The ratio value

    +
    +
    +
    + +
    +
    +getRange(channel)ïƒ
    +

    Retrieve the range for the given channel

    +
    +
    Parameters:
    +

    channel (int) – An enumerator corresponding to the channel’s index

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    An enumerator corresponding to the range

    +
    +
    +
    + +
    +
    +getRangeLimits(range)ïƒ
    +

    Retrieve the bounds for the given range

    +
    +
    Parameters:
    +

    range (int) – An enumerator corresponding to the range

    +
    +
    Return type:
    +

    std::pair< double,double >

    +
    +
    Returns:
    +

    A pair containing the lower and upper bound

    +
    +
    +
    + +
    +
    +getSampleRate()ïƒ
    +

    Retrieve the global sample rate

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The value of the sample rate

    +
    +
    +
    + +
    +
    +getSamples(*args)ïƒ
    +

    Overload 1:

    +

    Retrieve a specific number of samples from each channel

    +
    +
    Parameters:
    +

    nb_samples (int) – The number of samples that will be retrieved

    +
    +
    Return type:
    +

    std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > >

    +
    +
    Returns:
    +

    A list containing lists of samples for each channel

    +
    +
    +

    Notes: The index of the list corresponds to the index of the channel +Due to a hardware limitation, the number of samples must +be a multiple of 4 and greater than 16.

    +
    +

    +
    +

    Overload 2:

    +

    Retrieve a specific number of samples from each channel

    +
    +
    Parameters:
    +
      +
    • data (std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > >) –

        +
      • a reference to a vector owned/created by the client

      • +
      +

    • +
    • nb_samples (int) – The number of samples that will be retrieved

    • +
    +
    +
    +

    Notes: The vector will be cleaned and then filled with samples +The index of the list corresponds to the index of the channel +Due to a hardware limitation, the number of samples must +be a multiple of 4 and greater than 16.

    +
    + +
    +
    +getSamplesInterleaved(nb_samples_per_channel)ïƒ
    +

    Retrieve a specific number of samples from each channel

    +
    +
    Parameters:
    +

    nb_samples_per_channel (int) – The number of samples that will be retrieved

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    A pointer to the interleaved samples

    +
    +
    +

    Notes: Before the acquisition, both channels will be automatically enabled +The data array will contain samples from both channels +After the acquisition is finished, the channels will return to their initial state +Due to a hardware limitation, the number of samples must +be a multiple of 4 and greater than 16.

    +
    + +
    +
    +getSamplesRaw(nb_samples)ïƒ
    +

    Retrieve a specific number of raw samples from each channel

    +
    +
    Parameters:
    +

    nb_samples (int) – The number of samples that will be retrieved

    +
    +
    Return type:
    +

    std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > >

    +
    +
    Returns:
    +

    A list containing lists of raw samples for each channel

    +
    +
    +

    Notes: The index of the list corresponds to the index of the channel +Due to a hardware limitation, the number of samples must +be a multiple of 4 and greater than 16.

    +
    + +
    +
    +getSamplesRawInterleaved(nb_samples_per_channel)ïƒ
    +

    Retrieve a specific number of raw samples from each channel

    +
    +
    Parameters:
    +

    nb_samples_per_channel (int) – The number of samples that will be retrieved

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    A pointer to the interleaved raw samples

    +
    +
    +

    Notes: Before the acquisition, both channels will be automatically enabled +The data array will contain samples from both channels +After the acquisition is finished, the channels will return to their initial state +Due to a hardware limitation, the number of samples must +be a multiple of 4 and greater than 16.

    +
    + +
    +
    +getScalingFactor(ch)ïƒ
    +

    Retrieve the scaling factor

    +
    +
    Parameters:
    +

    ch (int) – An enumerator corresponding to the channel’s index

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The value of the scaling factor

    +
    +
    +
    + +
    +
    +getTrigger()ïƒ
    +

    Get the hardware trigger handler

    +
    +
    Return type:
    +

    M2kHardwareTrigger

    +
    +
    Returns:
    +

    A pointer to the hardware trigger trigger

    +
    +
    +
    + +
    +
    +getValueForRange(range)ïƒ
    +

    Retrieve the numeric value corresponding to the given range

    +
    +
    Parameters:
    +

    range (int) –

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    double

    +
    +
    +
    + +
    +
    +getVerticalOffset(channel)ïƒ
    +
    +
    Parameters:
    +

    channel (int) – the index of the channel

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    the value of the offset in Volts

    +
    +
    +
    + +
    +
    +getVoltage(*args)ïƒ
    +

    Overload 1:

    +

    Retrieve the average voltage of the given channel

    +
    +
    Parameters:
    +

    ch (int) – The index corresponding to the channel

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The average voltage

    +
    +
    +
    +

    +
    +

    Overload 2:

    +

    Retrieve the average voltage of the given channel

    +
    +
    Parameters:
    +

    ch (int) – An enumerator corresponding to the channel’s index

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The average voltage

    +
    +
    +
    +

    +
    +

    Overload 3:

    +

    Retrieve the average voltage for each channel

    +
    +
    Return type:
    +

    std::vector< double,std::allocator< double > >

    +
    +
    Returns:
    +

    A list containing the average voltage of each channel

    +
    +
    +

    Notes: The index of the voltage corresponds to the channel’s index

    +
    + +
    +
    +getVoltageRaw(*args)ïƒ
    +

    Overload 1:

    +

    Retrieve the average raw value of the given channel

    +
    +
    Parameters:
    +

    ch (int) – The index corresponding to the channel

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    The average raw value

    +
    +
    +
    +

    +
    +

    Overload 2:

    +

    Retrieve the average raw value of the given channel

    +
    +
    Parameters:
    +

    ch (int) – An enumerator corresponding to the channel’s index

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    The average raw value

    +
    +
    +
    +

    +
    +

    Overload 3:

    +

    Retrieve the average raw value for each channel

    +
    +
    Return type:
    +

    std::vector< short,std::allocator< short > >

    +
    +
    Returns:
    +

    A list containing the average raw value of each channel

    +
    +
    +

    Notes: The index of the value corresponds to the channel’s index

    +
    + +
    +
    +isChannelEnabled(chnIdx)ïƒ
    +

    Retrieve the state of the given channel

    +
    +
    Parameters:
    +

    chnIdx (int) – The index corresponding to the channel

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    True if the channel is enabled

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    False if the channel is disabled

    +
    +
    +
    + +
    +
    +reset()ïƒ
    +
    + +
    +
    +setKernelBuffersCount(count)ïƒ
    +

    Set the kernel buffers to a specific value +:type count: int +:param count: the number of kernel buffers

    +
    + +
    +
    +setOversamplingRatio(*args)ïƒ
    +

    Overload 1:

    +

    Set the global oversampling ratio

    +
    +
    Parameters:
    +

    oversampling (int) – Integer value to set the oversampling ratio to

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    The current value of the global ratio

    +
    +
    +
    +

    +
    +

    Overload 2:

    +

    Set the oversampling ratio for the given channel

    +
    +
    Parameters:
    +
      +
    • chn_idx (int) – The index corresponding to the channel

    • +
    • oversampling (int) – Integer value to set the oversampling ratio to

    • +
    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    The current ratio value

    +
    +
    +
    + +
    +
    +setRange(*args)ïƒ
    +

    Overload 1:

    +

    Set the range for the given channel

    +
    +
    Parameters:
    +
      +
    • channel (int) – An enumerator corresponding to the channel’s index

    • +
    • range (int) – An enumerator corresponding to a range

    • +
    +
    +
    +
    +

    +
    +

    Overload 2:

    +

    Set the range for the given channel

    +
    +
    Parameters:
    +
      +
    • channel (int) – An enumerator corresponding to the channel’s index

    • +
    • min (float) – Upper bound

    • +
    • max (float) – Lower bound

    • +
    +
    +
    +
    + +
    +
    +setSampleRate(samplerate)ïƒ
    +

    Set the global sample rate

    +
    +
    Parameters:
    +

    samplerate (float) – A double value to set the sample rate to

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The value of the global sample rate

    +
    +
    +
    + +
    +
    +setVerticalOffset(channel, vertOffset)ïƒ
    +

    Set the vertical offset, in Volts, of a specific channel +:type channel: int +:param channel: the index of the channel +:type vertOffset: float +:param vertOffset: the value of the offset in Volts

    +
    + +
    +
    +startAcquisition(nb_samples)ïƒ
    +

    Create the buffer for both channels and start the acquisition +:type nb_samples: int +:param nb_samples: size of the buffer in samples for each channel

    +
    + +
    +
    +stopAcquisition()ïƒ
    +

    Destroy the buffer and stop the acquisition

    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.M2kAnalogIns(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.M2kAnalogOut(*args, **kwargs)ïƒ
    +

    Bases: object

    +
    +
    +cancelBuffer(*args)ïƒ
    +

    Overload 1:

    +

    Cancel all buffer operations of enabled channels +Notes: Should be used to cancel an ongoing data write.

    +
    +

    +
    +

    Overload 2:

    +

    Cancel all buffer operations of the given channel +:type chn: int +:param chn: The index corresponding to the channel +Notes: Should be used to cancel an ongoing data write.

    +
    + +
    +
    +convertRawToVolts(channel, raw)ïƒ
    +

    Convert the raw value of a sample into volts +:type channel: int +:param channel: The index corresponding to the channel +:type raw: int +:param raw: The raw value of a sample +:rtype: float +:return: The value of a sample converted into volts

    +
    + +
    +
    +convertVoltsToRaw(channel, voltage)ïƒ
    +

    Convert the volts value of a sample into raw +:type channel: int +:param channel: The index corresponding to the channel +:type voltage: float +:param voltage: The volts value of a sample +:rtype: int +:return: The value of a sample converted into raw

    +
    + +
    +
    +enableChannel(chnIdx, enable)ïƒ
    +

    Enable or disable the given digital channel

    +
    +
    Parameters:
    +
      +
    • chnIdx (int) – The index corresponding to the channel

    • +
    • enable (boolean) – A boolean value corresponding to the channel’s state

    • +
    +
    +
    Raises:
    +

    EXC_OUT_OF_RANGE No such channel

    +
    +
    +
    + +
    +
    +getAvailableSampleRates(chn)ïƒ
    +
    +
    Parameters:
    +

    chn (int) – The index corresponding to the required channel

    +
    +
    Return type:
    +

    std::vector< double,std::allocator< double > >

    +
    +
    Returns:
    +

    The list of available samplerates for this device

    +
    +
    +
    + +
    +
    +getBufferRearmOnTrigger()ïƒ
    +

    Retrieve the value of the attribute that controls buffer rearm on trigger +Notes: The buffer rearm on trigger is disabled by default. +The attribute is shared between both channels. +Only available from firmware v0.33. +:rtype: boolean +:return: A boolean value corresponding to the state of the rearm on trigger.

    +
    + +
    +
    +getChannelName(channel)ïƒ
    +

    Get the channel name for each DAC channel +:type channel: int +:param channel: - unsigned int representing the index of the channel +:rtype: string +:return: std::string - name of the channel

    +
    + +
    +
    +getCyclic(chn)ïƒ
    +

    Retrieve the value of the cyclic mode

    +
    +
    Parameters:
    +

    chn (int) – The index corresponding to the channel

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    A boolean value corresponding to the state of the cyclic mode

    +
    +
    +
    + +
    +
    +getFilterCompensation(samplerate)ïƒ
    +

    Retrieve the filter compensation for the given sample rate

    +
    +
    Parameters:
    +

    samplerate (float) – A double value representing the sample rate

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The value of the filter compensation

    +
    +
    +
    + +
    +
    +getIioObjects()ïƒ
    +

    Get access to IIO channels, buffers, devices and context. +Notes: Can be used when debugging directly with libiio. +:rtype: IIO_OBJECTS +:return: IIO_OBJECTS structure.

    +
    + +
    +
    +getKernelBuffersCount(chnIdx)ïƒ
    +

    Get the number of kernel buffers +:type chnIdx: int +:param chnIdx: The index corresponding to the channel +:rtype: int +:return: the number of previously set kernel buffers (saved in this session)

    +
    + +
    +
    +getMaximumSamplerate(chn_idx)ïƒ
    +

    Get the maximum samplerate for the DAC +:type chn_idx: int +:param chn_idx: - unsigned int representing the index of the channel +:rtype: float +:return: double - the value of the maximum samplerate

    +
    + +
    +
    +getNbChannels()ïƒ
    +

    Retrieve the number of analogical channels +:rtype: int +:return: The number of channels

    +
    + +
    +
    +getOversamplingRatio(*args)ïƒ
    +

    Overload 1:

    +

    Retrieve the global oversampling ratio +:rtype: std::vector< int,std::allocator< int > > +:return: The value of the global oversampling ratio

    +
    +

    +
    +

    Overload 2:

    +

    Retrieve the oversampling ratio for the given channel

    +
    +
    Parameters:
    +

    chn (int) – The index corresponding to the channel

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    The oversampling ratio value

    +
    +
    +
    + +
    +
    +getSampleRate(*args)ïƒ
    +

    Overload 1:

    +

    Retrieve the sample rate of both DACs +:rtype: std::vector< double,std::allocator< double > > +:return: A list containing the sample rates

    +
    +

    +
    +

    Overload 2:

    +

    Retrieve the sample rate for the given channel

    +
    +
    Parameters:
    +

    chn (int) – The index corresponding to the channel

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The value of the sample rate

    +
    +
    +
    + +
    +
    +getScalingFactor(chn)ïƒ
    +

    Retrieve the scaling factor for the given channel

    +
    +
    Parameters:
    +

    chn (int) – The index corresponding to the channel

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The value of the scaling factor

    +
    +
    Raises:
    +

    EXC_OUT_OF_RANGE No such channel

    +
    +
    +
    + +
    +
    +getSyncedDma(chn=-1)ïƒ
    +
    + +
    +
    +getSyncedStartDma(chn=-1)ïƒ
    +
    + +
    +
    +getTrigger()ïƒ
    +

    Get the hardware trigger handler

    +
    +
    Return type:
    +

    M2kHardwareTrigger

    +
    +
    Returns:
    +

    A pointer to the hardware trigger

    +
    +
    +
    + +
    +
    +isChannelEnabled(chnIdx)ïƒ
    +

    Check if the given channel is enabled

    +
    +
    Parameters:
    +

    chnIdx (int) – The index corresponding to the channel

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    A boolean value corresponding to the state of the channel

    +
    +
    Raises:
    +

    EXC_OUT_OF_RANGE No such channel

    +
    +
    +
    + +
    +
    +isPushDone(chnIdx)ïƒ
    +

    Check if the generation of the signal (only for non-cyclic buffer) is done +:type chnIdx: int +:param chnIdx: The index corresponding to the channel +:rtype: boolean +:return: True if the push process is done, false otherwise

    +

    Notes: This function takes the number of kernel buffers into consideration. +If a new session is started without unplugging the board and the number of kernel buffers was modified in the previous session +(default value = 4) a DAC calibration must be performed before calling isPushDone in order to compute the +current number of kernel buffers or call again the function setKernelBuffersCount.

    +

    Available only in firmware versions newer than 0.23.

    +
    + +
    +
    +push(*args)ïƒ
    +

    Overload 1:

    +

    Send the samples to the given channel

    +
    +
    Parameters:
    +
      +
    • chnIdx (int) – The index corresponding to the channel

    • +
    • data (std::vector< double,std::allocator< double > >) – A list of doubles containing all samples

    • +
    +
    +
    +

    Notes: Streaming data is possible - required multiple kernel buffers +The given channel won’t be synchronized with the other channel +Due to a hardware limitation, the number of samples per channel must +be a multiple of 4 and greater than 16 (non-cyclic buffers) or 1024 (cyclic buffers) +The samples in the buffer can be repeated until the buffer reaches the size requirements +:raises: EXC_OUT_OF_RANGE No such channel

    +
    +

    +
    +

    Overload 2:

    +

    Send samples to channels.

    +
    +
    Parameters:
    +

    data (std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > >) – A list containing lists of samples

    +
    +
    +

    Notes: The index of each list of samples represents the channel’s index +Streaming data is possible - required multiple kernel buffers +The given channel won’t be synchronized with the other channel +Due to a hardware limitation, the number of samples per channel must +be a multiple of 4 and greater than 16 (non-cyclic buffers) or 1024 (cyclic buffers) +The samples in the buffer can be repeated until the buffer reaches the size requirements

    +
    + +
    +
    +pushRaw(*args)ïƒ
    +

    Overload 1:

    +

    Send the samples to the given channel

    +
    +
    Parameters:
    +
      +
    • chnIdx (int) – The index corresponding to the channel

    • +
    • data (std::vector< short,std::allocator< short > >) – A list of shorts containing all samples

    • +
    +
    +
    +

    Notes: Streaming data is possible - required multiple kernel buffers +The given channel won’t be synchronized with the other channel +Due to a hardware limitation, the number of samples per channel must +be a multiple of 4 and greater than 16 (non-cyclic buffers) or 1024 (cyclic buffers) +The samples in the buffer can be repeated until the buffer reaches the size requirements +:raises: EXC_OUT_OF_RANGE No such channel

    +
    +

    +
    +

    Overload 2:

    +

    Send samples to channels

    +
    +
    Parameters:
    +

    data (std::vector< std::vector< short,std::allocator< short > >,std::allocator< std::vector< short,std::allocator< short > > > >) – A list containing lists of samples

    +
    +
    +

    Notes: The index of each list of samples represents the channel’s index +Streaming data is possible - required multiple kernel buffers +The given channel won’t be synchronized with the other channel +Due to a hardware limitation, the number of samples per channel must +be a multiple of 4 and greater than 16 (non-cyclic buffers) or 1024 (cyclic buffers) +The samples in the buffer can be repeated until the buffer reaches the size requirements

    +
    + +
    +
    +pushRawBytes(chnIdx, data, nb_samples)ïƒ
    +

    Send the samples to the given channel

    +
    +
    Parameters:
    +
      +
    • chnIdx (int) – The index corresponding to the channel

    • +
    • data (int) – A pointer to the raw samples

    • +
    • nb_samples (int) – the number of samples

    • +
    +
    +
    +

    Notes: Streaming data is possible - required multiple kernel buffers +The given channel won’t be synchronized with the other channel +Due to a hardware limitation, the number of samples per channel must +be a multiple of 4 and greater than 16 (non-cyclic buffers) or 1024 (cyclic buffers) +The samples in the buffer can be repeated until the buffer reaches the size requirements +:raises: EXC_OUT_OF_RANGE No such channel

    +
    + +
    +
    +reset()ïƒ
    +
    + +
    +
    +setBufferRearmOnTrigger(enable)ïƒ
    +

    Allows sequential output of multiple buffers with each trigger event. +:type enable: boolean +:param enable: A boolean value that enables or disables the buffer rearm functionality.

    +

    Notes: When disabled, all buffers will be sent at once. Opt to concatenate multiple small buffers into a single buffer to avoid timing problems. +When enabled, each previously pushed buffer will be sent sequentially with each trigger event. +For non-cyclic mode each buffer is sent only once. +In cyclic mode:

    +
    +
      +
    • If rearm is disabled, the buffer will be sent continuously.

    • +
    • If rearm is enabled, the buffer will be sent once for every trigger event.

    • +
    +
    +

    Due to hardware limitation, in non-cyclic mode, the channel will idle with the first sample of the next buffer. +Only available from firmware v0.33.

    +
    + +
    +
    +setCyclic(*args)ïƒ
    +

    Overload 1:

    +

    Enable or disable the cyclic mode for all digital channels

    +
    +
    Parameters:
    +

    en (boolean) – If true, enable cyclic mode

    +
    +
    Raises:
    +

    EXC_OUT_OF_RANGE No such channel

    +
    +
    +
    +

    +
    +

    Overload 2:

    +

    Enable or disable the cyclic mode for all digital channels

    +
    +
    Parameters:
    +
      +
    • chn (int) – The index corresponding to the channel

    • +
    • en (boolean) – If true, enable cyclic mode

    • +
    +
    +
    Raises:
    +

    EXC_OUT_OF_RANGE No such channel

    +
    +
    +
    + +
    +
    +setKernelBuffersCount(chnIdx, count)ïƒ
    +

    Set the kernel buffers to a specific value +:type chnIdx: int +:param chnIdx: The index corresponding to the channel +:type count: int +:param count: the number of kernel buffers

    +
    + +
    +
    +setOversamplingRatio(*args)ïƒ
    +

    Overload 1:

    +

    Set the value of the oversampling ratio for each channel

    +
    +
    Parameters:
    +

    oversampling_ratio (std::vector< int,std::allocator< int > >) – A list containing the ratios for each channel (as integers)

    +
    +
    Return type:
    +

    std::vector< int,std::allocator< int > >

    +
    +
    Returns:
    +

    A list containing the oversampling ratio value for each channel

    +
    +
    +
    +

    +
    +

    Overload 2:

    +

    Set the oversampling ratio for the given channel +:type chn: int +:param chn: The index corresponding to the channel +:type oversampling_ratio: int +:param oversampling_ratio: Integer value to set the oversampling ratio to +:rtype: int +:return: The current oversampling ratio value

    +
    + +
    +
    +setSampleRate(*args)ïƒ
    +

    Overload 1:

    +

    Set the sample rate for both channels

    +
    +
    Parameters:
    +

    samplerates (std::vector< double,std::allocator< double > >) – A list containing the sample rates of each channel

    +
    +
    Return type:
    +

    std::vector< double,std::allocator< double > >

    +
    +
    Returns:
    +

    A list containing the previously set sample rates

    +
    +
    +
    +

    +
    +

    Overload 2:

    +

    Set the sample rate for the given channel

    +
    +
    Parameters:
    +
      +
    • chn (int) – The index corresponding to the channel

    • +
    • samplerate (float) – A double value to set the sample rate to

    • +
    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The value of the sample rate

    +
    +
    +
    + +
    +
    +setSyncedDma(en, chn=-1)ïƒ
    +
    + +
    +
    +setSyncedStartDma(en, chn=-1)ïƒ
    +
    + +
    +
    +setVoltage(chn_idx, volts)ïƒ
    +

    Sets the voltage output of the DAC channel +:type chn_idx: int +:param chn_idx: - unsigned int representing the index of the channel +:type volts: float +:param volts: - actual value to be set

    +

    Notes: In scenarios where the DMA is not active, such as when an output buffer is destroyed, +the DAC will revert to using the raw value set by this function. +:rtype: int +:return: unsigned short - the corresponding raw value for the given voltage

    +
    + +
    +
    +setVoltageRaw(chn_idx, raw)ïƒ
    +

    Sets the raw output of the DAC channel +:type chn_idx: int +:param chn_idx: - unsigned int representing the index of the channel +:type raw: int +:param raw: - actual value to be set

    +

    Notes: In scenarios where the DMA is not active, such as when an output buffer is destroyed, +the DAC will revert to using the raw value set by this function. +:rtype: int +:return: unsigned short - the value set in the raw attribute

    +
    + +
    +
    +stop(*args)ïƒ
    +

    Overload 1:

    +

    Stop all channels from sending the signals.

    +

    Notes: Both DACs will be powered down

    +
    +

    +
    +

    Overload 2:

    +

    Stop the given channels from sending the signals

    +
    +
    Parameters:
    +

    chn (int) – The index corresponding to the channel

    +
    +
    +

    Notes: The corresponding DAC will be powered down +:raises: EXC_OUT_OF_RANGE No such channel

    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.M2kAnalogOuts(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.M2kCalibration(*args, **kwargs)ïƒ
    +

    Bases: object

    +
    +
    +calibrateADC()ïƒ
    +
    + +
    +
    +calibrateAll()ïƒ
    +
    + +
    +
    +calibrateDAC()ïƒ
    +
    + +
    +
    +cancelCalibration()ïƒ
    +
    + +
    +
    +getAdcCalibrated()ïƒ
    +
    + +
    +
    +getAdcGain(channel)ïƒ
    +
    + +
    +
    +getAdcOffset(channel)ïƒ
    +
    + +
    +
    +getDacCalibrated()ïƒ
    +
    + +
    +
    +getDacGain(channel)ïƒ
    +
    + +
    +
    +getDacOffset(channel)ïƒ
    +
    + +
    +
    +initialize()ïƒ
    +
    + +
    +
    +isInitialized()ïƒ
    +
    + +
    +
    +resetCalibration()ïƒ
    +
    + +
    +
    +setAdcGain(chn, gain)ïƒ
    +
    + +
    +
    +setAdcOffset(chn, offset)ïƒ
    +
    + +
    +
    +setDacGain(chn, gain)ïƒ
    +
    + +
    +
    +setDacOffset(chn, offset)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.M2kConditionAnalog(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.M2kConditionDigital(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.M2kDigital(*args, **kwargs)ïƒ
    +

    Bases: object

    +
    +
    +anyChannelEnabled(dir)ïƒ
    +

    Check if there is at least one channel enabled

    +
    +
    Parameters:
    +

    dir (int) – An enumerator corresponding to the direction of a channel

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    On succces, true

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    Otherwise, false

    +
    +
    +
    + +
    +
    +cancelAcquisition()ïƒ
    +

    Cancel all rx-buffer operations +Notes: Should be used to cancel an ongoing acquisition

    +
    + +
    +
    +cancelBufferOut()ïƒ
    +

    Cancel all tx-buffer operations +Notes: Should be used to cancel an ongoing data write.

    +
    + +
    +
    +enableAllOut(enable)ïƒ
    +

    Enable or disable all output channels

    +
    +
    Parameters:
    +

    enable (boolean) – A boolean value corresponding to the channel’s state

    +
    +
    +

    Notes: This function affects only the TX channels

    +
    + +
    +
    +enableChannel(*args)ïƒ
    +

    Overload 1:

    +

    Enable or disable the given digital channel

    +
    +
    Parameters:
    +
      +
    • index (int) – The index corresponding to the channel

    • +
    • enable (boolean) – A boolean value corresponding to the channel’s state

    • +
    +
    +
    +

    Notes: This function affects only the TX channels

    +
    +

    +
    +

    Overload 2:

    +

    Enable or disable the given digital channel

    +
    +
    Parameters:
    +
      +
    • index (int) – An enumerator corresponding to the channel’s index

    • +
    • enable (boolean) – A boolean value corresponding to the channel’s state

    • +
    +
    +
    +

    Notes: This function affects only the TX channels

    +
    + +
    +
    +getCyclic()ïƒ
    +

    Retrieve the value of the cyclic mode

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    A boolean value corresponding to the state of the cyclic mode

    +
    +
    +
    + +
    +
    +getDirection(index)ïƒ
    +

    Retrieve the direction of the given digital channel

    +
    +
    Parameters:
    +

    index (int) – An enumerator corresponding to the channel’s index

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    DIO_DIRECTION An enumerator that indicates the direction of a channel

    +
    +
    +
    + +
    +
    +getIioObjects()ïƒ
    +

    Get access to IIO channels, buffers, devices and context. +Can be used when debugging directly with libiio. +:rtype: IIO_OBJECTS +:return: IIO_OBJECTS structure.

    +
    + +
    +
    +getNbChannelsIn()ïƒ
    +

    Retrieve the number of digital input channels

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    an unsigned int representing the number of digital IN channels

    +
    +
    +
    + +
    +
    +getNbChannelsOut()ïƒ
    +

    Retrieve the number of digital output channels

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    an unsigned int representing the number of digital OUT channels

    +
    +
    +
    + +
    +
    +getOutputMode(*args)ïƒ
    +

    Overload 1:

    +

    Retrieve the output mode for the given digital channel

    +
    +
    Parameters:
    +

    chn (int) – An enumerator corresponding to the channel’s index

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    An enumerator corresponding to the output mode

    +
    +
    +
    +

    +
    +

    Overload 2:

    +

    Retrieve the output mode for the given digital channel

    +
    +
    Parameters:
    +

    chn (int) – The index corresponding to the channel

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    An enumerator corresponding to the output mode

    +
    +
    +
    + +
    +
    +getSampleRateIn()ïƒ
    +

    Retrieve the sample rate of all digital input channels +:rtype: float +:return: The value of the sample rate

    +
    + +
    +
    +getSampleRateOut()ïƒ
    +

    Retrieve the sample rate of all digital output channels

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The value of the sample rate

    +
    +
    +
    + +
    +
    +getSamples(*args)ïƒ
    +

    Overload 1:

    +

    Retrieve a specific number of samples

    +
    +
    Parameters:
    +

    nb_samples (int) – The number of samples that will be retrieved

    +
    +
    Return type:
    +

    std::vector< unsigned short,std::allocator< unsigned short > >

    +
    +
    Returns:
    +

    A list that contains the samples

    +
    +
    +

    Notes: Due to a hardware limitation, the number of samples must +be a multiple of 4 and greater than 16.

    +
    +

    +
    +

    Overload 2:

    +

    Retrieve a specific number of samples +:type data: std::vector< unsigned short,std::allocator< unsigned short > > +:param data: - a reference to a vector owned/created by the client +:type nb_samples: int +:param nb_samples: The number of samples that will be retrieved. The vector will be cleaned and then filled with samples. +Notes: Due to a hardware limitation, the number of samples must +be a multiple of 4 and greater than 16.

    +
    + +
    +
    +getSamplesP(nb_samples)ïƒ
    +

    Retrieve a specific number of samples +:type nb_samples: int +:param nb_samples: The number of samples that will be retrieved +:rtype: int +:return: A pointer to the data +Notes: Due to a hardware limitation, the number of samples must +be a multiple of 4 and greater than 16.

    +
    + +
    +
    +getTrigger()ïƒ
    +

    Get the hardware trigger handler +:rtype: M2kHardwareTrigger +:return: the trigger object

    +
    + +
    +
    +getValueRaw(*args)ïƒ
    +

    Overload 1:

    +

    Retrieve the raw value of the given digital channel

    +
    +
    Parameters:
    +

    index (int) – An enumerator corresponding to the channel’s index

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    DIO_LEVEL An enumerator corresponding to the raw value

    +
    +
    +
    +

    +
    +

    Overload 2:

    +

    Retrieve the raw value of the given digital channel

    +
    +
    Parameters:
    +

    index (int) – The index corresponding to the channel

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    DIO_LEVEL An enumerator corresponding to the raw value

    +
    +
    +
    + +
    +
    +isClocksourceExternal()ïƒ
    +

    Get the current clocksource +:rtype: boolean +:return: True if clocksource is set to external

    +

    Notes: Only available from firmware v0.26.

    +
    + +
    +
    +push(data)ïƒ
    +

    Send the samples to all digital channels

    +
    +
    Parameters:
    +

    data (std::vector< unsigned short,std::allocator< unsigned short > >) – The std vector that contains the samples

    +
    +
    +

    Notes: Due to a hardware limitation, the number of samples must +be a multiple of 4 and greater than 16.

    +
    + +
    +
    +pushBytes(data, nb_samples)ïƒ
    +

    Send the samples to all digital channels

    +
    +
    Parameters:
    +
      +
    • data (int) – a pointer to the samples

    • +
    • nb_samples (int) – the number of samples

    • +
    +
    +
    +

    Notes: Due to a hardware limitation, the number of samples must +be a multiple of 4 and greater than 16.

    +
    + +
    +
    +reset()ïƒ
    +
    + +
    +
    +resetRateMux()ïƒ
    +

    Reset the digital rate to default

    +

    Notes: Only available from firmware v0.26.

    +
    + +
    +
    +setCyclic(cyclic)ïƒ
    +

    Enable or disable the cyclic mode for all digital channels

    +
    +
    Parameters:
    +

    cyclic (boolean) – If true, enable cyclic mode

    +
    +
    +
    + +
    +
    +setDirection(*args)ïƒ
    +

    Overload 1:

    +

    Set the direction for all digital channels +:type mask: int +:param mask: A bitmask +Notes: Each bit of the mask corresponds to the channel with the same index. The value of the bit represents the channel’s direction. O - input, 1 - output

    +
    +

    +
    +

    Overload 2:

    +

    Set the direction of the given digital channel +:type index: int +:param index: The index corresponding to the channel +:type dir: int +:param dir: An enumerator that indicates the direction of a channel

    +
    +

    +
    +

    Overload 3:

    +

    Set the direction of the given digital channel +:type index: int +:param index: The index corresponding to the channel +:type dir: boolean +:param dir: A boolean value that corresponds to one direction +Notes: The boolean value for input direction is false and for output direction is true

    +
    +

    +
    +

    Overload 4:

    +

    Set the direction of the given digital channel +:type index: int +:param index: An enumerator corresponding to the channel’s index +:type dir: boolean +:param dir: A boolean value that corresponds to one direction +Notes: The boolean value for input direction is false and for output direction is true

    +
    +

    +
    +

    Overload 5:

    +

    Set the direction of the given digital channel +:type index: int +:param index: An enumerator corresponding to the channel’s index +:type dir: int +:param dir: An enumerator that indicates the direction of a channel

    +
    + +
    +
    +setExternalClocksource(external)ïƒ
    +

    Set the clocksource +:type external: boolean +:param external: - True to set source to external

    +
    +
      +
    • False to set source to internal

    • +
    +
    +

    Notes: Only available from firmware v0.26.

    +
    + +
    +
    +setKernelBuffersCountIn(count)ïƒ
    +

    Set the kernel buffers for input to a specific value +:type count: int +:param count: the number of kernel buffers

    +
    + +
    +
    +setKernelBuffersCountOut(count)ïƒ
    +

    Set the kernel buffers for output to a specific value +:type count: int +:param count: the number of kernel buffers

    +
    + +
    +
    +setOutputMode(*args)ïƒ
    +

    Overload 1:

    +

    Set the output mode for the given digital channel

    +
    +
    Parameters:
    +
      +
    • chn (int) – An enumerator corresponding to the channel’s index

    • +
    • mode (int) – An enumerator corresponding to the output mode

    • +
    +
    +
    +
    +

    +
    +

    Overload 2:

    +

    Set the output mode for the given digital channel

    +
    +
    Parameters:
    +
      +
    • chn (int) – The index corresponding to the channel

    • +
    • mode (int) – An enumerator corresponding to the output mode

    • +
    +
    +
    +
    + +
    +
    +setRateMux()ïƒ
    +

    Force the digital interface to use the analogical rate

    +

    Notes: Only available from firmware v0.26.

    +
    + +
    +
    +setSampleRateIn(samplerate)ïƒ
    +

    Set the sample rate for all digital input channels

    +
    +
    Parameters:
    +

    samplerate (float) – A double value to set the sample rate to

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The current sample rate for all digital input channels

    +
    +
    +
    + +
    +
    +setSampleRateOut(samplerate)ïƒ
    +

    Set the sample rate for all digital output channels

    +
    +
    Parameters:
    +

    samplerate (float) – A double value to set the sample rate to

    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    The current sample rate for all digital output channels

    +
    +
    +
    + +
    +
    +setValueRaw(*args)ïƒ
    +

    Overload 1:

    +

    Set the raw value of a given digital channel

    +
    +
    Parameters:
    +
      +
    • index (int) – An enumerator corresponding to the channel’s index

    • +
    • level (int) – An enumerator corresponding to the raw value

    • +
    +
    +
    +
    +

    +
    +

    Overload 2:

    +

    Set the raw value of a given digital channel

    +
    +
    Parameters:
    +
      +
    • index (int) – The index corresponding to the channel

    • +
    • level (int) – An enumerator corresponding to the raw value

    • +
    +
    +
    +
    +

    +
    +

    Overload 3:

    +

    Set the raw value of a given digital channel

    +
    +
    Parameters:
    +
      +
    • index (int) – An enumerator corresponding to the channel’s index

    • +
    • level (boolean) – A boolean value corresponding to the raw value

    • +
    +
    +
    +
    + +
    +
    +startAcquisition(nb_samples)ïƒ
    +

    Create the buffer for all channels and start the acquisition +:type nb_samples: int +:param nb_samples: size of the buffer in samples

    +
    + +
    +
    +stopAcquisition()ïƒ
    +

    Destroy the buffer and stop the acquisition

    +
    + +
    +
    +stopBufferOut()ïƒ
    +

    Stop all digital channels from sending the signals

    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.M2kHardwareTrigger(*args, **kwargs)ïƒ
    +

    Bases: object

    +
    +
    +getAnalogCondition(chnIdx)ïƒ
    +

    Get the trigger condition for the analog trigger on a specific channel +:type chnIdx: int +:param chnIdx: the required channel +:rtype: int +:return: the trigger condition

    +
    + +
    +
    +getAnalogDelay()ïƒ
    +

    Get the analog trigger delay +:rtype: int +:return: the value of the delay

    +

    Notes: the delay can have negative values +The negative values are used to place the trigger inside the buffer +The value of the delay represents the number of samples in buffer before the triggered sample +If the value is 0, the triggered sample will be the first one in the buffer +For a buffer of 1000 samples, in order to have the trigger at the middle, you need to set it to -500 +The minimum negative value is -8192

    +

    the delay can have positive values +TBD

    +
    + +
    +
    +getAnalogExternalCondition(chnIdx)ïƒ
    +
    +
    Parameters:
    +

    chnIdx (int) – : integer - the index of the required channel

    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    M2K_TRIGGER_CONDITION_DIGITAL

    +
    +
    +
    + +
    +
    +getAnalogExternalOutSelect()ïƒ
    +

    Check which trigger events are forwarded on the TO (trigger out) pin. +:rtype: int +:return: M2K_TRIGGER_OUT_SELECT :

    +
    +

    SELECT_NONE;

    +

    SELECT_TRIGGER_IN;

    +

    SELECT_DIGITAL_IN;

    +

    SELECT_ANALOG_IN;

    +
    +

    Notes: Only available from firmware v0.24.

    +
    + +
    +
    +getAnalogHysteresis(chnIdx)ïƒ
    +

    Get the analog hysteresis value for one channel +:type chnIdx: int +:param chnIdx: the required channel +:rtype: float +:return: the value of the hysteresis in Volts

    +
    + +
    +
    +getAnalogLevel(chnIdx)ïƒ
    +

    Get the analog trigger level for one channel +:type chnIdx: int +:param chnIdx: the required channel +:rtype: float +:return: the analog trigger level in volts

    +
    + +
    +
    +getAnalogLevelRaw(chnIdx)ïƒ
    +

    Get the raw analog trigger level for one channel +:type chnIdx: int +:param chnIdx: the required channel +:rtype: int +:return: the raw analog trigger level

    +
    + +
    +
    +getAnalogMode(chnIdx)ïƒ
    +

    Get the mode for the analog trigger on a specific channel +:type chnIdx: int +:param chnIdx: the required channel +:rtype: int +:return: the analog trigger mode

    +
    + +
    +
    +getAnalogOutTriggerCondition()ïƒ
    +

    Returns the condition of the AnalogOut trigger event when the source is TI. +:rtype: int +:return: M2K_TRIGGER_CONDITION_OUT :

    +
    +

    NONE_OUT - disabled;

    +

    LOW_LEVEL_OUT;

    +

    HIGH_LEVEL_OUT;

    +

    ANY_EDGE_OUT;

    +

    RISING_EDGE_OUT;

    +

    FALLING_EDGE_OUT;

    +
    +

    Notes: Only available from firmware v0.33.

    +
    + +
    +
    +getAnalogOutTriggerSource()ïƒ
    +

    Returns the source of the AnalogOut trigger event. +:rtype: int +:return: M2K_TRIGGER_SOURCE_OUT :

    +
    +

    TRIGGER_NONE;

    +

    TRIGGER_TI;

    +

    TRIGGER_ADC;

    +

    TRIGGER_LA;

    +
    +

    Notes: Only available from firmware v0.33.

    +
    + +
    +
    +getAnalogOutTriggerStatus()ïƒ
    +

    Returns the action that is performed when a trigger event occurs. +:rtype: int +:return: M2K_TRIGGER_STATUS_ANALOG_OUT :

    +
    +

    DISABLED;

    +

    START;

    +

    STOP;

    +
    +

    Notes: Only available from firmware v0.33.

    +
    + +
    +
    +getAnalogSource()ïƒ
    +

    Get the source of the analog trigger +:rtype: int +:return: analog trigger source (channel1, channel2, etc)

    +
    + +
    +
    +getAnalogSourceChannel()ïƒ
    +

    Get the channel source of the analog trigger +:rtype: int +:return: analog trigger channel source (channel1, channel2)

    +
    + +
    +
    +getAnalogStreamingFlag()ïƒ
    +

    Get the streaming flag for the analog part +:rtype: boolean +:return: whether the streaming is enabled (true/false)

    +
    + +
    +
    +getCurrentHwSettings()ïƒ
    +
    + +
    +
    +getDigitalCondition(*args)ïƒ
    +

    Overload 1:

    +

    Get the trigger condition for the digital trigger on a specific channel +:type chnIdx: int +:param chnIdx: The index of the required channel +:rtype: int +:return: The trigger condition

    +
    +

    +
    +

    Overload 2:

    +

    Get the trigger condition for the digital trigger on a specific channel +:type chnIdx: int +:param chnIdx: An enumerator corresponding to the index of the required channel +:rtype: int +:return: The trigger condition

    +
    + +
    +
    +getDigitalDelay()ïƒ
    +

    Get the digital trigger delay +:rtype: int +:return: the value of the digital delay

    +

    Notes: the delay can have negative values +The negative values are used to place the trigger inside the buffer +The value of the delay represents the number of samples in buffer before the triggered sample +If the value is 0, the triggered sample will be the first one in the buffer +For a buffer of 1000 samples, in order to have the trigger at the middle, you need to set it to -500 +The minimum negative value is -8192

    +

    the delay can have positive values +TBD

    +
    + +
    +
    +getDigitalExternalCondition()ïƒ
    +
    +
    Return type:
    +

    int

    +
    +
    Returns:
    +

    M2K_TRIGGER_CONDITION_DIGITAL

    +
    +
    +
    + +
    +
    +getDigitalMode()ïƒ
    +

    Get the mode for the digital trigger +:rtype: int +:return: the digital trigger mode (DIO_OR/DIO_AND)

    +
    + +
    +
    +getDigitalSource()ïƒ
    +

    Check which is the source of the DigitalIn interface trigger event. +:rtype: int +:return: M2K_TRIGGER_SOURCE_DIGITAL :

    +
    +

    SRC_TRIGGER_IN;

    +

    SRC_ANALOG_IN;

    +

    SRC_NONE;

    +
    +

    Notes: Only available from firmware v0.24.

    +
    + +
    +
    +getDigitalStreamingFlag()ïƒ
    +

    Get the streaming flag for the digital part +:rtype: boolean +:return: whether the streaming is enabled (true/false)

    +
    + +
    +
    +hasCrossInstrumentTrigger()ïƒ
    +
    + +
    +
    +hasExternalTriggerIn()ïƒ
    +
    + +
    +
    +hasExternalTriggerOut()ïƒ
    +
    + +
    +
    +reset()ïƒ
    +
    + +
    +
    +setAnalogCondition(chnIdx, cond)ïƒ
    +

    Set the trigger condition for the analog trigger on a specific channel +:type chnIdx: int +:param chnIdx: the required channel +:type cond: int +:param cond: the specific trigger condition

    +
    + +
    +
    +setAnalogDelay(delay)ïƒ
    +

    Set the analog trigger delay +:type delay: int +:param delay: the value of the analog delay

    +

    Notes: the delay can have negative values +The negative values are used to place the trigger inside the buffer +The value of the delay represents the number of samples in buffer before the triggered sample +If the value is 0, the triggered sample will be the first one in the buffer +For a buffer of 1000 samples, in order to have the trigger at the middle, you need to set it to -500 +The minimum negative value is -8192

    +

    the delay can have positive values +TBD

    +
    + +
    +
    +setAnalogExternalCondition(chnIdx, cond)ïƒ
    +
    +
    Parameters:
    +
      +
    • chnIdx (int) – : integer - the index of the required channel

    • +
    • cond (int) – : M2K_TRIGGER_CONDITION_DIGITAL

    • +
    +
    +
    +
    + +
    +
    +setAnalogExternalOutSelect(output_select)ïƒ
    +

    Select what should be redirected on the TO (trigger out) pin.

    +
    +

    The options are (none, trigger in, digital in, analog in).

    +
    +
    +
    Parameters:
    +

    output_select (int) –

    : of type M2K_TRIGGER_OUT_SELECT:

    +

    SELECT_TRIGGER_IN - forwards trigger events from TI pin(trigger in);

    +

    SELECT_DIGITAL_IN - forwards trigger events from DigitalIn interface;

    +

    SELECT_ANALOG_IN - forwards trigger events from AnalogIn interface;

    +

    SELECT_NONE - no trigger event is forwarded;

    +

    +
    +
    +

    Notes: Only available from firmware v0.24.

    +
    + +
    +
    +setAnalogHysteresis(chnIdx, hysteresis)ïƒ
    +

    Set the analog hysteresis value for one channel +:type chnIdx: int +:param chnIdx: the required channel +:type hysteresis: float +:param hysteresis: in Volts

    +
    + +
    +
    +setAnalogLevel(chnIdx, v_level)ïƒ
    +

    Set the analog trigger level for one channel +:type chnIdx: int +:param chnIdx: the required channel +:type v_level: float +:param v_level: the analog trigger level in volts

    +
    + +
    +
    +setAnalogLevelRaw(chnIdx, level)ïƒ
    +

    Set the raw analog trigger level for one channel +:type chnIdx: int +:param chnIdx: the required channel +:type level: int +:param level: the raw analog trigger level

    +
    + +
    +
    +setAnalogMode(chnIdx, mode)ïƒ
    +

    Set the mode for the analog trigger on a specific channel +:type chnIdx: int +:param chnIdx: the required channel +:type mode: int +:param mode: the analog trigger mode

    +
    + +
    +
    +setAnalogOutTriggerCondition(condition)ïƒ
    +

    Configures the triggering condition when the source of the AnalogOut trigger event is set to TRIGGER_TI_0. +:type condition: int +:param condition:: of type M2K_TRIGGER_CONDITION_OUT:

    +
    +

    NONE_OUT - disabled;

    +

    LOW_LEVEL_OUT;

    +

    HIGH_LEVEL_OUT;

    +

    ANY_EDGE_OUT;

    +

    RISING_EDGE_OUT;

    +

    FALLING_EDGE_OUT;

    +
    +

    Notes: For the other sources this condition is ignored, the configuration is forwarded by the corresponding interface. +Only available from firmware v0.33.

    +
    + +
    +
    +setAnalogOutTriggerSource(src)ïƒ
    +

    Select which interface triggers the AnalogOut. +:type src: int +:param src:: of type M2K_TRIGGER_SOURCE_OUT:

    +
    +

    TRIGGER_NONE - trigger events are disabled;

    +

    TRIGGER_TI - trigger events on the TI pin will trigger the AnalogOut interface;

    +

    TRIGGER_ADC - trigger events on the AnalogIn interface will trigger the AnalogOut interface;

    +

    TRIGGER_LA - trigger events on the DigitalIn interface will trigger the AnalogOut interface;

    +
    +

    Notes: Only available from firmware v0.33.

    +
    + +
    +
    +setAnalogOutTriggerStatus(status)ïƒ
    +

    Defines the action to be performed when a trigger event occurs. +:type status: int +:param status:: of type M2K_TRIGGER_STATUS_ANALOG_OUT:

    +
    +

    DISABLED - no action is performed when a trigger event occurs;

    +

    START - the AnalogOut interface starts outputting samples;

    +

    STOP - the AnalogOut interface stops outputting samples;

    +
    +

    Notes: Only available from firmware v0.33.

    +
    + +
    +
    +setAnalogSource(src)ïƒ
    +

    Set the source of the analog trigger +:type src: int +:param src: analog trigger source (channel1, channel2, etc)

    +
    + +
    +
    +setAnalogSourceChannel(chnIdx)ïƒ
    +

    Set the channel source of the analog trigger +:type chnIdx: int +:param chnIdx: the index of the channel that should be used

    +
    + +
    +
    +setAnalogStreamingFlag(enable)ïƒ
    +

    Set the streaming flag for the analog part +:type enable: boolean +:param enable: the streaming

    +
    + +
    +
    +setCalibParameters(chnIdx, scaling, vert_offset)ïƒ
    +
    + +
    +
    +setDigitalCondition(*args)ïƒ
    +

    Overload 1:

    +

    Set the trigger condition for the digital trigger on a specific channel +:type chnIdx: int +:param chnIdx: The index of the required channel +:type cond: int +:param cond: the specific trigger condition

    +
    +

    +
    +

    Overload 2:

    +

    Set the trigger condition for the digital trigger on a specific channel +:type chnIdx: int +:param chnIdx: An enumerator corresponding to the index of the required channel +:type cond: int +:param cond: the specific trigger condition

    +
    + +
    +
    +setDigitalDelay(delay)ïƒ
    +

    Set the digital trigger delay +:type delay: int +:param delay: the value of the digital delay

    +

    Notes: the delay can have negative values +The negative values are used to place the trigger inside the buffer +The value of the delay represents the number of samples in buffer before the triggered sample +If the value is 0, the triggered sample will be the first one in the buffer +For a buffer of 1000 samples, in order to have the trigger at the middle, you need to set it to -500 +The minimum negative value is -8192

    +

    the delay can have positive values +TBD

    +
    + +
    +
    +setDigitalExternalCondition(cond)ïƒ
    +
    +
    Parameters:
    +

    cond (int) – : M2K_TRIGGER_CONDITION_DIGITAL

    +
    +
    +
    + +
    +
    +setDigitalMode(mode)ïƒ
    +

    Set the mode for the digital trigger +:type mode: int +:param mode: the digital trigger mode (DIO_OR/DIO_AND)

    +
    + +
    +
    +setDigitalSource(external_src)ïƒ
    +

    Select which interface triggers the DigitalIn. +:type external_src: int +:param external_src:: of type M2K_TRIGGER_SOURCE_DIGITAL:

    +
    +

    SRC_TRIGGER_IN - trigger events on the TI(trigger in) pin trigger the DigitalIn interface;

    +

    SRC_ANALOG_IN - trigger events on the AnalogIn interface trigger the DigitalIn interface;

    +

    SRC_NONE - trigger events on the DigitalIn are conditioned by the internal digital trigger structure;

    +
    +

    Notes: Only available from firmware v0.24.

    +
    + +
    +
    +setDigitalStreamingFlag(enable)ïƒ
    +

    Set the streaming flag for the digital part +:type enable: boolean +:param enable: the streaming

    +

    Notes: The digital condition needs to be set before setting the +digital streaming flag to true, otherwise after setting the streaming +flag to true, a trigger might occur on the old condition.

    +
    + +
    +
    +setHwTriggerSettings(settings)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.M2kModes(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.M2kPowerSupply(*args, **kwargs)ïƒ
    +

    Bases: object

    +
    +
    +anyChannelEnabled()ïƒ
    +

    Check if there is at least one enabled channel

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    On succes, true

    +
    +
    Return type:
    +

    boolean

    +
    +
    Returns:
    +

    Otherwise, false

    +
    +
    +
    + +
    +
    +enableAll(en)ïƒ
    +

    Enable or disable all channels

    +
    +
    Parameters:
    +

    en (boolean) – A boolean value corresponding to the state of the channels

    +
    +
    +
    + +
    +
    +enableChannel(chn, en)ïƒ
    +

    Enable or disable the given channel

    +
    +
    Parameters:
    +
      +
    • chn (int) – The index corresponding to the channel

    • +
    • en (boolean) – A boolean value corresponding to the state of the channel

    • +
    +
    +
    +
    + +
    +
    +powerDownDacs(powerdown)ïƒ
    +
    + +
    +
    +pushChannel(chn, value, calibrated=True)ïƒ
    +

    Set the voltage for the given channel

    +
    +
    Parameters:
    +
      +
    • chn (int) – The index corresponding to the channel

    • +
    • value (float) – The voltage (up to 5V)

    • +
    • calibrated (boolean) – Written values are converted using the calibration +coefficients from the IIO context by default; This boolean flag +specifies whether the coefficients should be used.

    • +
    +
    +
    +
    + +
    +
    +readChannel(chn, calibrated=True)ïƒ
    +

    Retrieve the value of a given channel

    +
    +
    Parameters:
    +
      +
    • chn (int) – The index corresponding to the channel

    • +
    • calibrated (boolean) – Read values are converted using the calibration +coefficients from the IIO context by default; This boolean flag +specifies whether the coefficients should be used.

    • +
    +
    +
    Return type:
    +

    float

    +
    +
    Returns:
    +

    double The voltage transmitted by the given channel

    +
    +
    +
    + +
    +
    +reset()ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +libm2k.NO_SOURCE = 9ïƒ
    +

    NO_SOURCE - block the AnalogIn interface

    +
    + +
    +
    +class libm2k.PairDD(*args)ïƒ
    +

    Bases: object

    +
    +
    +property firstïƒ
    +
    + +
    +
    +property secondïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +libm2k.SELECT_ANALOG_IN = 3ïƒ
    +

    SELECT_ANALOG_IN - forwards trigger events from AnalogIn interface

    +
    + +
    +
    +libm2k.SELECT_DIGITAL_IN = 4ïƒ
    +

    SELECT_DIGITAL_IN - forwards trigger events from DigitalIn interface

    +
    + +
    +
    +libm2k.SELECT_NONE = 0ïƒ
    +

    SELECT_NONE - no trigger event is forwarded

    +
    + +
    +
    +libm2k.SELECT_TRIGGER_IN = 2ïƒ
    +

    SELECT_TRIGGER_IN - forwards trigger events from TI pin(trigger in)

    +
    + +
    +
    +class libm2k.SETTINGSïƒ
    +

    Bases: object

    +

    Triggering system

    +
    +
    +property analog_conditionïƒ
    +

    Analogical trigger’s condition

    +
    + +
    +
    +property delayïƒ
    +

    Trigger’s delay

    +
    + +
    +
    +property digital_conditionïƒ
    +

    Digital trigger’s condition

    +
    + +
    +
    +property hysteresisïƒ
    +

    Trigger’s hysteresis

    +
    + +
    +
    +property levelïƒ
    +

    Trigger’s level

    +
    + +
    +
    +property modeïƒ
    +

    Triggering mode

    +
    + +
    +
    +property raw_levelïƒ
    +

    Trigger’s raw level

    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    +
    +property trigger_sourceïƒ
    +

    Triggering source

    +
    + +
    + +
    +
    +libm2k.SRC_ANALOG_IN = 1ïƒ
    +

    SRC_ANALOG_IN - trigger events on the AnalogIn interface trigger the DigitalIn interface

    +
    + +
    +
    +libm2k.SRC_DIGITAL_IN = 5ïƒ
    +

    SRC_DIGITAL_IN - trigger events on the DigitalIn interface trigger the AnalogIn interface

    +
    + +
    +
    +libm2k.SRC_DISABLED = 3ïƒ
    +

    SRC_DISABLED - block the DigitalIn interface

    +
    + +
    +
    +libm2k.SRC_NONE = 2ïƒ
    +

    SRC_NONE - trigger events on the DigitalIn are conditioned by the internal digital trigger structure

    +
    + +
    +
    +libm2k.SRC_TRIGGER_IN = 0ïƒ
    +

    SRC_TRIGGER_IN - trigger events on the TI(trigger in) pin trigger the DigitalIn interface

    +
    + +
    +
    +class libm2k.SwigPyIterator(*args, **kwargs)ïƒ
    +

    Bases: object

    +
    +
    +advance(n)ïƒ
    +
    + +
    +
    +copy()ïƒ
    +
    + +
    +
    +decr(n=1)ïƒ
    +
    + +
    +
    +distance(x)ïƒ
    +
    + +
    +
    +equal(x)ïƒ
    +
    + +
    +
    +incr(n=1)ïƒ
    +
    + +
    +
    +next()ïƒ
    +
    + +
    +
    +previous()ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    +
    +value()ïƒ
    +
    + +
    + +
    +
    +class libm2k.VectorCtxInfo(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.VectorD(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.VectorI(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.VectorPairDD(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.VectorS(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.VectorStr(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.VectorUS(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.VectorVectorD(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.VectorVectorI(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.VectorVectorS(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.VectorVectorUS(*args)ïƒ
    +

    Bases: object

    +
    +
    +append(x)ïƒ
    +
    + +
    +
    +assign(n, x)ïƒ
    +
    + +
    +
    +back()ïƒ
    +
    + +
    +
    +begin()ïƒ
    +
    + +
    +
    +capacity()ïƒ
    +
    + +
    +
    +clear()ïƒ
    +
    + +
    +
    +empty()ïƒ
    +
    + +
    +
    +end()ïƒ
    +
    + +
    +
    +erase(*args)ïƒ
    +
    + +
    +
    +front()ïƒ
    +
    + +
    +
    +get_allocator()ïƒ
    +
    + +
    +
    +insert(*args)ïƒ
    +
    + +
    +
    +iterator()ïƒ
    +
    + +
    +
    +pop()ïƒ
    +
    + +
    +
    +pop_back()ïƒ
    +
    + +
    +
    +push_back(x)ïƒ
    +
    + +
    +
    +rbegin()ïƒ
    +
    + +
    +
    +rend()ïƒ
    +
    + +
    +
    +reserve(n)ïƒ
    +
    + +
    +
    +resize(*args)ïƒ
    +
    + +
    +
    +size()ïƒ
    +
    + +
    +
    +swap(v)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +class libm2k.channelïƒ
    +

    Bases: object

    +
    +
    +property m_channelïƒ
    +

    A pointer to an iio_channel structure

    +
    + +
    +
    +property m_directionïƒ
    +

    The direction of the channel

    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +libm2k.contextClose(ctx, deinit=True)ïƒ
    +

    Destroy the given context +:type ctx: Context +:param ctx: The context to be destroyed +:type deinit: boolean +:param deinit: If deinit is set to false, running contexts won’t be affected

    +
    + +
    +
    +libm2k.contextCloseAll()ïƒ
    +

    Close all the devices

    +
    + +
    +
    +libm2k.contextOpen(*args)ïƒ
    +

    Overload 1:

    +
    +

    +
    +

    Overload 2:

    +
    +

    +
    +

    Overload 3:

    +
    + +
    +
    +libm2k.enableLogging(enable)ïƒ
    +

    Enable/disable the logging system +:type enable: boolean +:param enable: If true enable, otherwise disable

    +
    + +
    +
    +libm2k.getAllContexts()ïƒ
    +

    List all available contexts +:rtype: std::vector< std::string,std::allocator< std::string > > +:return: A list containing the available contexts

    +
    + +
    +
    +libm2k.getContextsInfo()ïƒ
    +

    List the information about all available contexts +:rtype: std::vector< libm2k::CONTEXT_INFO *,std::allocator< libm2k::CONTEXT_INFO * > > +:return: A list containing the info about available contexts

    +
    + +
    +
    +libm2k.getVersion()ïƒ
    +

    Get library version +:rtype: string +:return: a string containing the libm2k version

    +
    + +
    +
    +class libm2k.ini_device_structïƒ
    +

    Bases: object

    +
    +
    +property hw_nameïƒ
    +
    + +
    +
    +property key_val_pairsïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    + +
    +
    +libm2k.m2kOpen(*args)ïƒ
    +

    Overload 1:

    +

    Open an ADALM2000 based on a given uri +:type uri: string +:param uri: Describe the location of the context +:rtype: M2k +:return: M2k object or nullptr if no ADALM2000 was found/available

    +

    Notes: the uri can be something similar to: +“ip:192.168.2.1†or “usb:1.6.5â€

    +
    +

    +
    +

    Overload 2:

    +

    Open an ADALM2000 based on an existing iio_context and uri +:type ctx: iio_context +:param ctx: A pointer to an iio_context structure +:type uri: string +:param uri: Describe the location of the context +:rtype: M2k +:return: M2k object or nullptr if no ADALM2000 was found/available

    +

    Notes: the uri can be something similar to: +“ip:192.168.2.1†or “usb:1.6.5â€

    +
    +

    +
    +

    Overload 3:

    +

    Open an ADALM2000 +:rtype: M2k +:return: M2k object or nullptr if no ADALM2000 was found/available

    +

    Notes: this will try to open USB connected devices

    +
    + +
    +
    +class libm2k.m2k_exception(*args, **kwargs)ïƒ
    +

    Bases: object

    +
    +
    +file()ïƒ
    +
    + +
    +
    +iioCode()ïƒ
    +
    + +
    +
    +line()ïƒ
    +
    + +
    +
    +static make(what)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    +
    +type()ïƒ
    +
    + +
    +
    +what()ïƒ
    +
    + +
    + +
    +
    +class libm2k.m2k_exception_builder(*args)ïƒ
    +

    Bases: object

    +
    +
    +build()ïƒ
    +
    + +
    +
    +file(fileName)ïƒ
    +
    + +
    +
    +iioCode(code)ïƒ
    +
    + +
    +
    +line(lineNumber)ïƒ
    +
    + +
    +
    +property thisownïƒ
    +

    The membership flag

    +
    + +
    +
    +type(type)ïƒ
    +
    + +
    + +
    +
    +libm2k.m2k_exception_make(what)ïƒ
    +
    + +
    +
    +libm2k.throw_exception(exception)ïƒ
    +
    + +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/python/html/sphinx/build/html/objects.inv b/python/html/sphinx/build/html/objects.inv new file mode 100644 index 00000000..4bf37654 Binary files /dev/null and b/python/html/sphinx/build/html/objects.inv differ diff --git a/python/html/sphinx/build/html/py-modindex.html b/python/html/sphinx/build/html/py-modindex.html new file mode 100644 index 00000000..802f2239 --- /dev/null +++ b/python/html/sphinx/build/html/py-modindex.html @@ -0,0 +1,123 @@ + + + + + + + + Python Module Index — libm2k v0.9.0 documentation + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    +
      +
    • + +
    • +
    • +
    +
    +
    +
    +
    + + +

    Python Module Index

    + +
    + l +
    + + + + + + + +
     
    + l
    + libm2k +
    + + +
    +
    +
    + +
    + +
    +

    © Copyright 2020, Analog Devices Inc..

    +
    + + Built with Sphinx using a + theme + provided by Read the Docs. + + +
    +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/python/html/sphinx/build/html/search.html b/python/html/sphinx/build/html/search.html new file mode 100644 index 00000000..f4eeac8d --- /dev/null +++ b/python/html/sphinx/build/html/search.html @@ -0,0 +1,120 @@ + + + + + + + + Search — libm2k v0.9.0 documentation + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    +
      +
    • + +
    • +
    • +
    +
    +
    +
    +
    + + + + +
    + +
    + +
    +
    +
    + +
    + +
    +

    © Copyright 2020, Analog Devices Inc..

    +
    + + Built with Sphinx using a + theme + provided by Read the Docs. + + +
    +
    +
    +
    +
    + + + + + + + + + \ No newline at end of file diff --git a/python/html/sphinx/build/html/searchindex.js b/python/html/sphinx/build/html/searchindex.js new file mode 100644 index 00000000..7941583a --- /dev/null +++ b/python/html/sphinx/build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["examples", "index", "libm2k"], "filenames": ["examples.rst", "index.rst", "libm2k.rst"], "titles": ["libm2k Examples", "libm2k documentation - Library for interfacing with the ADALM2000", "libm2k Module"], "terms": {"gener": [0, 1, 2], "data": [0, 2], "us": [0, 2], "adalm2000": [0, 2], "dac": [0, 2], "acquir": 0, "adc": [0, 2], "thi": [0, 2], "assum": 0, "follow": 0, "connect": [0, 2], "w1": 0, "1": [0, 2], "w2": 0, "2": [0, 2], "gnd": 0, "The": [0, 2], "applic": 0, "sine": 0, "triangular": 0, "wave": 0, "signal": [0, 2], "i": [0, 2], "fed": 0, "back": [0, 2], "analog": [0, 1, 2], "input": [0, 2], "voltag": [0, 2], "valu": [0, 2], "ar": [0, 2], "displai": 0, "screen": 0, "import": 0, "matplotlib": 0, "pyplot": 0, "plt": 0, "time": [0, 2], "numpi": 0, "np": 0, "ctx": [0, 2], "m2kopen": [0, 1, 2], "none": [0, 2], "print": 0, "error": [0, 2], "No": [0, 2], "devic": [0, 2], "avail": [0, 2], "your": 0, "pc": 0, "exit": 0, "calibrateadc": [0, 2], "calibratedac": [0, 2], "ain": 0, "getanalogin": [0, 2], "aout": 0, "getanalogout": [0, 2], "trig": 0, "gettrigg": [0, 2], "enablechannel": [0, 2], "0": [0, 2], "true": [0, 2], "setsampler": [0, 2], "100000": 0, "setrang": [0, 2], "10": 0, "uncom": 0, "block": [0, 2], "enabl": [0, 2], "trigger": [0, 2], "setanalogsourc": [0, 2], "channel": [0, 1, 2], "sourc": [0, 2], "setanalogcondit": [0, 2], "rising_edge_analog": 0, "setanaloglevel": [0, 2], "5": [0, 2], "set": [0, 1, 2], "level": [0, 2], "setanalogdelai": [0, 2], "center": 0, "setanalogmod": [0, 2], "750000": 0, "x": [0, 2], "linspac": 0, "pi": 0, "1024": [0, 2], "buffer1": 0, "00": 0, "buffer2": 0, "sin": 0, "buffer": [0, 2], "setcycl": [0, 2], "push": [0, 2], "rang": [0, 2], "get": [0, 2], "sampl": [0, 2], "quit": 0, "getsampl": [0, 2], "1000": [0, 2], "plot": 0, "show": 0, "sleep": 0, "contextclos": [0, 1, 2], "other": [0, 2], "python": 0, "repositori": 0, "modul": 1, "alwai": [1, 2], "calibration_paramet": [1, 2], "channel_1": [1, 2], "channel_2": [1, 2], "context_info": [1, 2], "context": [1, 2], "contextbuild": [1, 2], "contextbuilder_contextclos": [1, 2], "contextbuilder_contextcloseal": [1, 2], "contextbuilder_contextopen": [1, 2], "contextbuilder_enablelog": [1, 2], "contextbuilder_getallcontext": [1, 2], "contextbuilder_getcontextsinfo": [1, 2], "contextbuilder_getvers": [1, 2], "contextbuilder_m2kopen": [1, 2], "dmm": [1, 2], "dmmread": [1, 2], "dmm_read": [1, 2], "extern": [1, 2], "fmcomm": [1, 2], "genericanalogin": [1, 2], "genericanalogout": [1, 2], "iio_context_vers": [1, 2], "iio_object": [1, 2], "iiobuff": [1, 2], "iiochannel": [1, 2], "iiodevic": [1, 2], "m2k": [1, 2], "m2kanalogin": [1, 2], "m2kanalogout": [1, 2], "m2kcalibr": [1, 2], "m2kconditionanalog": [1, 2], "m2kconditiondigit": [1, 2], "m2kdigit": [1, 2], "m2khardwaretrigg": [1, 2], "m2kmode": [1, 2], "m2kpowersuppli": [1, 2], "no_sourc": [1, 2], "pairdd": [1, 2], "select_analog_in": [1, 2], "select_digital_in": [1, 2], "select_non": [1, 2], "select_trigger_in": [1, 2], "src_analog_in": [1, 2], "src_digital_in": [1, 2], "src_disabl": [1, 2], "src_none": [1, 2], "src_trigger_in": [1, 2], "swigpyiter": [1, 2], "vectorctxinfo": [1, 2], "vectord": [1, 2], "vectori": [1, 2], "vectorpairdd": [1, 2], "vector": [1, 2], "vectorstr": [1, 2], "vectoru": [1, 2], "vectorvectord": [1, 2], "vectorvectori": [1, 2], "vectorvector": [1, 2], "vectorvectoru": [1, 2], "contextcloseal": [1, 2], "contextopen": [1, 2], "enablelog": [1, 2], "getallcontext": [1, 2], "getcontextsinfo": [1, 2], "getvers": [1, 2], "ini_device_struct": [1, 2], "m2k_except": [1, 2], "m2k_exception_build": [1, 2], "m2k_exception_mak": [1, 2], "throw_except": [1, 2], "exampl": 1, "index": [1, 2], "search": 1, "page": 1, "disabl": 2, "condit": 2, "specifi": 2, "onli": 2, "ch1": 2, "ch2": 2, "class": 2, "base": 2, "object": 2, "calibr": 2, "paramet": 2, "properti": 2, "adc_gain_ch_1": 2, "gain": 2, "adc_gain_ch_2": 2, "adc_offset_ch_1": 2, "offset": 2, "adc_offset_ch_2": 2, "dac_a_gain": 2, "dac_a_offset": 2, "dac_b_gain": 2, "dac_b_offset": 2, "thisown": 2, "membership": 2, "flag": 2, "event": 2, "analogin": 2, "interfac": 2, "addit": 2, "inform": 2, "about": 2, "id_product": 2, "product": 2, "id": 2, "extract": 2, "from": 2, "iio": 2, "id_vendor": 2, "vendor": 2, "manufactur": 2, "name": 2, "serial": 2, "number": 2, "uri": 2, "arg": 2, "kwarg": 2, "deiniti": 2, "getalldevic": 2, "retriev": 2, "all": 2, "rtype": 2, "std": 2, "unordered_set": 2, "string": 2, "return": 2, "list": 2, "contain": 2, "getalldmm": 2, "alloc": 2, "A": 2, "getavailablecontextattribut": 2, "attribut": 2, "getcontextattributevalu": 2, "attr": 2, "one": 2, "type": 2, "param": 2, "requir": 2, "On": 2, "success": 2, "rais": 2, "throw": 2, "an": 2, "except": 2, "found": 2, "getcontextdescript": 2, "detail": 2, "descript": 2, "current": 2, "getdmm": 2, "overload": 2, "certain": 2, "int": 2, "correspond": 2, "pointer": 2, "nullptr": 2, "which": 2, "ha": 2, "provid": 2, "getdmmcount": 2, "unsign": 2, "repres": 2, "getfirmwarevers": 2, "firmwar": 2, "version": 2, "getiiocontext": 2, "iio_context": 2, "getiiocontextvers": 2, "backend": 2, "struct": 2, "getserialnumb": 2, "geturi": 2, "ex": 2, "usb": 2, "3": 2, "ip": 2, "192": 2, "168": 2, "logallattribut": 2, "log": 2, "note": 2, "system": 2, "should": 2, "reset": 2, "settimeout": 2, "timeout": 2, "o": 2, "oper": 2, "posit": 2, "integ": 2, "millisecond": 2, "after": 2, "occur": 2, "togener": 2, "convert": 2, "possibl": 2, "tom2k": 2, "static": 2, "arg1": 2, "deinit": 2, "getallchannel": 2, "getnam": 2, "": 2, "readal": 2, "structur": 2, "each": 2, "readchannel": 2, "given": 2, "chn_name": 2, "append": 2, "assign": 2, "n": 2, "begin": 2, "capac": 2, "clear": 2, "empti": 2, "end": 2, "eras": 2, "front": 2, "get_alloc": 2, "insert": 2, "iter": 2, "pop": 2, "pop_back": 2, "push_back": 2, "rbegin": 2, "rend": 2, "reserv": 2, "resiz": 2, "size": 2, "swap": 2, "v": 2, "unit_nam": 2, "unit": 2, "measur": 2, "unit_symbol": 2, "symbol": 2, "ti": 2, "getanalogincount": 2, "getanalogoutcount": 2, "getavailablesampler": 2, "getdevicenam": 2, "getiioobject": 2, "getmaximumsampler": 2, "getnbchannel": 2, "getsampler": 2, "getsamplesinterleav": 2, "nb_sampl": 2, "getsamplesrawinterleav": 2, "setkernelbufferscount": 2, "count": 2, "chnidx": 2, "getcycl": 2, "chn": 2, "ischannelen": 2, "pushraw": 2, "stop": 2, "git_tag": 2, "git": 2, "tag": 2, "major": 2, "minor": 2, "buffers_rx": 2, "buffers_tx": 2, "channels_in": 2, "channels_out": 2, "boolean": 2, "succc": 2, "otherwis": 2, "fals": 2, "calibratefromcontext": 2, "both": 2, "predefin": 2, "locat": 2, "float": 2, "closest": 2, "temperatur": 2, "lookup": 2, "tabl": 2, "v0": 2, "26": 2, "getadccalibrationgain": 2, "getadccalibrationoffset": 2, "getallanalogin": 2, "getallanalogout": 2, "null": 2, "dev_nam": 2, "If": 2, "doe": 2, "ani": 2, "analogout": 2, "getdaccalibrationgain": 2, "getdaccalibrationoffset": 2, "getdigit": 2, "digit": 2, "exc_invalid_paramet": 2, "getlut": 2, "map": 2, "doubl": 2, "shared_ptr": 2, "less": 2, "pair": 2, "const": 2, "getl": 2, "state": 2, "led": 2, "turn": 2, "getpowersuppli": 2, "powersuppli": 2, "power": 2, "suppli": 2, "hascontextcalibr": 2, "check": 2, "can": 2, "perform": 2, "hasmixedsign": 2, "mix": 2, "acquisit": 2, "iscalibr": 2, "board": 2, "wa": 2, "default": 2, "coeffici": 2, "maximum": 2, "sampler": 2, "oversampl": 2, "ratio": 2, "low": 2, "kernel": 2, "4": 2, "out": 2, "tx": 2, "rx": 2, "need": 2, "afterward": 2, "resetcalibr": 2, "setadccalibrationgain": 2, "overrid": 2, "run": 2, "limit": 2, "hardwar": 2, "setadccalibrationoffset": 2, "setdaccalibrationgain": 2, "setdaccalibrationoffset": 2, "setl": 2, "off": 2, "For": 2, "startmixedsignalacquisit": 2, "initi": 2, "stopmixedsignalacquisit": 2, "cancelacquisit": 2, "cancel": 2, "ongo": 2, "convertrawtovolt": 2, "raw": 2, "volt": 2, "convertvoltstoraw": 2, "getavailablerang": 2, "getchannelnam": 2, "getfiltercompens": 2, "filter": 2, "compens": 2, "rate": 2, "gethysteresisrang": 2, "bound": 2, "hysteresi": 2, "enumer": 2, "lower": 2, "upper": 2, "access": 2, "when": 2, "debug": 2, "directli": 2, "libiio": 2, "getkernelbufferscount": 2, "previous": 2, "save": 2, "session": 2, "getoversamplingratio": 2, "global": 2, "chn_idx": 2, "getrang": 2, "getrangelimit": 2, "specif": 2, "due": 2, "must": 2, "multipl": 2, "greater": 2, "than": 2, "16": 2, "refer": 2, "own": 2, "creat": 2, "client": 2, "clean": 2, "fill": 2, "nb_samples_per_channel": 2, "interleav": 2, "befor": 2, "automat": 2, "arrai": 2, "finish": 2, "getsamplesraw": 2, "getscalingfactor": 2, "ch": 2, "scale": 2, "factor": 2, "handler": 2, "getvalueforrang": 2, "numer": 2, "getverticaloffset": 2, "getvoltag": 2, "averag": 2, "getvoltageraw": 2, "short": 2, "setoversamplingratio": 2, "min": 2, "max": 2, "setverticaloffset": 2, "vertoffset": 2, "vertic": 2, "startacquisit": 2, "start": 2, "stopacquisit": 2, "destroi": 2, "cancelbuff": 2, "write": 2, "exc_out_of_rang": 2, "getbufferrearmontrigg": 2, "control": 2, "rearm": 2, "share": 2, "between": 2, "33": 2, "cyclic": 2, "mode": 2, "getsynceddma": 2, "getsyncedstartdma": 2, "ispushdon": 2, "non": 2, "done": 2, "process": 2, "function": 2, "take": 2, "consider": 2, "new": 2, "without": 2, "unplug": 2, "modifi": 2, "previou": 2, "call": 2, "order": 2, "comput": 2, "again": 2, "newer": 2, "23": 2, "send": 2, "stream": 2, "won": 2, "t": 2, "synchron": 2, "per": 2, "repeat": 2, "until": 2, "reach": 2, "pushrawbyt": 2, "setbufferrearmontrigg": 2, "allow": 2, "sequenti": 2, "output": 2, "sent": 2, "onc": 2, "opt": 2, "concaten": 2, "small": 2, "singl": 2, "avoid": 2, "problem": 2, "In": 2, "continu": 2, "everi": 2, "idl": 2, "first": 2, "next": 2, "en": 2, "oversampling_ratio": 2, "setsynceddma": 2, "setsyncedstartdma": 2, "setvoltag": 2, "actual": 2, "scenario": 2, "where": 2, "dma": 2, "activ": 2, "revert": 2, "setvoltageraw": 2, "down": 2, "calibrateal": 2, "cancelcalibr": 2, "getadccalibr": 2, "getadcgain": 2, "getadcoffset": 2, "getdaccalibr": 2, "getdacgain": 2, "getdacoffset": 2, "isiniti": 2, "setadcgain": 2, "setadcoffset": 2, "setdacgain": 2, "setdacoffset": 2, "anychannelen": 2, "dir": 2, "least": 2, "direct": 2, "cancelbufferout": 2, "enableallout": 2, "affect": 2, "getdirect": 2, "dio_direct": 2, "indic": 2, "getnbchannelsin": 2, "IN": 2, "getnbchannelsout": 2, "getoutputmod": 2, "getsampleratein": 2, "getsamplerateout": 2, "getsamplesp": 2, "getvalueraw": 2, "dio_level": 2, "isclocksourceextern": 2, "clocksourc": 2, "pushbyt": 2, "resetratemux": 2, "setdirect": 2, "mask": 2, "bitmask": 2, "bit": 2, "same": 2, "setexternalclocksourc": 2, "intern": 2, "setkernelbufferscountin": 2, "setkernelbufferscountout": 2, "setoutputmod": 2, "setratemux": 2, "forc": 2, "setsampleratein": 2, "setsamplerateout": 2, "setvalueraw": 2, "stopbufferout": 2, "getanalogcondit": 2, "getanalogdelai": 2, "delai": 2, "have": 2, "neg": 2, "place": 2, "insid": 2, "middl": 2, "you": 2, "500": 2, "minimum": 2, "8192": 2, "tbd": 2, "getanalogexternalcondit": 2, "m2k_trigger_condition_digit": 2, "getanalogexternaloutselect": 2, "forward": 2, "TO": 2, "pin": 2, "m2k_trigger_out_select": 2, "24": 2, "getanaloghysteresi": 2, "getanaloglevel": 2, "getanaloglevelraw": 2, "getanalogmod": 2, "getanalogouttriggercondit": 2, "m2k_trigger_condition_out": 2, "none_out": 2, "low_level_out": 2, "high_level_out": 2, "any_edge_out": 2, "rising_edge_out": 2, "falling_edge_out": 2, "getanalogouttriggersourc": 2, "m2k_trigger_source_out": 2, "trigger_non": 2, "trigger_ti": 2, "trigger_adc": 2, "trigger_la": 2, "getanalogouttriggerstatu": 2, "action": 2, "m2k_trigger_status_analog_out": 2, "getanalogsourc": 2, "channel1": 2, "channel2": 2, "etc": 2, "getanalogsourcechannel": 2, "getanalogstreamingflag": 2, "part": 2, "whether": 2, "getcurrenthwset": 2, "getdigitalcondit": 2, "getdigitaldelai": 2, "getdigitalexternalcondit": 2, "getdigitalmod": 2, "dio_or": 2, "dio_and": 2, "getdigitalsourc": 2, "digitalin": 2, "m2k_trigger_source_digit": 2, "getdigitalstreamingflag": 2, "hascrossinstrumenttrigg": 2, "hasexternaltriggerin": 2, "hasexternaltriggerout": 2, "cond": 2, "setanalogexternalcondit": 2, "setanalogexternaloutselect": 2, "output_select": 2, "select": 2, "what": 2, "redirect": 2, "option": 2, "setanaloghysteresi": 2, "v_level": 2, "setanaloglevelraw": 2, "setanalogouttriggercondit": 2, "configur": 2, "trigger_ti_0": 2, "ignor": 2, "setanalogouttriggersourc": 2, "src": 2, "setanalogouttriggerstatu": 2, "statu": 2, "defin": 2, "setanalogsourcechannel": 2, "setanalogstreamingflag": 2, "setcalibparamet": 2, "vert_offset": 2, "setdigitalcondit": 2, "setdigitaldelai": 2, "setdigitalexternalcondit": 2, "setdigitalmod": 2, "setdigitalsourc": 2, "external_src": 2, "setdigitalstreamingflag": 2, "might": 2, "old": 2, "sethwtriggerset": 2, "succ": 2, "enableal": 2, "powerdowndac": 2, "powerdown": 2, "pushchannel": 2, "up": 2, "5v": 2, "written": 2, "read": 2, "transmit": 2, "9": 2, "second": 2, "analog_condit": 2, "digital_condit": 2, "raw_level": 2, "trigger_sourc": 2, "advanc": 2, "copi": 2, "decr": 2, "distanc": 2, "equal": 2, "incr": 2, "m_channel": 2, "iio_channel": 2, "m_direct": 2, "close": 2, "info": 2, "librari": 2, "hw_name": 2, "key_val_pair": 2, "open": 2, "describ": 2, "someth": 2, "similar": 2, "6": 2, "exist": 2, "try": 2, "file": 2, "iiocod": 2, "line": 2, "make": 2, "build": 2, "filenam": 2, "code": 2, "linenumb": 2}, "objects": {"": [[2, 0, 0, "-", "libm2k"]], "libm2k": [[2, 1, 1, "", "ALWAYS"], [2, 1, 1, "", "ANALOG"], [2, 2, 1, "", "CALIBRATION_PARAMETERS"], [2, 1, 1, "", "CHANNEL_1"], [2, 1, 1, "", "CHANNEL_2"], [2, 2, 1, "", "CONTEXT_INFO"], [2, 2, 1, "", "Context"], [2, 2, 1, "", "ContextBuilder"], [2, 5, 1, "", "ContextBuilder_contextClose"], [2, 5, 1, "", "ContextBuilder_contextCloseAll"], [2, 5, 1, "", "ContextBuilder_contextOpen"], [2, 5, 1, "", "ContextBuilder_enableLogging"], [2, 5, 1, "", "ContextBuilder_getAllContexts"], [2, 5, 1, "", "ContextBuilder_getContextsInfo"], [2, 5, 1, "", "ContextBuilder_getVersion"], [2, 5, 1, "", "ContextBuilder_m2kOpen"], [2, 2, 1, "", "DMM"], [2, 2, 1, "", "DMMReading"], [2, 2, 1, "", "DMM_READING"], [2, 2, 1, "", "DMMs"], [2, 1, 1, "", "EXTERNAL"], [2, 2, 1, "", "FMCOMMS"], [2, 2, 1, "", "Generic"], [2, 2, 1, "", "GenericAnalogIn"], [2, 2, 1, "", "GenericAnalogOut"], [2, 2, 1, "", "IIO_CONTEXT_VERSION"], [2, 2, 1, "", "IIO_OBJECTS"], [2, 2, 1, "", "IioBuffers"], [2, 2, 1, "", "IioChannels"], [2, 2, 1, "", "IioDevices"], [2, 2, 1, "", "M2k"], [2, 2, 1, "", "M2kAnalogIn"], [2, 2, 1, "", "M2kAnalogIns"], [2, 2, 1, "", "M2kAnalogOut"], [2, 2, 1, "", "M2kAnalogOuts"], [2, 2, 1, "", "M2kCalibration"], [2, 2, 1, "", "M2kConditionAnalog"], [2, 2, 1, "", "M2kConditionDigital"], [2, 2, 1, "", "M2kDigital"], [2, 2, 1, "", "M2kHardwareTrigger"], [2, 2, 1, "", "M2kModes"], [2, 2, 1, "", "M2kPowerSupply"], [2, 1, 1, "", "NO_SOURCE"], [2, 2, 1, "", "PairDD"], [2, 1, 1, "", "SELECT_ANALOG_IN"], [2, 1, 1, "", "SELECT_DIGITAL_IN"], [2, 1, 1, "", "SELECT_NONE"], [2, 1, 1, "", "SELECT_TRIGGER_IN"], [2, 2, 1, "", "SETTINGS"], [2, 1, 1, "", "SRC_ANALOG_IN"], [2, 1, 1, "", "SRC_DIGITAL_IN"], [2, 1, 1, "", "SRC_DISABLED"], [2, 1, 1, "", "SRC_NONE"], [2, 1, 1, "", "SRC_TRIGGER_IN"], [2, 2, 1, "", "SwigPyIterator"], [2, 2, 1, "", "VectorCtxInfo"], [2, 2, 1, "", "VectorD"], [2, 2, 1, "", "VectorI"], [2, 2, 1, "", "VectorPairDD"], [2, 2, 1, "", "VectorS"], [2, 2, 1, "", "VectorStr"], [2, 2, 1, "", "VectorUS"], [2, 2, 1, "", "VectorVectorD"], [2, 2, 1, "", "VectorVectorI"], [2, 2, 1, "", "VectorVectorS"], [2, 2, 1, "", "VectorVectorUS"], [2, 2, 1, "", "channel"], [2, 5, 1, "", "contextClose"], [2, 5, 1, "", "contextCloseAll"], [2, 5, 1, "", "contextOpen"], [2, 5, 1, "", "enableLogging"], [2, 5, 1, "", "getAllContexts"], [2, 5, 1, "", "getContextsInfo"], [2, 5, 1, "", "getVersion"], [2, 2, 1, "", "ini_device_struct"], [2, 5, 1, "", "m2kOpen"], [2, 2, 1, "", "m2k_exception"], [2, 2, 1, "", "m2k_exception_builder"], [2, 5, 1, "", "m2k_exception_make"], [2, 5, 1, "", "throw_exception"]], "libm2k.CALIBRATION_PARAMETERS": [[2, 3, 1, "", "adc_gain_ch_1"], [2, 3, 1, "", "adc_gain_ch_2"], [2, 3, 1, "", "adc_offset_ch_1"], [2, 3, 1, "", "adc_offset_ch_2"], [2, 3, 1, "", "dac_a_gain"], [2, 3, 1, "", "dac_a_offset"], [2, 3, 1, "", "dac_b_gain"], [2, 3, 1, "", "dac_b_offset"], [2, 3, 1, "", "thisown"]], "libm2k.CONTEXT_INFO": [[2, 3, 1, "", "id_product"], [2, 3, 1, "", "id_vendor"], [2, 3, 1, "", "manufacturer"], [2, 3, 1, "", "product"], [2, 3, 1, "", "serial"], [2, 3, 1, "", "thisown"], [2, 3, 1, "", "uri"]], "libm2k.Context": [[2, 4, 1, "", "deinitialize"], [2, 4, 1, "", "getAllDevices"], [2, 4, 1, "", "getAllDmm"], [2, 4, 1, "", "getAvailableContextAttributes"], [2, 4, 1, "", "getContextAttributeValue"], [2, 4, 1, "", "getContextDescription"], [2, 4, 1, "", "getDMM"], [2, 4, 1, "", "getDmmCount"], [2, 4, 1, "", "getFirmwareVersion"], [2, 4, 1, "", "getIioContext"], [2, 4, 1, "", "getIioContextVersion"], [2, 4, 1, "", "getSerialNumber"], [2, 4, 1, "", "getUri"], [2, 4, 1, "", "logAllAttributes"], [2, 4, 1, "", "reset"], [2, 4, 1, "", "setTimeout"], [2, 3, 1, "", "thisown"], [2, 4, 1, "", "toGeneric"], [2, 4, 1, "", "toM2k"]], "libm2k.ContextBuilder": [[2, 4, 1, "", "contextClose"], [2, 4, 1, "", "contextCloseAll"], [2, 4, 1, "", "contextOpen"], [2, 4, 1, "", "enableLogging"], [2, 4, 1, "", "getAllContexts"], [2, 4, 1, "", "getContextsInfo"], [2, 4, 1, "", "getVersion"], [2, 4, 1, "", "m2kOpen"], [2, 3, 1, "", "thisown"]], "libm2k.DMM": [[2, 4, 1, "", "getAllChannels"], [2, 4, 1, "", "getName"], [2, 4, 1, "", "readAll"], [2, 4, 1, "", "readChannel"], [2, 4, 1, "", "reset"], [2, 3, 1, "", "thisown"]], "libm2k.DMMReading": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.DMM_READING": [[2, 3, 1, "", "id"], [2, 3, 1, "", "name"], [2, 3, 1, "", "thisown"], [2, 3, 1, "", "unit_name"], [2, 3, 1, "", "unit_symbol"], [2, 3, 1, "", "value"]], "libm2k.DMMs": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.FMCOMMS": [[2, 3, 1, "", "thisown"]], "libm2k.Generic": [[2, 4, 1, "", "getAnalogIn"], [2, 4, 1, "", "getAnalogInCount"], [2, 4, 1, "", "getAnalogOut"], [2, 4, 1, "", "getAnalogOutCount"], [2, 3, 1, "", "thisown"]], "libm2k.GenericAnalogIn": [[2, 4, 1, "", "enableChannel"], [2, 4, 1, "", "getAvailableSampleRates"], [2, 4, 1, "", "getDeviceName"], [2, 4, 1, "", "getIioObjects"], [2, 4, 1, "", "getMaximumSamplerate"], [2, 4, 1, "", "getNbChannels"], [2, 4, 1, "", "getSampleRate"], [2, 4, 1, "", "getSamplesInterleaved"], [2, 4, 1, "", "getSamplesRawInterleaved"], [2, 4, 1, "", "setKernelBuffersCount"], [2, 4, 1, "", "setSampleRate"], [2, 3, 1, "", "thisown"]], "libm2k.GenericAnalogOut": [[2, 4, 1, "", "enableChannel"], [2, 4, 1, "", "getAvailableSampleRates"], [2, 4, 1, "", "getCyclic"], [2, 4, 1, "", "getName"], [2, 4, 1, "", "getSampleRate"], [2, 4, 1, "", "isChannelEnabled"], [2, 4, 1, "", "push"], [2, 4, 1, "", "pushRaw"], [2, 4, 1, "", "setCyclic"], [2, 4, 1, "", "setSampleRate"], [2, 4, 1, "", "stop"], [2, 3, 1, "", "thisown"]], "libm2k.IIO_CONTEXT_VERSION": [[2, 3, 1, "", "git_tag"], [2, 3, 1, "", "major"], [2, 3, 1, "", "minor"], [2, 3, 1, "", "thisown"]], "libm2k.IIO_OBJECTS": [[2, 3, 1, "", "buffers_rx"], [2, 3, 1, "", "buffers_tx"], [2, 3, 1, "", "channels_in"], [2, 3, 1, "", "channels_out"], [2, 3, 1, "", "context"], [2, 3, 1, "", "devices"], [2, 3, 1, "", "thisown"]], "libm2k.IioBuffers": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.IioChannels": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.IioDevices": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.M2k": [[2, 4, 1, "", "calibrate"], [2, 4, 1, "", "calibrateADC"], [2, 4, 1, "", "calibrateDAC"], [2, 4, 1, "", "calibrateFromContext"], [2, 4, 1, "", "deinitialize"], [2, 4, 1, "", "getAdcCalibrationGain"], [2, 4, 1, "", "getAdcCalibrationOffset"], [2, 4, 1, "", "getAllAnalogIn"], [2, 4, 1, "", "getAllAnalogOut"], [2, 4, 1, "", "getAnalogIn"], [2, 4, 1, "", "getAnalogOut"], [2, 4, 1, "", "getDacCalibrationGain"], [2, 4, 1, "", "getDacCalibrationOffset"], [2, 4, 1, "", "getDigital"], [2, 4, 1, "", "getLUT"], [2, 4, 1, "", "getLed"], [2, 4, 1, "", "getPowerSupply"], [2, 4, 1, "", "hasContextCalibration"], [2, 4, 1, "", "hasMixedSignal"], [2, 4, 1, "", "isCalibrated"], [2, 4, 1, "", "reset"], [2, 4, 1, "", "resetCalibration"], [2, 4, 1, "", "setAdcCalibrationGain"], [2, 4, 1, "", "setAdcCalibrationOffset"], [2, 4, 1, "", "setDacCalibrationGain"], [2, 4, 1, "", "setDacCalibrationOffset"], [2, 4, 1, "", "setLed"], [2, 4, 1, "", "startMixedSignalAcquisition"], [2, 4, 1, "", "stopMixedSignalAcquisition"], [2, 3, 1, "", "thisown"]], "libm2k.M2kAnalogIn": [[2, 4, 1, "", "cancelAcquisition"], [2, 4, 1, "", "convertRawToVolts"], [2, 4, 1, "", "convertVoltsToRaw"], [2, 4, 1, "", "enableChannel"], [2, 4, 1, "", "getAvailableRanges"], [2, 4, 1, "", "getAvailableSampleRates"], [2, 4, 1, "", "getChannelName"], [2, 4, 1, "", "getFilterCompensation"], [2, 4, 1, "", "getHysteresisRange"], [2, 4, 1, "", "getIioObjects"], [2, 4, 1, "", "getKernelBuffersCount"], [2, 4, 1, "", "getMaximumSamplerate"], [2, 4, 1, "", "getName"], [2, 4, 1, "", "getNbChannels"], [2, 4, 1, "", "getOversamplingRatio"], [2, 4, 1, "", "getRange"], [2, 4, 1, "", "getRangeLimits"], [2, 4, 1, "", "getSampleRate"], [2, 4, 1, "", "getSamples"], [2, 4, 1, "", "getSamplesInterleaved"], [2, 4, 1, "", "getSamplesRaw"], [2, 4, 1, "", "getSamplesRawInterleaved"], [2, 4, 1, "", "getScalingFactor"], [2, 4, 1, "", "getTrigger"], [2, 4, 1, "", "getValueForRange"], [2, 4, 1, "", "getVerticalOffset"], [2, 4, 1, "", "getVoltage"], [2, 4, 1, "", "getVoltageRaw"], [2, 4, 1, "", "isChannelEnabled"], [2, 4, 1, "", "reset"], [2, 4, 1, "", "setKernelBuffersCount"], [2, 4, 1, "", "setOversamplingRatio"], [2, 4, 1, "", "setRange"], [2, 4, 1, "", "setSampleRate"], [2, 4, 1, "", "setVerticalOffset"], [2, 4, 1, "", "startAcquisition"], [2, 4, 1, "", "stopAcquisition"], [2, 3, 1, "", "thisown"]], "libm2k.M2kAnalogIns": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.M2kAnalogOut": [[2, 4, 1, "", "cancelBuffer"], [2, 4, 1, "", "convertRawToVolts"], [2, 4, 1, "", "convertVoltsToRaw"], [2, 4, 1, "", "enableChannel"], [2, 4, 1, "", "getAvailableSampleRates"], [2, 4, 1, "", "getBufferRearmOnTrigger"], [2, 4, 1, "", "getChannelName"], [2, 4, 1, "", "getCyclic"], [2, 4, 1, "", "getFilterCompensation"], [2, 4, 1, "", "getIioObjects"], [2, 4, 1, "", "getKernelBuffersCount"], [2, 4, 1, "", "getMaximumSamplerate"], [2, 4, 1, "", "getNbChannels"], [2, 4, 1, "", "getOversamplingRatio"], [2, 4, 1, "", "getSampleRate"], [2, 4, 1, "", "getScalingFactor"], [2, 4, 1, "", "getSyncedDma"], [2, 4, 1, "", "getSyncedStartDma"], [2, 4, 1, "", "getTrigger"], [2, 4, 1, "", "isChannelEnabled"], [2, 4, 1, "", "isPushDone"], [2, 4, 1, "", "push"], [2, 4, 1, "", "pushRaw"], [2, 4, 1, "", "pushRawBytes"], [2, 4, 1, "", "reset"], [2, 4, 1, "", "setBufferRearmOnTrigger"], [2, 4, 1, "", "setCyclic"], [2, 4, 1, "", "setKernelBuffersCount"], [2, 4, 1, "", "setOversamplingRatio"], [2, 4, 1, "", "setSampleRate"], [2, 4, 1, "", "setSyncedDma"], [2, 4, 1, "", "setSyncedStartDma"], [2, 4, 1, "", "setVoltage"], [2, 4, 1, "", "setVoltageRaw"], [2, 4, 1, "", "stop"], [2, 3, 1, "", "thisown"]], "libm2k.M2kAnalogOuts": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.M2kCalibration": [[2, 4, 1, "", "calibrateADC"], [2, 4, 1, "", "calibrateAll"], [2, 4, 1, "", "calibrateDAC"], [2, 4, 1, "", "cancelCalibration"], [2, 4, 1, "", "getAdcCalibrated"], [2, 4, 1, "", "getAdcGain"], [2, 4, 1, "", "getAdcOffset"], [2, 4, 1, "", "getDacCalibrated"], [2, 4, 1, "", "getDacGain"], [2, 4, 1, "", "getDacOffset"], [2, 4, 1, "", "initialize"], [2, 4, 1, "", "isInitialized"], [2, 4, 1, "", "resetCalibration"], [2, 4, 1, "", "setAdcGain"], [2, 4, 1, "", "setAdcOffset"], [2, 4, 1, "", "setDacGain"], [2, 4, 1, "", "setDacOffset"], [2, 3, 1, "", "thisown"]], "libm2k.M2kConditionAnalog": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.M2kConditionDigital": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.M2kDigital": [[2, 4, 1, "", "anyChannelEnabled"], [2, 4, 1, "", "cancelAcquisition"], [2, 4, 1, "", "cancelBufferOut"], [2, 4, 1, "", "enableAllOut"], [2, 4, 1, "", "enableChannel"], [2, 4, 1, "", "getCyclic"], [2, 4, 1, "", "getDirection"], [2, 4, 1, "", "getIioObjects"], [2, 4, 1, "", "getNbChannelsIn"], [2, 4, 1, "", "getNbChannelsOut"], [2, 4, 1, "", "getOutputMode"], [2, 4, 1, "", "getSampleRateIn"], [2, 4, 1, "", "getSampleRateOut"], [2, 4, 1, "", "getSamples"], [2, 4, 1, "", "getSamplesP"], [2, 4, 1, "", "getTrigger"], [2, 4, 1, "", "getValueRaw"], [2, 4, 1, "", "isClocksourceExternal"], [2, 4, 1, "", "push"], [2, 4, 1, "", "pushBytes"], [2, 4, 1, "", "reset"], [2, 4, 1, "", "resetRateMux"], [2, 4, 1, "", "setCyclic"], [2, 4, 1, "", "setDirection"], [2, 4, 1, "", "setExternalClocksource"], [2, 4, 1, "", "setKernelBuffersCountIn"], [2, 4, 1, "", "setKernelBuffersCountOut"], [2, 4, 1, "", "setOutputMode"], [2, 4, 1, "", "setRateMux"], [2, 4, 1, "", "setSampleRateIn"], [2, 4, 1, "", "setSampleRateOut"], [2, 4, 1, "", "setValueRaw"], [2, 4, 1, "", "startAcquisition"], [2, 4, 1, "", "stopAcquisition"], [2, 4, 1, "", "stopBufferOut"], [2, 3, 1, "", "thisown"]], "libm2k.M2kHardwareTrigger": [[2, 4, 1, "", "getAnalogCondition"], [2, 4, 1, "", "getAnalogDelay"], [2, 4, 1, "", "getAnalogExternalCondition"], [2, 4, 1, "", "getAnalogExternalOutSelect"], [2, 4, 1, "", "getAnalogHysteresis"], [2, 4, 1, "", "getAnalogLevel"], [2, 4, 1, "", "getAnalogLevelRaw"], [2, 4, 1, "", "getAnalogMode"], [2, 4, 1, "", "getAnalogOutTriggerCondition"], [2, 4, 1, "", "getAnalogOutTriggerSource"], [2, 4, 1, "", "getAnalogOutTriggerStatus"], [2, 4, 1, "", "getAnalogSource"], [2, 4, 1, "", "getAnalogSourceChannel"], [2, 4, 1, "", "getAnalogStreamingFlag"], [2, 4, 1, "", "getCurrentHwSettings"], [2, 4, 1, "", "getDigitalCondition"], [2, 4, 1, "", "getDigitalDelay"], [2, 4, 1, "", "getDigitalExternalCondition"], [2, 4, 1, "", "getDigitalMode"], [2, 4, 1, "", "getDigitalSource"], [2, 4, 1, "", "getDigitalStreamingFlag"], [2, 4, 1, "", "hasCrossInstrumentTrigger"], [2, 4, 1, "", "hasExternalTriggerIn"], [2, 4, 1, "", "hasExternalTriggerOut"], [2, 4, 1, "", "reset"], [2, 4, 1, "", "setAnalogCondition"], [2, 4, 1, "", "setAnalogDelay"], [2, 4, 1, "", "setAnalogExternalCondition"], [2, 4, 1, "", "setAnalogExternalOutSelect"], [2, 4, 1, "", "setAnalogHysteresis"], [2, 4, 1, "", "setAnalogLevel"], [2, 4, 1, "", "setAnalogLevelRaw"], [2, 4, 1, "", "setAnalogMode"], [2, 4, 1, "", "setAnalogOutTriggerCondition"], [2, 4, 1, "", "setAnalogOutTriggerSource"], [2, 4, 1, "", "setAnalogOutTriggerStatus"], [2, 4, 1, "", "setAnalogSource"], [2, 4, 1, "", "setAnalogSourceChannel"], [2, 4, 1, "", "setAnalogStreamingFlag"], [2, 4, 1, "", "setCalibParameters"], [2, 4, 1, "", "setDigitalCondition"], [2, 4, 1, "", "setDigitalDelay"], [2, 4, 1, "", "setDigitalExternalCondition"], [2, 4, 1, "", "setDigitalMode"], [2, 4, 1, "", "setDigitalSource"], [2, 4, 1, "", "setDigitalStreamingFlag"], [2, 4, 1, "", "setHwTriggerSettings"], [2, 3, 1, "", "thisown"]], "libm2k.M2kModes": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.M2kPowerSupply": [[2, 4, 1, "", "anyChannelEnabled"], [2, 4, 1, "", "enableAll"], [2, 4, 1, "", "enableChannel"], [2, 4, 1, "", "powerDownDacs"], [2, 4, 1, "", "pushChannel"], [2, 4, 1, "", "readChannel"], [2, 4, 1, "", "reset"], [2, 3, 1, "", "thisown"]], "libm2k.PairDD": [[2, 3, 1, "", "first"], [2, 3, 1, "", "second"], [2, 3, 1, "", "thisown"]], "libm2k.SETTINGS": [[2, 3, 1, "", "analog_condition"], [2, 3, 1, "", "delay"], [2, 3, 1, "", "digital_condition"], [2, 3, 1, "", "hysteresis"], [2, 3, 1, "", "level"], [2, 3, 1, "", "mode"], [2, 3, 1, "", "raw_level"], [2, 3, 1, "", "thisown"], [2, 3, 1, "", "trigger_source"]], "libm2k.SwigPyIterator": [[2, 4, 1, "", "advance"], [2, 4, 1, "", "copy"], [2, 4, 1, "", "decr"], [2, 4, 1, "", "distance"], [2, 4, 1, "", "equal"], [2, 4, 1, "", "incr"], [2, 4, 1, "", "next"], [2, 4, 1, "", "previous"], [2, 3, 1, "", "thisown"], [2, 4, 1, "", "value"]], "libm2k.VectorCtxInfo": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.VectorD": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.VectorI": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.VectorPairDD": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.VectorS": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.VectorStr": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.VectorUS": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.VectorVectorD": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.VectorVectorI": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.VectorVectorS": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.VectorVectorUS": [[2, 4, 1, "", "append"], [2, 4, 1, "", "assign"], [2, 4, 1, "", "back"], [2, 4, 1, "", "begin"], [2, 4, 1, "", "capacity"], [2, 4, 1, "", "clear"], [2, 4, 1, "", "empty"], [2, 4, 1, "", "end"], [2, 4, 1, "", "erase"], [2, 4, 1, "", "front"], [2, 4, 1, "", "get_allocator"], [2, 4, 1, "", "insert"], [2, 4, 1, "", "iterator"], [2, 4, 1, "", "pop"], [2, 4, 1, "", "pop_back"], [2, 4, 1, "", "push_back"], [2, 4, 1, "", "rbegin"], [2, 4, 1, "", "rend"], [2, 4, 1, "", "reserve"], [2, 4, 1, "", "resize"], [2, 4, 1, "", "size"], [2, 4, 1, "", "swap"], [2, 3, 1, "", "thisown"]], "libm2k.channel": [[2, 3, 1, "", "m_channel"], [2, 3, 1, "", "m_direction"], [2, 3, 1, "", "thisown"]], "libm2k.ini_device_struct": [[2, 3, 1, "", "hw_name"], [2, 3, 1, "", "key_val_pairs"], [2, 3, 1, "", "thisown"]], "libm2k.m2k_exception": [[2, 4, 1, "", "file"], [2, 4, 1, "", "iioCode"], [2, 4, 1, "", "line"], [2, 4, 1, "", "make"], [2, 3, 1, "", "thisown"], [2, 4, 1, "", "type"], [2, 4, 1, "", "what"]], "libm2k.m2k_exception_builder": [[2, 4, 1, "", "build"], [2, 4, 1, "", "file"], [2, 4, 1, "", "iioCode"], [2, 4, 1, "", "line"], [2, 3, 1, "", "thisown"], [2, 4, 1, "", "type"]]}, "objtypes": {"0": "py:module", "1": "py:data", "2": "py:class", "3": "py:property", "4": "py:method", "5": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "data", "Python data"], "2": ["py", "class", "Python class"], "3": ["py", "property", "Python property"], "4": ["py", "method", "Python method"], "5": ["py", "function", "Python function"]}, "titleterms": {"libm2k": [0, 1, 2], "exampl": 0, "document": 1, "librari": 1, "interfac": 1, "adalm2000": 1, "indic": 1, "tabl": 1, "modul": 2}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 58}, "alltitles": {"libm2k Examples": [[0, "libm2k-examples"]], "libm2k documentation - Library for interfacing with the ADALM2000": [[1, "libm2k-documentation-library-for-interfacing-with-the-adalm2000"]], "Indices and tables": [[1, "indices-and-tables"]], "libm2k Module": [[2, "module-libm2k"]]}, "indexentries": {"always (in module libm2k)": [[2, "libm2k.ALWAYS"]], "analog (in module libm2k)": [[2, "libm2k.ANALOG"]], "calibration_parameters (class in libm2k)": [[2, "libm2k.CALIBRATION_PARAMETERS"]], "channel_1 (in module libm2k)": [[2, "libm2k.CHANNEL_1"]], "channel_2 (in module libm2k)": [[2, "libm2k.CHANNEL_2"]], "context_info (class in libm2k)": [[2, "libm2k.CONTEXT_INFO"]], "context (class in libm2k)": [[2, "libm2k.Context"]], "contextbuilder (class in libm2k)": [[2, "libm2k.ContextBuilder"]], "contextbuilder_contextclose() (in module libm2k)": [[2, "libm2k.ContextBuilder_contextClose"]], "contextbuilder_contextcloseall() (in module libm2k)": [[2, "libm2k.ContextBuilder_contextCloseAll"]], "contextbuilder_contextopen() (in module libm2k)": [[2, "libm2k.ContextBuilder_contextOpen"]], "contextbuilder_enablelogging() (in module libm2k)": [[2, "libm2k.ContextBuilder_enableLogging"]], "contextbuilder_getallcontexts() (in module libm2k)": [[2, "libm2k.ContextBuilder_getAllContexts"]], "contextbuilder_getcontextsinfo() (in module libm2k)": [[2, "libm2k.ContextBuilder_getContextsInfo"]], "contextbuilder_getversion() (in module libm2k)": [[2, "libm2k.ContextBuilder_getVersion"]], "contextbuilder_m2kopen() (in module libm2k)": [[2, "libm2k.ContextBuilder_m2kOpen"]], "dmm (class in libm2k)": [[2, "libm2k.DMM"]], "dmmreading (class in libm2k)": [[2, "libm2k.DMMReading"]], "dmm_reading (class in libm2k)": [[2, "libm2k.DMM_READING"]], "dmms (class in libm2k)": [[2, "libm2k.DMMs"]], "external (in module libm2k)": [[2, "libm2k.EXTERNAL"]], "fmcomms (class in libm2k)": [[2, "libm2k.FMCOMMS"]], "generic (class in libm2k)": [[2, "libm2k.Generic"]], "genericanalogin (class in libm2k)": [[2, "libm2k.GenericAnalogIn"]], "genericanalogout (class in libm2k)": [[2, "libm2k.GenericAnalogOut"]], "iio_context_version (class in libm2k)": [[2, "libm2k.IIO_CONTEXT_VERSION"]], "iio_objects (class in libm2k)": [[2, "libm2k.IIO_OBJECTS"]], "iiobuffers (class in libm2k)": [[2, "libm2k.IioBuffers"]], "iiochannels (class in libm2k)": [[2, "libm2k.IioChannels"]], "iiodevices (class in libm2k)": [[2, "libm2k.IioDevices"]], "m2k (class in libm2k)": [[2, "libm2k.M2k"]], "m2kanalogin (class in libm2k)": [[2, "libm2k.M2kAnalogIn"]], "m2kanalogins (class in libm2k)": [[2, "libm2k.M2kAnalogIns"]], "m2kanalogout (class in libm2k)": [[2, "libm2k.M2kAnalogOut"]], "m2kanalogouts (class in libm2k)": [[2, "libm2k.M2kAnalogOuts"]], "m2kcalibration (class in libm2k)": [[2, "libm2k.M2kCalibration"]], "m2kconditionanalog (class in libm2k)": [[2, "libm2k.M2kConditionAnalog"]], "m2kconditiondigital (class in libm2k)": [[2, "libm2k.M2kConditionDigital"]], "m2kdigital (class in libm2k)": [[2, "libm2k.M2kDigital"]], "m2khardwaretrigger (class in libm2k)": [[2, "libm2k.M2kHardwareTrigger"]], "m2kmodes (class in libm2k)": [[2, "libm2k.M2kModes"]], "m2kpowersupply (class in libm2k)": [[2, "libm2k.M2kPowerSupply"]], "no_source (in module libm2k)": [[2, "libm2k.NO_SOURCE"]], "pairdd (class in libm2k)": [[2, "libm2k.PairDD"]], "select_analog_in (in module libm2k)": [[2, "libm2k.SELECT_ANALOG_IN"]], "select_digital_in (in module libm2k)": [[2, "libm2k.SELECT_DIGITAL_IN"]], "select_none (in module libm2k)": [[2, "libm2k.SELECT_NONE"]], "select_trigger_in (in module libm2k)": [[2, "libm2k.SELECT_TRIGGER_IN"]], "settings (class in libm2k)": [[2, "libm2k.SETTINGS"]], "src_analog_in (in module libm2k)": [[2, "libm2k.SRC_ANALOG_IN"]], "src_digital_in (in module libm2k)": [[2, "libm2k.SRC_DIGITAL_IN"]], "src_disabled (in module libm2k)": [[2, "libm2k.SRC_DISABLED"]], "src_none (in module libm2k)": [[2, "libm2k.SRC_NONE"]], "src_trigger_in (in module libm2k)": [[2, "libm2k.SRC_TRIGGER_IN"]], "swigpyiterator (class in libm2k)": [[2, "libm2k.SwigPyIterator"]], "vectorctxinfo (class in libm2k)": [[2, "libm2k.VectorCtxInfo"]], "vectord (class in libm2k)": [[2, "libm2k.VectorD"]], "vectori (class in libm2k)": [[2, "libm2k.VectorI"]], "vectorpairdd (class in libm2k)": [[2, "libm2k.VectorPairDD"]], "vectors (class in libm2k)": [[2, "libm2k.VectorS"]], "vectorstr (class in libm2k)": [[2, "libm2k.VectorStr"]], "vectorus (class in libm2k)": [[2, "libm2k.VectorUS"]], "vectorvectord (class in libm2k)": [[2, "libm2k.VectorVectorD"]], "vectorvectori (class in libm2k)": [[2, "libm2k.VectorVectorI"]], "vectorvectors (class in libm2k)": [[2, "libm2k.VectorVectorS"]], "vectorvectorus (class in libm2k)": [[2, "libm2k.VectorVectorUS"]], "adc_gain_ch_1 (libm2k.calibration_parameters property)": [[2, "libm2k.CALIBRATION_PARAMETERS.adc_gain_ch_1"]], "adc_gain_ch_2 (libm2k.calibration_parameters property)": [[2, "libm2k.CALIBRATION_PARAMETERS.adc_gain_ch_2"]], "adc_offset_ch_1 (libm2k.calibration_parameters property)": [[2, "libm2k.CALIBRATION_PARAMETERS.adc_offset_ch_1"]], "adc_offset_ch_2 (libm2k.calibration_parameters property)": [[2, "libm2k.CALIBRATION_PARAMETERS.adc_offset_ch_2"]], "advance() (libm2k.swigpyiterator method)": [[2, "libm2k.SwigPyIterator.advance"]], "analog_condition (libm2k.settings property)": [[2, "libm2k.SETTINGS.analog_condition"]], "anychannelenabled() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.anyChannelEnabled"]], "anychannelenabled() (libm2k.m2kpowersupply method)": [[2, "libm2k.M2kPowerSupply.anyChannelEnabled"]], "append() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.append"]], "append() (libm2k.dmms method)": [[2, "libm2k.DMMs.append"]], "append() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.append"]], "append() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.append"]], "append() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.append"]], "append() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.append"]], "append() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.append"]], "append() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.append"]], "append() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.append"]], "append() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.append"]], "append() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.append"]], "append() (libm2k.vectord method)": [[2, "libm2k.VectorD.append"]], "append() (libm2k.vectori method)": [[2, "libm2k.VectorI.append"]], "append() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.append"]], "append() (libm2k.vectors method)": [[2, "libm2k.VectorS.append"]], "append() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.append"]], "append() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.append"]], "append() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.append"]], "append() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.append"]], "append() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.append"]], "append() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.append"]], "assign() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.assign"]], "assign() (libm2k.dmms method)": [[2, "libm2k.DMMs.assign"]], "assign() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.assign"]], "assign() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.assign"]], "assign() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.assign"]], "assign() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.assign"]], "assign() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.assign"]], "assign() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.assign"]], "assign() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.assign"]], "assign() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.assign"]], "assign() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.assign"]], "assign() (libm2k.vectord method)": [[2, "libm2k.VectorD.assign"]], "assign() (libm2k.vectori method)": [[2, "libm2k.VectorI.assign"]], "assign() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.assign"]], "assign() (libm2k.vectors method)": [[2, "libm2k.VectorS.assign"]], "assign() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.assign"]], "assign() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.assign"]], "assign() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.assign"]], "assign() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.assign"]], "assign() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.assign"]], "assign() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.assign"]], "back() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.back"]], "back() (libm2k.dmms method)": [[2, "libm2k.DMMs.back"]], "back() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.back"]], "back() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.back"]], "back() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.back"]], "back() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.back"]], "back() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.back"]], "back() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.back"]], "back() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.back"]], "back() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.back"]], "back() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.back"]], "back() (libm2k.vectord method)": [[2, "libm2k.VectorD.back"]], "back() (libm2k.vectori method)": [[2, "libm2k.VectorI.back"]], "back() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.back"]], "back() (libm2k.vectors method)": [[2, "libm2k.VectorS.back"]], "back() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.back"]], "back() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.back"]], "back() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.back"]], "back() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.back"]], "back() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.back"]], "back() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.back"]], "begin() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.begin"]], "begin() (libm2k.dmms method)": [[2, "libm2k.DMMs.begin"]], "begin() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.begin"]], "begin() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.begin"]], "begin() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.begin"]], "begin() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.begin"]], "begin() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.begin"]], "begin() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.begin"]], "begin() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.begin"]], "begin() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.begin"]], "begin() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.begin"]], "begin() (libm2k.vectord method)": [[2, "libm2k.VectorD.begin"]], "begin() (libm2k.vectori method)": [[2, "libm2k.VectorI.begin"]], "begin() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.begin"]], "begin() (libm2k.vectors method)": [[2, "libm2k.VectorS.begin"]], "begin() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.begin"]], "begin() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.begin"]], "begin() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.begin"]], "begin() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.begin"]], "begin() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.begin"]], "begin() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.begin"]], "buffers_rx (libm2k.iio_objects property)": [[2, "libm2k.IIO_OBJECTS.buffers_rx"]], "buffers_tx (libm2k.iio_objects property)": [[2, "libm2k.IIO_OBJECTS.buffers_tx"]], "build() (libm2k.m2k_exception_builder method)": [[2, "libm2k.m2k_exception_builder.build"]], "calibrate() (libm2k.m2k method)": [[2, "libm2k.M2k.calibrate"]], "calibrateadc() (libm2k.m2k method)": [[2, "libm2k.M2k.calibrateADC"]], "calibrateadc() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.calibrateADC"]], "calibrateall() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.calibrateAll"]], "calibratedac() (libm2k.m2k method)": [[2, "libm2k.M2k.calibrateDAC"]], "calibratedac() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.calibrateDAC"]], "calibratefromcontext() (libm2k.m2k method)": [[2, "libm2k.M2k.calibrateFromContext"]], "cancelacquisition() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.cancelAcquisition"]], "cancelacquisition() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.cancelAcquisition"]], "cancelbuffer() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.cancelBuffer"]], "cancelbufferout() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.cancelBufferOut"]], "cancelcalibration() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.cancelCalibration"]], "capacity() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.capacity"]], "capacity() (libm2k.dmms method)": [[2, "libm2k.DMMs.capacity"]], "capacity() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.capacity"]], "capacity() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.capacity"]], "capacity() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.capacity"]], "capacity() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.capacity"]], "capacity() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.capacity"]], "capacity() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.capacity"]], "capacity() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.capacity"]], "capacity() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.capacity"]], "capacity() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.capacity"]], "capacity() (libm2k.vectord method)": [[2, "libm2k.VectorD.capacity"]], "capacity() (libm2k.vectori method)": [[2, "libm2k.VectorI.capacity"]], "capacity() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.capacity"]], "capacity() (libm2k.vectors method)": [[2, "libm2k.VectorS.capacity"]], "capacity() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.capacity"]], "capacity() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.capacity"]], "capacity() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.capacity"]], "capacity() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.capacity"]], "capacity() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.capacity"]], "capacity() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.capacity"]], "channel (class in libm2k)": [[2, "libm2k.channel"]], "channels_in (libm2k.iio_objects property)": [[2, "libm2k.IIO_OBJECTS.channels_in"]], "channels_out (libm2k.iio_objects property)": [[2, "libm2k.IIO_OBJECTS.channels_out"]], "clear() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.clear"]], "clear() (libm2k.dmms method)": [[2, "libm2k.DMMs.clear"]], "clear() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.clear"]], "clear() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.clear"]], "clear() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.clear"]], "clear() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.clear"]], "clear() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.clear"]], "clear() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.clear"]], "clear() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.clear"]], "clear() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.clear"]], "clear() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.clear"]], "clear() (libm2k.vectord method)": [[2, "libm2k.VectorD.clear"]], "clear() (libm2k.vectori method)": [[2, "libm2k.VectorI.clear"]], "clear() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.clear"]], "clear() (libm2k.vectors method)": [[2, "libm2k.VectorS.clear"]], "clear() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.clear"]], "clear() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.clear"]], "clear() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.clear"]], "clear() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.clear"]], "clear() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.clear"]], "clear() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.clear"]], "context (libm2k.iio_objects property)": [[2, "libm2k.IIO_OBJECTS.context"]], "contextclose() (in module libm2k)": [[2, "libm2k.contextClose"]], "contextclose() (libm2k.contextbuilder static method)": [[2, "libm2k.ContextBuilder.contextClose"]], "contextcloseall() (in module libm2k)": [[2, "libm2k.contextCloseAll"]], "contextcloseall() (libm2k.contextbuilder static method)": [[2, "libm2k.ContextBuilder.contextCloseAll"]], "contextopen() (in module libm2k)": [[2, "libm2k.contextOpen"]], "contextopen() (libm2k.contextbuilder static method)": [[2, "libm2k.ContextBuilder.contextOpen"]], "convertrawtovolts() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.convertRawToVolts"]], "convertrawtovolts() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.convertRawToVolts"]], "convertvoltstoraw() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.convertVoltsToRaw"]], "convertvoltstoraw() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.convertVoltsToRaw"]], "copy() (libm2k.swigpyiterator method)": [[2, "libm2k.SwigPyIterator.copy"]], "dac_a_gain (libm2k.calibration_parameters property)": [[2, "libm2k.CALIBRATION_PARAMETERS.dac_a_gain"]], "dac_a_offset (libm2k.calibration_parameters property)": [[2, "libm2k.CALIBRATION_PARAMETERS.dac_a_offset"]], "dac_b_gain (libm2k.calibration_parameters property)": [[2, "libm2k.CALIBRATION_PARAMETERS.dac_b_gain"]], "dac_b_offset (libm2k.calibration_parameters property)": [[2, "libm2k.CALIBRATION_PARAMETERS.dac_b_offset"]], "decr() (libm2k.swigpyiterator method)": [[2, "libm2k.SwigPyIterator.decr"]], "deinitialize() (libm2k.context method)": [[2, "libm2k.Context.deinitialize"]], "deinitialize() (libm2k.m2k method)": [[2, "libm2k.M2k.deinitialize"]], "delay (libm2k.settings property)": [[2, "libm2k.SETTINGS.delay"]], "devices (libm2k.iio_objects property)": [[2, "libm2k.IIO_OBJECTS.devices"]], "digital_condition (libm2k.settings property)": [[2, "libm2k.SETTINGS.digital_condition"]], "distance() (libm2k.swigpyiterator method)": [[2, "libm2k.SwigPyIterator.distance"]], "empty() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.empty"]], "empty() (libm2k.dmms method)": [[2, "libm2k.DMMs.empty"]], "empty() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.empty"]], "empty() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.empty"]], "empty() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.empty"]], "empty() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.empty"]], "empty() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.empty"]], "empty() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.empty"]], "empty() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.empty"]], "empty() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.empty"]], "empty() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.empty"]], "empty() (libm2k.vectord method)": [[2, "libm2k.VectorD.empty"]], "empty() (libm2k.vectori method)": [[2, "libm2k.VectorI.empty"]], "empty() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.empty"]], "empty() (libm2k.vectors method)": [[2, "libm2k.VectorS.empty"]], "empty() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.empty"]], "empty() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.empty"]], "empty() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.empty"]], "empty() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.empty"]], "empty() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.empty"]], "empty() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.empty"]], "enableall() (libm2k.m2kpowersupply method)": [[2, "libm2k.M2kPowerSupply.enableAll"]], "enableallout() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.enableAllOut"]], "enablechannel() (libm2k.genericanalogin method)": [[2, "libm2k.GenericAnalogIn.enableChannel"]], "enablechannel() (libm2k.genericanalogout method)": [[2, "libm2k.GenericAnalogOut.enableChannel"]], "enablechannel() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.enableChannel"]], "enablechannel() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.enableChannel"]], "enablechannel() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.enableChannel"]], "enablechannel() (libm2k.m2kpowersupply method)": [[2, "libm2k.M2kPowerSupply.enableChannel"]], "enablelogging() (in module libm2k)": [[2, "libm2k.enableLogging"]], "enablelogging() (libm2k.contextbuilder static method)": [[2, "libm2k.ContextBuilder.enableLogging"]], "end() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.end"]], "end() (libm2k.dmms method)": [[2, "libm2k.DMMs.end"]], "end() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.end"]], "end() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.end"]], "end() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.end"]], "end() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.end"]], "end() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.end"]], "end() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.end"]], "end() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.end"]], "end() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.end"]], "end() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.end"]], "end() (libm2k.vectord method)": [[2, "libm2k.VectorD.end"]], "end() (libm2k.vectori method)": [[2, "libm2k.VectorI.end"]], "end() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.end"]], "end() (libm2k.vectors method)": [[2, "libm2k.VectorS.end"]], "end() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.end"]], "end() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.end"]], "end() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.end"]], "end() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.end"]], "end() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.end"]], "end() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.end"]], "equal() (libm2k.swigpyiterator method)": [[2, "libm2k.SwigPyIterator.equal"]], "erase() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.erase"]], "erase() (libm2k.dmms method)": [[2, "libm2k.DMMs.erase"]], "erase() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.erase"]], "erase() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.erase"]], "erase() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.erase"]], "erase() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.erase"]], "erase() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.erase"]], "erase() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.erase"]], "erase() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.erase"]], "erase() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.erase"]], "erase() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.erase"]], "erase() (libm2k.vectord method)": [[2, "libm2k.VectorD.erase"]], "erase() (libm2k.vectori method)": [[2, "libm2k.VectorI.erase"]], "erase() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.erase"]], "erase() (libm2k.vectors method)": [[2, "libm2k.VectorS.erase"]], "erase() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.erase"]], "erase() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.erase"]], "erase() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.erase"]], "erase() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.erase"]], "erase() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.erase"]], "erase() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.erase"]], "file() (libm2k.m2k_exception method)": [[2, "libm2k.m2k_exception.file"]], "file() (libm2k.m2k_exception_builder method)": [[2, "libm2k.m2k_exception_builder.file"]], "first (libm2k.pairdd property)": [[2, "libm2k.PairDD.first"]], "front() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.front"]], "front() (libm2k.dmms method)": [[2, "libm2k.DMMs.front"]], "front() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.front"]], "front() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.front"]], "front() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.front"]], "front() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.front"]], "front() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.front"]], "front() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.front"]], "front() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.front"]], "front() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.front"]], "front() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.front"]], "front() (libm2k.vectord method)": [[2, "libm2k.VectorD.front"]], "front() (libm2k.vectori method)": [[2, "libm2k.VectorI.front"]], "front() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.front"]], "front() (libm2k.vectors method)": [[2, "libm2k.VectorS.front"]], "front() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.front"]], "front() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.front"]], "front() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.front"]], "front() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.front"]], "front() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.front"]], "front() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.front"]], "getadccalibrated() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.getAdcCalibrated"]], "getadccalibrationgain() (libm2k.m2k method)": [[2, "libm2k.M2k.getAdcCalibrationGain"]], "getadccalibrationoffset() (libm2k.m2k method)": [[2, "libm2k.M2k.getAdcCalibrationOffset"]], "getadcgain() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.getAdcGain"]], "getadcoffset() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.getAdcOffset"]], "getallanalogin() (libm2k.m2k method)": [[2, "libm2k.M2k.getAllAnalogIn"]], "getallanalogout() (libm2k.m2k method)": [[2, "libm2k.M2k.getAllAnalogOut"]], "getallchannels() (libm2k.dmm method)": [[2, "libm2k.DMM.getAllChannels"]], "getallcontexts() (in module libm2k)": [[2, "libm2k.getAllContexts"]], "getallcontexts() (libm2k.contextbuilder static method)": [[2, "libm2k.ContextBuilder.getAllContexts"]], "getalldevices() (libm2k.context method)": [[2, "libm2k.Context.getAllDevices"]], "getalldmm() (libm2k.context method)": [[2, "libm2k.Context.getAllDmm"]], "getanalogcondition() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getAnalogCondition"]], "getanalogdelay() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getAnalogDelay"]], "getanalogexternalcondition() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getAnalogExternalCondition"]], "getanalogexternaloutselect() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getAnalogExternalOutSelect"]], "getanaloghysteresis() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getAnalogHysteresis"]], "getanalogin() (libm2k.generic method)": [[2, "libm2k.Generic.getAnalogIn"]], "getanalogin() (libm2k.m2k method)": [[2, "libm2k.M2k.getAnalogIn"]], "getanalogincount() (libm2k.generic method)": [[2, "libm2k.Generic.getAnalogInCount"]], "getanaloglevel() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getAnalogLevel"]], "getanaloglevelraw() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getAnalogLevelRaw"]], "getanalogmode() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getAnalogMode"]], "getanalogout() (libm2k.generic method)": [[2, "libm2k.Generic.getAnalogOut"]], "getanalogout() (libm2k.m2k method)": [[2, "libm2k.M2k.getAnalogOut"]], "getanalogoutcount() (libm2k.generic method)": [[2, "libm2k.Generic.getAnalogOutCount"]], "getanalogouttriggercondition() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getAnalogOutTriggerCondition"]], "getanalogouttriggersource() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getAnalogOutTriggerSource"]], "getanalogouttriggerstatus() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getAnalogOutTriggerStatus"]], "getanalogsource() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getAnalogSource"]], "getanalogsourcechannel() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getAnalogSourceChannel"]], "getanalogstreamingflag() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getAnalogStreamingFlag"]], "getavailablecontextattributes() (libm2k.context method)": [[2, "libm2k.Context.getAvailableContextAttributes"]], "getavailableranges() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getAvailableRanges"]], "getavailablesamplerates() (libm2k.genericanalogin method)": [[2, "libm2k.GenericAnalogIn.getAvailableSampleRates"]], "getavailablesamplerates() (libm2k.genericanalogout method)": [[2, "libm2k.GenericAnalogOut.getAvailableSampleRates"]], "getavailablesamplerates() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getAvailableSampleRates"]], "getavailablesamplerates() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getAvailableSampleRates"]], "getbufferrearmontrigger() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getBufferRearmOnTrigger"]], "getchannelname() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getChannelName"]], "getchannelname() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getChannelName"]], "getcontextattributevalue() (libm2k.context method)": [[2, "libm2k.Context.getContextAttributeValue"]], "getcontextdescription() (libm2k.context method)": [[2, "libm2k.Context.getContextDescription"]], "getcontextsinfo() (in module libm2k)": [[2, "libm2k.getContextsInfo"]], "getcontextsinfo() (libm2k.contextbuilder static method)": [[2, "libm2k.ContextBuilder.getContextsInfo"]], "getcurrenthwsettings() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getCurrentHwSettings"]], "getcyclic() (libm2k.genericanalogout method)": [[2, "libm2k.GenericAnalogOut.getCyclic"]], "getcyclic() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getCyclic"]], "getcyclic() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.getCyclic"]], "getdmm() (libm2k.context method)": [[2, "libm2k.Context.getDMM"]], "getdaccalibrated() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.getDacCalibrated"]], "getdaccalibrationgain() (libm2k.m2k method)": [[2, "libm2k.M2k.getDacCalibrationGain"]], "getdaccalibrationoffset() (libm2k.m2k method)": [[2, "libm2k.M2k.getDacCalibrationOffset"]], "getdacgain() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.getDacGain"]], "getdacoffset() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.getDacOffset"]], "getdevicename() (libm2k.genericanalogin method)": [[2, "libm2k.GenericAnalogIn.getDeviceName"]], "getdigital() (libm2k.m2k method)": [[2, "libm2k.M2k.getDigital"]], "getdigitalcondition() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getDigitalCondition"]], "getdigitaldelay() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getDigitalDelay"]], "getdigitalexternalcondition() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getDigitalExternalCondition"]], "getdigitalmode() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getDigitalMode"]], "getdigitalsource() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getDigitalSource"]], "getdigitalstreamingflag() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.getDigitalStreamingFlag"]], "getdirection() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.getDirection"]], "getdmmcount() (libm2k.context method)": [[2, "libm2k.Context.getDmmCount"]], "getfiltercompensation() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getFilterCompensation"]], "getfiltercompensation() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getFilterCompensation"]], "getfirmwareversion() (libm2k.context method)": [[2, "libm2k.Context.getFirmwareVersion"]], "gethysteresisrange() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getHysteresisRange"]], "getiiocontext() (libm2k.context method)": [[2, "libm2k.Context.getIioContext"]], "getiiocontextversion() (libm2k.context method)": [[2, "libm2k.Context.getIioContextVersion"]], "getiioobjects() (libm2k.genericanalogin method)": [[2, "libm2k.GenericAnalogIn.getIioObjects"]], "getiioobjects() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getIioObjects"]], "getiioobjects() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getIioObjects"]], "getiioobjects() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.getIioObjects"]], "getkernelbufferscount() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getKernelBuffersCount"]], "getkernelbufferscount() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getKernelBuffersCount"]], "getlut() (libm2k.m2k method)": [[2, "libm2k.M2k.getLUT"]], "getled() (libm2k.m2k method)": [[2, "libm2k.M2k.getLed"]], "getmaximumsamplerate() (libm2k.genericanalogin method)": [[2, "libm2k.GenericAnalogIn.getMaximumSamplerate"]], "getmaximumsamplerate() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getMaximumSamplerate"]], "getmaximumsamplerate() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getMaximumSamplerate"]], "getname() (libm2k.dmm method)": [[2, "libm2k.DMM.getName"]], "getname() (libm2k.genericanalogout method)": [[2, "libm2k.GenericAnalogOut.getName"]], "getname() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getName"]], "getnbchannels() (libm2k.genericanalogin method)": [[2, "libm2k.GenericAnalogIn.getNbChannels"]], "getnbchannels() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getNbChannels"]], "getnbchannels() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getNbChannels"]], "getnbchannelsin() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.getNbChannelsIn"]], "getnbchannelsout() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.getNbChannelsOut"]], "getoutputmode() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.getOutputMode"]], "getoversamplingratio() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getOversamplingRatio"]], "getoversamplingratio() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getOversamplingRatio"]], "getpowersupply() (libm2k.m2k method)": [[2, "libm2k.M2k.getPowerSupply"]], "getrange() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getRange"]], "getrangelimits() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getRangeLimits"]], "getsamplerate() (libm2k.genericanalogin method)": [[2, "libm2k.GenericAnalogIn.getSampleRate"]], "getsamplerate() (libm2k.genericanalogout method)": [[2, "libm2k.GenericAnalogOut.getSampleRate"]], "getsamplerate() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getSampleRate"]], "getsamplerate() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getSampleRate"]], "getsampleratein() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.getSampleRateIn"]], "getsamplerateout() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.getSampleRateOut"]], "getsamples() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getSamples"]], "getsamples() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.getSamples"]], "getsamplesinterleaved() (libm2k.genericanalogin method)": [[2, "libm2k.GenericAnalogIn.getSamplesInterleaved"]], "getsamplesinterleaved() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getSamplesInterleaved"]], "getsamplesp() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.getSamplesP"]], "getsamplesraw() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getSamplesRaw"]], "getsamplesrawinterleaved() (libm2k.genericanalogin method)": [[2, "libm2k.GenericAnalogIn.getSamplesRawInterleaved"]], "getsamplesrawinterleaved() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getSamplesRawInterleaved"]], "getscalingfactor() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getScalingFactor"]], "getscalingfactor() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getScalingFactor"]], "getserialnumber() (libm2k.context method)": [[2, "libm2k.Context.getSerialNumber"]], "getsynceddma() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getSyncedDma"]], "getsyncedstartdma() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getSyncedStartDma"]], "gettrigger() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getTrigger"]], "gettrigger() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.getTrigger"]], "gettrigger() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.getTrigger"]], "geturi() (libm2k.context method)": [[2, "libm2k.Context.getUri"]], "getvalueforrange() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getValueForRange"]], "getvalueraw() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.getValueRaw"]], "getversion() (in module libm2k)": [[2, "libm2k.getVersion"]], "getversion() (libm2k.contextbuilder static method)": [[2, "libm2k.ContextBuilder.getVersion"]], "getverticaloffset() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getVerticalOffset"]], "getvoltage() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getVoltage"]], "getvoltageraw() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.getVoltageRaw"]], "get_allocator() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.get_allocator"]], "get_allocator() (libm2k.dmms method)": [[2, "libm2k.DMMs.get_allocator"]], "get_allocator() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.get_allocator"]], "get_allocator() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.get_allocator"]], "get_allocator() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.get_allocator"]], "get_allocator() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.get_allocator"]], "get_allocator() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.get_allocator"]], "get_allocator() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.get_allocator"]], "get_allocator() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.get_allocator"]], "get_allocator() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.get_allocator"]], "get_allocator() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.get_allocator"]], "get_allocator() (libm2k.vectord method)": [[2, "libm2k.VectorD.get_allocator"]], "get_allocator() (libm2k.vectori method)": [[2, "libm2k.VectorI.get_allocator"]], "get_allocator() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.get_allocator"]], "get_allocator() (libm2k.vectors method)": [[2, "libm2k.VectorS.get_allocator"]], "get_allocator() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.get_allocator"]], "get_allocator() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.get_allocator"]], "get_allocator() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.get_allocator"]], "get_allocator() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.get_allocator"]], "get_allocator() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.get_allocator"]], "get_allocator() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.get_allocator"]], "git_tag (libm2k.iio_context_version property)": [[2, "libm2k.IIO_CONTEXT_VERSION.git_tag"]], "hascontextcalibration() (libm2k.m2k method)": [[2, "libm2k.M2k.hasContextCalibration"]], "hascrossinstrumenttrigger() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.hasCrossInstrumentTrigger"]], "hasexternaltriggerin() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.hasExternalTriggerIn"]], "hasexternaltriggerout() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.hasExternalTriggerOut"]], "hasmixedsignal() (libm2k.m2k method)": [[2, "libm2k.M2k.hasMixedSignal"]], "hw_name (libm2k.ini_device_struct property)": [[2, "libm2k.ini_device_struct.hw_name"]], "hysteresis (libm2k.settings property)": [[2, "libm2k.SETTINGS.hysteresis"]], "id (libm2k.dmm_reading property)": [[2, "libm2k.DMM_READING.id"]], "id_product (libm2k.context_info property)": [[2, "libm2k.CONTEXT_INFO.id_product"]], "id_vendor (libm2k.context_info property)": [[2, "libm2k.CONTEXT_INFO.id_vendor"]], "iiocode() (libm2k.m2k_exception method)": [[2, "libm2k.m2k_exception.iioCode"]], "iiocode() (libm2k.m2k_exception_builder method)": [[2, "libm2k.m2k_exception_builder.iioCode"]], "incr() (libm2k.swigpyiterator method)": [[2, "libm2k.SwigPyIterator.incr"]], "ini_device_struct (class in libm2k)": [[2, "libm2k.ini_device_struct"]], "initialize() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.initialize"]], "insert() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.insert"]], "insert() (libm2k.dmms method)": [[2, "libm2k.DMMs.insert"]], "insert() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.insert"]], "insert() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.insert"]], "insert() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.insert"]], "insert() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.insert"]], "insert() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.insert"]], "insert() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.insert"]], "insert() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.insert"]], "insert() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.insert"]], "insert() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.insert"]], "insert() (libm2k.vectord method)": [[2, "libm2k.VectorD.insert"]], "insert() (libm2k.vectori method)": [[2, "libm2k.VectorI.insert"]], "insert() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.insert"]], "insert() (libm2k.vectors method)": [[2, "libm2k.VectorS.insert"]], "insert() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.insert"]], "insert() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.insert"]], "insert() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.insert"]], "insert() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.insert"]], "insert() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.insert"]], "insert() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.insert"]], "iscalibrated() (libm2k.m2k method)": [[2, "libm2k.M2k.isCalibrated"]], "ischannelenabled() (libm2k.genericanalogout method)": [[2, "libm2k.GenericAnalogOut.isChannelEnabled"]], "ischannelenabled() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.isChannelEnabled"]], "ischannelenabled() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.isChannelEnabled"]], "isclocksourceexternal() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.isClocksourceExternal"]], "isinitialized() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.isInitialized"]], "ispushdone() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.isPushDone"]], "iterator() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.iterator"]], "iterator() (libm2k.dmms method)": [[2, "libm2k.DMMs.iterator"]], "iterator() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.iterator"]], "iterator() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.iterator"]], "iterator() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.iterator"]], "iterator() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.iterator"]], "iterator() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.iterator"]], "iterator() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.iterator"]], "iterator() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.iterator"]], "iterator() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.iterator"]], "iterator() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.iterator"]], "iterator() (libm2k.vectord method)": [[2, "libm2k.VectorD.iterator"]], "iterator() (libm2k.vectori method)": [[2, "libm2k.VectorI.iterator"]], "iterator() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.iterator"]], "iterator() (libm2k.vectors method)": [[2, "libm2k.VectorS.iterator"]], "iterator() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.iterator"]], "iterator() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.iterator"]], "iterator() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.iterator"]], "iterator() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.iterator"]], "iterator() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.iterator"]], "iterator() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.iterator"]], "key_val_pairs (libm2k.ini_device_struct property)": [[2, "libm2k.ini_device_struct.key_val_pairs"]], "level (libm2k.settings property)": [[2, "libm2k.SETTINGS.level"]], "libm2k": [[2, "module-libm2k"]], "line() (libm2k.m2k_exception method)": [[2, "libm2k.m2k_exception.line"]], "line() (libm2k.m2k_exception_builder method)": [[2, "libm2k.m2k_exception_builder.line"]], "logallattributes() (libm2k.context method)": [[2, "libm2k.Context.logAllAttributes"]], "m2kopen() (in module libm2k)": [[2, "libm2k.m2kOpen"]], "m2kopen() (libm2k.contextbuilder static method)": [[2, "libm2k.ContextBuilder.m2kOpen"]], "m2k_exception (class in libm2k)": [[2, "libm2k.m2k_exception"]], "m2k_exception_builder (class in libm2k)": [[2, "libm2k.m2k_exception_builder"]], "m2k_exception_make() (in module libm2k)": [[2, "libm2k.m2k_exception_make"]], "m_channel (libm2k.channel property)": [[2, "libm2k.channel.m_channel"]], "m_direction (libm2k.channel property)": [[2, "libm2k.channel.m_direction"]], "major (libm2k.iio_context_version property)": [[2, "libm2k.IIO_CONTEXT_VERSION.major"]], "make() (libm2k.m2k_exception static method)": [[2, "libm2k.m2k_exception.make"]], "manufacturer (libm2k.context_info property)": [[2, "libm2k.CONTEXT_INFO.manufacturer"]], "minor (libm2k.iio_context_version property)": [[2, "libm2k.IIO_CONTEXT_VERSION.minor"]], "mode (libm2k.settings property)": [[2, "libm2k.SETTINGS.mode"]], "module": [[2, "module-libm2k"]], "name (libm2k.dmm_reading property)": [[2, "libm2k.DMM_READING.name"]], "next() (libm2k.swigpyiterator method)": [[2, "libm2k.SwigPyIterator.next"]], "pop() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.pop"]], "pop() (libm2k.dmms method)": [[2, "libm2k.DMMs.pop"]], "pop() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.pop"]], "pop() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.pop"]], "pop() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.pop"]], "pop() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.pop"]], "pop() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.pop"]], "pop() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.pop"]], "pop() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.pop"]], "pop() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.pop"]], "pop() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.pop"]], "pop() (libm2k.vectord method)": [[2, "libm2k.VectorD.pop"]], "pop() (libm2k.vectori method)": [[2, "libm2k.VectorI.pop"]], "pop() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.pop"]], "pop() (libm2k.vectors method)": [[2, "libm2k.VectorS.pop"]], "pop() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.pop"]], "pop() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.pop"]], "pop() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.pop"]], "pop() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.pop"]], "pop() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.pop"]], "pop() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.pop"]], "pop_back() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.pop_back"]], "pop_back() (libm2k.dmms method)": [[2, "libm2k.DMMs.pop_back"]], "pop_back() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.pop_back"]], "pop_back() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.pop_back"]], "pop_back() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.pop_back"]], "pop_back() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.pop_back"]], "pop_back() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.pop_back"]], "pop_back() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.pop_back"]], "pop_back() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.pop_back"]], "pop_back() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.pop_back"]], "pop_back() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.pop_back"]], "pop_back() (libm2k.vectord method)": [[2, "libm2k.VectorD.pop_back"]], "pop_back() (libm2k.vectori method)": [[2, "libm2k.VectorI.pop_back"]], "pop_back() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.pop_back"]], "pop_back() (libm2k.vectors method)": [[2, "libm2k.VectorS.pop_back"]], "pop_back() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.pop_back"]], "pop_back() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.pop_back"]], "pop_back() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.pop_back"]], "pop_back() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.pop_back"]], "pop_back() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.pop_back"]], "pop_back() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.pop_back"]], "powerdowndacs() (libm2k.m2kpowersupply method)": [[2, "libm2k.M2kPowerSupply.powerDownDacs"]], "previous() (libm2k.swigpyiterator method)": [[2, "libm2k.SwigPyIterator.previous"]], "product (libm2k.context_info property)": [[2, "libm2k.CONTEXT_INFO.product"]], "push() (libm2k.genericanalogout method)": [[2, "libm2k.GenericAnalogOut.push"]], "push() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.push"]], "push() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.push"]], "pushbytes() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.pushBytes"]], "pushchannel() (libm2k.m2kpowersupply method)": [[2, "libm2k.M2kPowerSupply.pushChannel"]], "pushraw() (libm2k.genericanalogout method)": [[2, "libm2k.GenericAnalogOut.pushRaw"]], "pushraw() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.pushRaw"]], "pushrawbytes() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.pushRawBytes"]], "push_back() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.push_back"]], "push_back() (libm2k.dmms method)": [[2, "libm2k.DMMs.push_back"]], "push_back() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.push_back"]], "push_back() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.push_back"]], "push_back() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.push_back"]], "push_back() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.push_back"]], "push_back() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.push_back"]], "push_back() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.push_back"]], "push_back() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.push_back"]], "push_back() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.push_back"]], "push_back() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.push_back"]], "push_back() (libm2k.vectord method)": [[2, "libm2k.VectorD.push_back"]], "push_back() (libm2k.vectori method)": [[2, "libm2k.VectorI.push_back"]], "push_back() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.push_back"]], "push_back() (libm2k.vectors method)": [[2, "libm2k.VectorS.push_back"]], "push_back() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.push_back"]], "push_back() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.push_back"]], "push_back() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.push_back"]], "push_back() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.push_back"]], "push_back() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.push_back"]], "push_back() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.push_back"]], "raw_level (libm2k.settings property)": [[2, "libm2k.SETTINGS.raw_level"]], "rbegin() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.rbegin"]], "rbegin() (libm2k.dmms method)": [[2, "libm2k.DMMs.rbegin"]], "rbegin() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.rbegin"]], "rbegin() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.rbegin"]], "rbegin() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.rbegin"]], "rbegin() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.rbegin"]], "rbegin() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.rbegin"]], "rbegin() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.rbegin"]], "rbegin() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.rbegin"]], "rbegin() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.rbegin"]], "rbegin() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.rbegin"]], "rbegin() (libm2k.vectord method)": [[2, "libm2k.VectorD.rbegin"]], "rbegin() (libm2k.vectori method)": [[2, "libm2k.VectorI.rbegin"]], "rbegin() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.rbegin"]], "rbegin() (libm2k.vectors method)": [[2, "libm2k.VectorS.rbegin"]], "rbegin() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.rbegin"]], "rbegin() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.rbegin"]], "rbegin() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.rbegin"]], "rbegin() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.rbegin"]], "rbegin() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.rbegin"]], "rbegin() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.rbegin"]], "readall() (libm2k.dmm method)": [[2, "libm2k.DMM.readAll"]], "readchannel() (libm2k.dmm method)": [[2, "libm2k.DMM.readChannel"]], "readchannel() (libm2k.m2kpowersupply method)": [[2, "libm2k.M2kPowerSupply.readChannel"]], "rend() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.rend"]], "rend() (libm2k.dmms method)": [[2, "libm2k.DMMs.rend"]], "rend() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.rend"]], "rend() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.rend"]], "rend() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.rend"]], "rend() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.rend"]], "rend() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.rend"]], "rend() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.rend"]], "rend() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.rend"]], "rend() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.rend"]], "rend() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.rend"]], "rend() (libm2k.vectord method)": [[2, "libm2k.VectorD.rend"]], "rend() (libm2k.vectori method)": [[2, "libm2k.VectorI.rend"]], "rend() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.rend"]], "rend() (libm2k.vectors method)": [[2, "libm2k.VectorS.rend"]], "rend() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.rend"]], "rend() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.rend"]], "rend() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.rend"]], "rend() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.rend"]], "rend() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.rend"]], "rend() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.rend"]], "reserve() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.reserve"]], "reserve() (libm2k.dmms method)": [[2, "libm2k.DMMs.reserve"]], "reserve() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.reserve"]], "reserve() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.reserve"]], "reserve() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.reserve"]], "reserve() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.reserve"]], "reserve() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.reserve"]], "reserve() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.reserve"]], "reserve() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.reserve"]], "reserve() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.reserve"]], "reserve() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.reserve"]], "reserve() (libm2k.vectord method)": [[2, "libm2k.VectorD.reserve"]], "reserve() (libm2k.vectori method)": [[2, "libm2k.VectorI.reserve"]], "reserve() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.reserve"]], "reserve() (libm2k.vectors method)": [[2, "libm2k.VectorS.reserve"]], "reserve() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.reserve"]], "reserve() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.reserve"]], "reserve() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.reserve"]], "reserve() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.reserve"]], "reserve() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.reserve"]], "reserve() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.reserve"]], "reset() (libm2k.context method)": [[2, "libm2k.Context.reset"]], "reset() (libm2k.dmm method)": [[2, "libm2k.DMM.reset"]], "reset() (libm2k.m2k method)": [[2, "libm2k.M2k.reset"]], "reset() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.reset"]], "reset() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.reset"]], "reset() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.reset"]], "reset() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.reset"]], "reset() (libm2k.m2kpowersupply method)": [[2, "libm2k.M2kPowerSupply.reset"]], "resetcalibration() (libm2k.m2k method)": [[2, "libm2k.M2k.resetCalibration"]], "resetcalibration() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.resetCalibration"]], "resetratemux() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.resetRateMux"]], "resize() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.resize"]], "resize() (libm2k.dmms method)": [[2, "libm2k.DMMs.resize"]], "resize() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.resize"]], "resize() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.resize"]], "resize() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.resize"]], "resize() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.resize"]], "resize() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.resize"]], "resize() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.resize"]], "resize() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.resize"]], "resize() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.resize"]], "resize() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.resize"]], "resize() (libm2k.vectord method)": [[2, "libm2k.VectorD.resize"]], "resize() (libm2k.vectori method)": [[2, "libm2k.VectorI.resize"]], "resize() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.resize"]], "resize() (libm2k.vectors method)": [[2, "libm2k.VectorS.resize"]], "resize() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.resize"]], "resize() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.resize"]], "resize() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.resize"]], "resize() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.resize"]], "resize() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.resize"]], "resize() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.resize"]], "second (libm2k.pairdd property)": [[2, "libm2k.PairDD.second"]], "serial (libm2k.context_info property)": [[2, "libm2k.CONTEXT_INFO.serial"]], "setadccalibrationgain() (libm2k.m2k method)": [[2, "libm2k.M2k.setAdcCalibrationGain"]], "setadccalibrationoffset() (libm2k.m2k method)": [[2, "libm2k.M2k.setAdcCalibrationOffset"]], "setadcgain() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.setAdcGain"]], "setadcoffset() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.setAdcOffset"]], "setanalogcondition() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setAnalogCondition"]], "setanalogdelay() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setAnalogDelay"]], "setanalogexternalcondition() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setAnalogExternalCondition"]], "setanalogexternaloutselect() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setAnalogExternalOutSelect"]], "setanaloghysteresis() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setAnalogHysteresis"]], "setanaloglevel() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setAnalogLevel"]], "setanaloglevelraw() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setAnalogLevelRaw"]], "setanalogmode() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setAnalogMode"]], "setanalogouttriggercondition() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setAnalogOutTriggerCondition"]], "setanalogouttriggersource() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setAnalogOutTriggerSource"]], "setanalogouttriggerstatus() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setAnalogOutTriggerStatus"]], "setanalogsource() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setAnalogSource"]], "setanalogsourcechannel() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setAnalogSourceChannel"]], "setanalogstreamingflag() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setAnalogStreamingFlag"]], "setbufferrearmontrigger() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.setBufferRearmOnTrigger"]], "setcalibparameters() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setCalibParameters"]], "setcyclic() (libm2k.genericanalogout method)": [[2, "libm2k.GenericAnalogOut.setCyclic"]], "setcyclic() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.setCyclic"]], "setcyclic() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.setCyclic"]], "setdaccalibrationgain() (libm2k.m2k method)": [[2, "libm2k.M2k.setDacCalibrationGain"]], "setdaccalibrationoffset() (libm2k.m2k method)": [[2, "libm2k.M2k.setDacCalibrationOffset"]], "setdacgain() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.setDacGain"]], "setdacoffset() (libm2k.m2kcalibration method)": [[2, "libm2k.M2kCalibration.setDacOffset"]], "setdigitalcondition() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setDigitalCondition"]], "setdigitaldelay() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setDigitalDelay"]], "setdigitalexternalcondition() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setDigitalExternalCondition"]], "setdigitalmode() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setDigitalMode"]], "setdigitalsource() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setDigitalSource"]], "setdigitalstreamingflag() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setDigitalStreamingFlag"]], "setdirection() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.setDirection"]], "setexternalclocksource() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.setExternalClocksource"]], "sethwtriggersettings() (libm2k.m2khardwaretrigger method)": [[2, "libm2k.M2kHardwareTrigger.setHwTriggerSettings"]], "setkernelbufferscount() (libm2k.genericanalogin method)": [[2, "libm2k.GenericAnalogIn.setKernelBuffersCount"]], "setkernelbufferscount() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.setKernelBuffersCount"]], "setkernelbufferscount() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.setKernelBuffersCount"]], "setkernelbufferscountin() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.setKernelBuffersCountIn"]], "setkernelbufferscountout() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.setKernelBuffersCountOut"]], "setled() (libm2k.m2k method)": [[2, "libm2k.M2k.setLed"]], "setoutputmode() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.setOutputMode"]], "setoversamplingratio() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.setOversamplingRatio"]], "setoversamplingratio() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.setOversamplingRatio"]], "setrange() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.setRange"]], "setratemux() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.setRateMux"]], "setsamplerate() (libm2k.genericanalogin method)": [[2, "libm2k.GenericAnalogIn.setSampleRate"]], "setsamplerate() (libm2k.genericanalogout method)": [[2, "libm2k.GenericAnalogOut.setSampleRate"]], "setsamplerate() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.setSampleRate"]], "setsamplerate() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.setSampleRate"]], "setsampleratein() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.setSampleRateIn"]], "setsamplerateout() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.setSampleRateOut"]], "setsynceddma() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.setSyncedDma"]], "setsyncedstartdma() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.setSyncedStartDma"]], "settimeout() (libm2k.context method)": [[2, "libm2k.Context.setTimeout"]], "setvalueraw() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.setValueRaw"]], "setverticaloffset() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.setVerticalOffset"]], "setvoltage() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.setVoltage"]], "setvoltageraw() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.setVoltageRaw"]], "size() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.size"]], "size() (libm2k.dmms method)": [[2, "libm2k.DMMs.size"]], "size() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.size"]], "size() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.size"]], "size() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.size"]], "size() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.size"]], "size() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.size"]], "size() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.size"]], "size() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.size"]], "size() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.size"]], "size() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.size"]], "size() (libm2k.vectord method)": [[2, "libm2k.VectorD.size"]], "size() (libm2k.vectori method)": [[2, "libm2k.VectorI.size"]], "size() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.size"]], "size() (libm2k.vectors method)": [[2, "libm2k.VectorS.size"]], "size() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.size"]], "size() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.size"]], "size() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.size"]], "size() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.size"]], "size() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.size"]], "size() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.size"]], "startacquisition() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.startAcquisition"]], "startacquisition() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.startAcquisition"]], "startmixedsignalacquisition() (libm2k.m2k method)": [[2, "libm2k.M2k.startMixedSignalAcquisition"]], "stop() (libm2k.genericanalogout method)": [[2, "libm2k.GenericAnalogOut.stop"]], "stop() (libm2k.m2kanalogout method)": [[2, "libm2k.M2kAnalogOut.stop"]], "stopacquisition() (libm2k.m2kanalogin method)": [[2, "libm2k.M2kAnalogIn.stopAcquisition"]], "stopacquisition() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.stopAcquisition"]], "stopbufferout() (libm2k.m2kdigital method)": [[2, "libm2k.M2kDigital.stopBufferOut"]], "stopmixedsignalacquisition() (libm2k.m2k method)": [[2, "libm2k.M2k.stopMixedSignalAcquisition"]], "swap() (libm2k.dmmreading method)": [[2, "libm2k.DMMReading.swap"]], "swap() (libm2k.dmms method)": [[2, "libm2k.DMMs.swap"]], "swap() (libm2k.iiobuffers method)": [[2, "libm2k.IioBuffers.swap"]], "swap() (libm2k.iiochannels method)": [[2, "libm2k.IioChannels.swap"]], "swap() (libm2k.iiodevices method)": [[2, "libm2k.IioDevices.swap"]], "swap() (libm2k.m2kanalogins method)": [[2, "libm2k.M2kAnalogIns.swap"]], "swap() (libm2k.m2kanalogouts method)": [[2, "libm2k.M2kAnalogOuts.swap"]], "swap() (libm2k.m2kconditionanalog method)": [[2, "libm2k.M2kConditionAnalog.swap"]], "swap() (libm2k.m2kconditiondigital method)": [[2, "libm2k.M2kConditionDigital.swap"]], "swap() (libm2k.m2kmodes method)": [[2, "libm2k.M2kModes.swap"]], "swap() (libm2k.vectorctxinfo method)": [[2, "libm2k.VectorCtxInfo.swap"]], "swap() (libm2k.vectord method)": [[2, "libm2k.VectorD.swap"]], "swap() (libm2k.vectori method)": [[2, "libm2k.VectorI.swap"]], "swap() (libm2k.vectorpairdd method)": [[2, "libm2k.VectorPairDD.swap"]], "swap() (libm2k.vectors method)": [[2, "libm2k.VectorS.swap"]], "swap() (libm2k.vectorstr method)": [[2, "libm2k.VectorStr.swap"]], "swap() (libm2k.vectorus method)": [[2, "libm2k.VectorUS.swap"]], "swap() (libm2k.vectorvectord method)": [[2, "libm2k.VectorVectorD.swap"]], "swap() (libm2k.vectorvectori method)": [[2, "libm2k.VectorVectorI.swap"]], "swap() (libm2k.vectorvectors method)": [[2, "libm2k.VectorVectorS.swap"]], "swap() (libm2k.vectorvectorus method)": [[2, "libm2k.VectorVectorUS.swap"]], "thisown (libm2k.calibration_parameters property)": [[2, "libm2k.CALIBRATION_PARAMETERS.thisown"]], "thisown (libm2k.context_info property)": [[2, "libm2k.CONTEXT_INFO.thisown"]], "thisown (libm2k.context property)": [[2, "libm2k.Context.thisown"]], "thisown (libm2k.contextbuilder property)": [[2, "libm2k.ContextBuilder.thisown"]], "thisown (libm2k.dmm property)": [[2, "libm2k.DMM.thisown"]], "thisown (libm2k.dmmreading property)": [[2, "libm2k.DMMReading.thisown"]], "thisown (libm2k.dmm_reading property)": [[2, "libm2k.DMM_READING.thisown"]], "thisown (libm2k.dmms property)": [[2, "libm2k.DMMs.thisown"]], "thisown (libm2k.fmcomms property)": [[2, "libm2k.FMCOMMS.thisown"]], "thisown (libm2k.generic property)": [[2, "libm2k.Generic.thisown"]], "thisown (libm2k.genericanalogin property)": [[2, "libm2k.GenericAnalogIn.thisown"]], "thisown (libm2k.genericanalogout property)": [[2, "libm2k.GenericAnalogOut.thisown"]], "thisown (libm2k.iio_context_version property)": [[2, "libm2k.IIO_CONTEXT_VERSION.thisown"]], "thisown (libm2k.iio_objects property)": [[2, "libm2k.IIO_OBJECTS.thisown"]], "thisown (libm2k.iiobuffers property)": [[2, "libm2k.IioBuffers.thisown"]], "thisown (libm2k.iiochannels property)": [[2, "libm2k.IioChannels.thisown"]], "thisown (libm2k.iiodevices property)": [[2, "libm2k.IioDevices.thisown"]], "thisown (libm2k.m2k property)": [[2, "libm2k.M2k.thisown"]], "thisown (libm2k.m2kanalogin property)": [[2, "libm2k.M2kAnalogIn.thisown"]], "thisown (libm2k.m2kanalogins property)": [[2, "libm2k.M2kAnalogIns.thisown"]], "thisown (libm2k.m2kanalogout property)": [[2, "libm2k.M2kAnalogOut.thisown"]], "thisown (libm2k.m2kanalogouts property)": [[2, "libm2k.M2kAnalogOuts.thisown"]], "thisown (libm2k.m2kcalibration property)": [[2, "libm2k.M2kCalibration.thisown"]], "thisown (libm2k.m2kconditionanalog property)": [[2, "libm2k.M2kConditionAnalog.thisown"]], "thisown (libm2k.m2kconditiondigital property)": [[2, "libm2k.M2kConditionDigital.thisown"]], "thisown (libm2k.m2kdigital property)": [[2, "libm2k.M2kDigital.thisown"]], "thisown (libm2k.m2khardwaretrigger property)": [[2, "libm2k.M2kHardwareTrigger.thisown"]], "thisown (libm2k.m2kmodes property)": [[2, "libm2k.M2kModes.thisown"]], "thisown (libm2k.m2kpowersupply property)": [[2, "libm2k.M2kPowerSupply.thisown"]], "thisown (libm2k.pairdd property)": [[2, "libm2k.PairDD.thisown"]], "thisown (libm2k.settings property)": [[2, "libm2k.SETTINGS.thisown"]], "thisown (libm2k.swigpyiterator property)": [[2, "libm2k.SwigPyIterator.thisown"]], "thisown (libm2k.vectorctxinfo property)": [[2, "libm2k.VectorCtxInfo.thisown"]], "thisown (libm2k.vectord property)": [[2, "libm2k.VectorD.thisown"]], "thisown (libm2k.vectori property)": [[2, "libm2k.VectorI.thisown"]], "thisown (libm2k.vectorpairdd property)": [[2, "libm2k.VectorPairDD.thisown"]], "thisown (libm2k.vectors property)": [[2, "libm2k.VectorS.thisown"]], "thisown (libm2k.vectorstr property)": [[2, "libm2k.VectorStr.thisown"]], "thisown (libm2k.vectorus property)": [[2, "libm2k.VectorUS.thisown"]], "thisown (libm2k.vectorvectord property)": [[2, "libm2k.VectorVectorD.thisown"]], "thisown (libm2k.vectorvectori property)": [[2, "libm2k.VectorVectorI.thisown"]], "thisown (libm2k.vectorvectors property)": [[2, "libm2k.VectorVectorS.thisown"]], "thisown (libm2k.vectorvectorus property)": [[2, "libm2k.VectorVectorUS.thisown"]], "thisown (libm2k.channel property)": [[2, "libm2k.channel.thisown"]], "thisown (libm2k.ini_device_struct property)": [[2, "libm2k.ini_device_struct.thisown"]], "thisown (libm2k.m2k_exception property)": [[2, "libm2k.m2k_exception.thisown"]], "thisown (libm2k.m2k_exception_builder property)": [[2, "libm2k.m2k_exception_builder.thisown"]], "throw_exception() (in module libm2k)": [[2, "libm2k.throw_exception"]], "togeneric() (libm2k.context method)": [[2, "libm2k.Context.toGeneric"]], "tom2k() (libm2k.context method)": [[2, "libm2k.Context.toM2k"]], "trigger_source (libm2k.settings property)": [[2, "libm2k.SETTINGS.trigger_source"]], "type() (libm2k.m2k_exception method)": [[2, "libm2k.m2k_exception.type"]], "type() (libm2k.m2k_exception_builder method)": [[2, "libm2k.m2k_exception_builder.type"]], "unit_name (libm2k.dmm_reading property)": [[2, "libm2k.DMM_READING.unit_name"]], "unit_symbol (libm2k.dmm_reading property)": [[2, "libm2k.DMM_READING.unit_symbol"]], "uri (libm2k.context_info property)": [[2, "libm2k.CONTEXT_INFO.uri"]], "value (libm2k.dmm_reading property)": [[2, "libm2k.DMM_READING.value"]], "value() (libm2k.swigpyiterator method)": [[2, "libm2k.SwigPyIterator.value"]], "what() (libm2k.m2k_exception method)": [[2, "libm2k.m2k_exception.what"]]}}) \ No newline at end of file diff --git a/search/all_0.html b/search/all_0.html new file mode 100644 index 00000000..5330204c --- /dev/null +++ b/search/all_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 00000000..14991cb5 --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['adc_5fgain_5fch_5f1',['adc_gain_ch_1',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#af95d5815f94f63824ef3b7fdee3353a5',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['adc_5fgain_5fch_5f2',['adc_gain_ch_2',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#ab39bc944bd18797152284a00e4de22ab',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['adc_5foffset_5fch_5f1',['adc_offset_ch_1',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#abdd022cd2de96e50442c07b20ce4bcbd',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['adc_5foffset_5fch_5f2',['adc_offset_ch_2',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#a839f19b12c4e2012637e813ea48b51f6',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['always',['ALWAYS',['../enums_8hpp.html#aeba800e1095f3c2c0d58082c8e5d815ba5d598505a7cac3f0ef018435600cdfdc',1,'libm2k']]], + ['analog',['ANALOG',['../enums_8hpp.html#aeba800e1095f3c2c0d58082c8e5d815ba443730a5af20af63ab58ad9e39eb9a3d',1,'libm2k::ANALOG()'],['../group__analog.html',1,'(Global Namespace)']]], + ['analog_5fcondition',['analog_condition',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#a17b390fcf63b213221bc0520abd1b2d8',1,'libm2k::SETTINGS']]], + ['analog_5fin_5fchannel',['ANALOG_IN_CHANNEL',['../analog_2enums_8hpp.html#ae0ecde90087a71dca08ad7adcccb0bca',1,'libm2k::analog']]], + ['analogin',['AnalogIn',['../group__analogin.html',1,'']]], + ['analogout',['AnalogOut',['../group__analogout.html',1,'']]], + ['anychannelenabled',['anyChannelEnabled',['../group__digital.html#ga0c24d8f0fc23a2a70abbc5010073794c',1,'libm2k::digital::M2kDigital::anyChannelEnabled()'],['../group__powersupply.html#gab4ac3b677fe0a9ebd16945d6339423bf',1,'libm2k::analog::M2kPowerSupply::anyChannelEnabled()']]], + ['enums_2ehpp',['enums.hpp',['../analog_2enums_8hpp.html',1,'']]] +]; diff --git a/search/all_1.html b/search/all_1.html new file mode 100644 index 00000000..2f467936 --- /dev/null +++ b/search/all_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 00000000..f287bf45 --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['calibrateadc',['calibrateADC',['../group__m2k.html#ga62771d2a4a349770065aa051888d9904',1,'libm2k::context::M2k']]], + ['calibratedac',['calibrateDAC',['../group__m2k.html#ga034a9364b1dd9f850c61249b7290735a',1,'libm2k::context::M2k']]], + ['calibratefromcontext',['calibrateFromContext',['../group__m2k.html#gac3480c51540ba917125abed6a0c9b840',1,'libm2k::context::M2k']]], + ['calibration_5fparameters',['CALIBRATION_PARAMETERS',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html',1,'libm2k']]], + ['cancelacquisition',['cancelAcquisition',['../group__digital.html#ga0bd264618c41ac9b220de52077767b9f',1,'libm2k::digital::M2kDigital::cancelAcquisition()'],['../group__analogin.html#ga84eeb91d0426a1b08fa0bc1dec6224eb',1,'libm2k::analog::M2kAnalogIn::cancelAcquisition()']]], + ['cancelbuffer',['cancelBuffer',['../group__analogout.html#gab3e08834b2c91d62f3c6f8773e8a496f',1,'libm2k::analog::M2kAnalogOut::cancelBuffer()=0'],['../group__analogout.html#ga3898d232a908a35e3ead630fcb367ad6',1,'libm2k::analog::M2kAnalogOut::cancelBuffer(unsigned int chn)=0']]], + ['cancelbufferout',['cancelBufferOut',['../group__digital.html#ga5fc713220b8b09756d9335191a4eb42e',1,'libm2k::digital::M2kDigital']]], + ['channel_5f1',['CHANNEL_1',['../enums_8hpp.html#af39a96895342e305493d2498bed1b7b1a45b70a9415d84742f069301e97ad07a5',1,'libm2k']]], + ['channel_5f2',['CHANNEL_2',['../enums_8hpp.html#af39a96895342e305493d2498bed1b7b1a4017e84bc4b3115617ce1cf99bc2156d',1,'libm2k']]], + ['context',['Context',['../classlibm2k_1_1context_1_1_context.html',1,'libm2k::context::Context'],['../group__context.html',1,'(Global Namespace)']]], + ['context_5finfo',['CONTEXT_INFO',['../structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html',1,'libm2k']]], + ['contextbuilder',['ContextBuilder',['../group__contextbuilder.html',1,'']]], + ['contextclose',['contextClose',['../group__contextbuilder.html#ga6e5e40d0e87d47f8ca103f5a0565eea8',1,'libm2k::context']]], + ['contextcloseall',['contextCloseAll',['../group__contextbuilder.html#gadd914c2413159b35b5233d9d0677acc1',1,'libm2k::context']]], + ['convertrawtovolts',['convertRawToVolts',['../group__analogin.html#ga237e94f6d8c7fc222bdd398ce8b8dd42',1,'libm2k::analog::M2kAnalogIn::convertRawToVolts()'],['../group__analogout.html#gada83f295802844a9d5ec5c30fc503566',1,'libm2k::analog::M2kAnalogOut::convertRawToVolts()']]], + ['convertvoltstoraw',['convertVoltsToRaw',['../group__analogin.html#gaba8667ff41c635f3328e437bf068b9a6',1,'libm2k::analog::M2kAnalogIn::convertVoltsToRaw()'],['../group__analogout.html#gab5b23c10178362b1bc09e0a422c20b63',1,'libm2k::analog::M2kAnalogOut::convertVoltsToRaw()']]] +]; diff --git a/search/all_2.html b/search/all_2.html new file mode 100644 index 00000000..4c33d855 --- /dev/null +++ b/search/all_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 00000000..d8fa958d --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['dac_5fa_5fgain',['dac_a_gain',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#ad41196a804f918958109f3e26cc84b86',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['dac_5fa_5foffset',['dac_a_offset',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#a91b82c1619e8b9391fb18161b546cc74',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['dac_5fb_5fgain',['dac_b_gain',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#a473d417371c34985ab03d67398c18d7f',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['dac_5fb_5foffset',['dac_b_offset',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#a99ebbe59e897683e640c216695b9fb7a',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['delay',['delay',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#a8f98fcfe7928bb304ab42f5e364b01be',1,'libm2k::SETTINGS']]], + ['digital',['Digital',['../group__digital.html',1,'']]], + ['digital_5fcondition',['digital_condition',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#ac61236c4a0c8fcf6cc6e26458eae7a27',1,'libm2k::SETTINGS']]], + ['dio_5fchannel',['DIO_CHANNEL',['../digital_2enums_8hpp.html#a8ea91960822cd9737419b2778b503fa1',1,'libm2k::digital']]], + ['dio_5fdirection',['DIO_DIRECTION',['../digital_2enums_8hpp.html#ae5f7fe3a979c81e0b818a3717617340c',1,'libm2k::digital']]], + ['dio_5flevel',['DIO_LEVEL',['../digital_2enums_8hpp.html#a291d34c3a24337250152984979becc9f',1,'libm2k::digital']]], + ['dio_5fmode',['DIO_MODE',['../digital_2enums_8hpp.html#a1b5480a99a6e04cedbb86a964f03e08f',1,'libm2k::digital']]], + ['dio_5ftrigger_5fmode',['DIO_TRIGGER_MODE',['../digital_2enums_8hpp.html#aef7966160e8247e2eab1ace19487aeb4',1,'libm2k::digital']]], + ['dmm',['DMM',['../classlibm2k_1_1analog_1_1_d_m_m.html',1,'libm2k::analog::DMM'],['../group__dmm.html',1,'(Global Namespace)']]], + ['dmm_5freading',['DMM_READING',['../structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html',1,'libm2k::analog']]], + ['enums_2ehpp',['enums.hpp',['../digital_2enums_8hpp.html',1,'']]] +]; diff --git a/search/all_3.html b/search/all_3.html new file mode 100644 index 00000000..b634070b --- /dev/null +++ b/search/all_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 00000000..f2cb4c9a --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['enableall',['enableAll',['../group__powersupply.html#ga00e30f4bec136da44b6f362ed192e3df',1,'libm2k::analog::M2kPowerSupply']]], + ['enableallout',['enableAllOut',['../group__digital.html#gadf8c692ae70ed0b63070ef629f0ac90d',1,'libm2k::digital::M2kDigital']]], + ['enablechannel',['enableChannel',['../group__digital.html#ga43566daefbf55586beb4b29bea00999e',1,'libm2k::digital::M2kDigital::enableChannel(unsigned int index, bool enable)=0'],['../group__digital.html#gaef6c1643fccde5e4ca5f6432936317d7',1,'libm2k::digital::M2kDigital::enableChannel(DIO_CHANNEL index, bool enable)=0'],['../group__analogin.html#ga5c5fe8e4445da890743226e3a5421222',1,'libm2k::analog::M2kAnalogIn::enableChannel()'],['../group__analogout.html#ga0293cf93f394c192f493d38d1a6f1f84',1,'libm2k::analog::M2kAnalogOut::enableChannel()'],['../group__powersupply.html#gaa41fba46e350018b34608f9371dc1d37',1,'libm2k::analog::M2kPowerSupply::enableChannel()']]], + ['enablelogging',['enableLogging',['../group__contextbuilder.html#ga45fdaa012ef8e63316f714f2f0aca4aa',1,'libm2k::context']]], + ['enums_2ehpp',['enums.hpp',['../enums_8hpp.html',1,'']]], + ['external',['EXTERNAL',['../enums_8hpp.html#aeba800e1095f3c2c0d58082c8e5d815ba1c3f9d5c79a69dc511891b85a8f0f5a0',1,'libm2k']]] +]; diff --git a/search/all_4.html b/search/all_4.html new file mode 100644 index 00000000..dd062aea --- /dev/null +++ b/search/all_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 00000000..e37eb808 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,88 @@ +var searchData= +[ + ['getadccalibrationgain',['getAdcCalibrationGain',['../group__m2k.html#ga46599fe80b26ea415853f591abbf5da1',1,'libm2k::context::M2k']]], + ['getadccalibrationoffset',['getAdcCalibrationOffset',['../group__m2k.html#gac0e6fae8217270647c13da9b9b7f5314',1,'libm2k::context::M2k']]], + ['getallchannels',['getAllChannels',['../group__dmm.html#ga95bcf8878bf9dd59cbe38af83d4f4bc3',1,'libm2k::analog::DMM']]], + ['getallcontexts',['getAllContexts',['../group__contextbuilder.html#ga3579a7ce2c2bc8fbce914e48e85fc0ab',1,'libm2k::context']]], + ['getalldevices',['getAllDevices',['../group__context.html#ga07eb8023bee022c2ab0c65d1ced45274',1,'libm2k::context::Context']]], + ['getalldmm',['getAllDmm',['../group__context.html#gab5bc65de8fccef464039ad551f5a0d35',1,'libm2k::context::Context']]], + ['getanalogcondition',['getAnalogCondition',['../group__m2ktrigger.html#ga36281a1e8211ec72a4417cd09b56af0a',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogdelay',['getAnalogDelay',['../group__m2ktrigger.html#ga02eb920c7e5478bbe202d86c4b8d99c3',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogexternalcondition',['getAnalogExternalCondition',['../group__m2ktrigger.html#ga03b5ffc638d088b97ef767d437ed2f27',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogexternaloutselect',['getAnalogExternalOutSelect',['../group__m2ktrigger.html#gab5a4b58b5c02bb43ca9998880fccb1bb',1,'libm2k::M2kHardwareTrigger']]], + ['getanaloghysteresis',['getAnalogHysteresis',['../group__m2ktrigger.html#ga2919b1e7f0d31c773b212e54278d5cb9',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogin',['getAnalogIn',['../group__m2k.html#gad6256503ed771144856e05348a3dd4ae',1,'libm2k::context::M2k::getAnalogIn()=0'],['../group__m2k.html#ga4d569ea44d4d87d82626aee520183fa4',1,'libm2k::context::M2k::getAnalogIn(std::string dev_name)=0']]], + ['getanaloglevel',['getAnalogLevel',['../group__m2ktrigger.html#ga515f0c2c6e68ebe8fca6bf5e27351ebe',1,'libm2k::M2kHardwareTrigger']]], + ['getanaloglevelraw',['getAnalogLevelRaw',['../group__m2ktrigger.html#gae69e66414e4d8269dbc17411c88d924c',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogmode',['getAnalogMode',['../group__m2ktrigger.html#ga77edc0fc081e5eeb13b9d289fd4acf7b',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogout',['getAnalogOut',['../group__m2k.html#ga4f28af9ff01de2a70a5d0ea6afc0bf16',1,'libm2k::context::M2k']]], + ['getanalogouttriggercondition',['getAnalogOutTriggerCondition',['../group__m2ktrigger.html#ga139346ebd4fee43e52d4cdf9dbefb51e',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogouttriggersource',['getAnalogOutTriggerSource',['../group__m2ktrigger.html#ga5c308d49f86d61a7889882d790b4398d',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogouttriggerstatus',['getAnalogOutTriggerStatus',['../group__m2ktrigger.html#gaf06595a477e2c0c62855c6a60a649ae2',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogsource',['getAnalogSource',['../group__m2ktrigger.html#ga7f1d86bfe819d34eb5ca76c92192c93c',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogsourcechannel',['getAnalogSourceChannel',['../group__m2ktrigger.html#ga129b2bc52e91856f3bdc7ade8c6981fc',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogstreamingflag',['getAnalogStreamingFlag',['../group__m2ktrigger.html#gacd3fa5a8f5d08ade52cc982c37b9b8ea',1,'libm2k::M2kHardwareTrigger']]], + ['getavailablecontextattributes',['getAvailableContextAttributes',['../group__context.html#ga8ebdea3a5684bc549ae9dd223183d8c0',1,'libm2k::context::Context']]], + ['getavailableranges',['getAvailableRanges',['../group__analogin.html#gac0945512459e6672fa782c2a34585c59',1,'libm2k::analog::M2kAnalogIn']]], + ['getavailablesamplerates',['getAvailableSampleRates',['../group__analogin.html#ga74d075460fbce07f0855a7a01e20312a',1,'libm2k::analog::M2kAnalogIn::getAvailableSampleRates()'],['../group__analogout.html#gaba62dc41d9bb4ca38c4434dce47b7b5d',1,'libm2k::analog::M2kAnalogOut::getAvailableSampleRates()']]], + ['getbufferrearmontrigger',['getBufferRearmOnTrigger',['../group__analogout.html#ga1404f76a293f0645c1858949514ff66b',1,'libm2k::analog::M2kAnalogOut']]], + ['getchannelname',['getChannelName',['../group__analogin.html#ga1367ecf1c243d290d07cff46ffc19c22',1,'libm2k::analog::M2kAnalogIn::getChannelName()'],['../group__analogout.html#gafbffa76f272fc6e1ed2fc7b581f37021',1,'libm2k::analog::M2kAnalogOut::getChannelName()']]], + ['getcontextattributevalue',['getContextAttributeValue',['../group__context.html#gaf86b317fbd0f4182b9f8bcea82cde622',1,'libm2k::context::Context']]], + ['getcontextdescription',['getContextDescription',['../group__context.html#ga333c238d19e9af040df6b7c03cee9827',1,'libm2k::context::Context']]], + ['getcontextsinfo',['getContextsInfo',['../group__contextbuilder.html#ga7203f5bdfac4498a2cb9ef558af583c6',1,'libm2k::context']]], + ['getcyclic',['getCyclic',['../group__digital.html#ga026027afc00ebf7453af0f2f36027f44',1,'libm2k::digital::M2kDigital::getCyclic()'],['../group__analogout.html#gac89e8a228fbf71a302b5d2e085fa8c25',1,'libm2k::analog::M2kAnalogOut::getCyclic()']]], + ['getdaccalibrationgain',['getDacCalibrationGain',['../group__m2k.html#gaa2db6567ceefccd8aadb42444629f47e',1,'libm2k::context::M2k']]], + ['getdaccalibrationoffset',['getDacCalibrationOffset',['../group__m2k.html#ga77075e62398b448df892baeebf3573bf',1,'libm2k::context::M2k']]], + ['getdigital',['getDigital',['../group__m2k.html#ga1490bea0b084d2a0c1520fccedd37b01',1,'libm2k::context::M2k']]], + ['getdigitalcondition',['getDigitalCondition',['../group__m2ktrigger.html#gaa4f2ef34570c13a94b8b49a209acdfc7',1,'libm2k::M2kHardwareTrigger::getDigitalCondition(unsigned int chnIdx)=0'],['../group__m2ktrigger.html#ga6d2afeda96fde0dbc3e6cd47eeec5b84',1,'libm2k::M2kHardwareTrigger::getDigitalCondition(libm2k::digital::DIO_CHANNEL chnIdx)=0']]], + ['getdigitaldelay',['getDigitalDelay',['../group__m2ktrigger.html#gac7029bc129b536e70615ad6b7005a594',1,'libm2k::M2kHardwareTrigger']]], + ['getdigitalexternalcondition',['getDigitalExternalCondition',['../group__m2ktrigger.html#gacd8661561a6d2196f9b96c8154dc976a',1,'libm2k::M2kHardwareTrigger']]], + ['getdigitalmode',['getDigitalMode',['../group__m2ktrigger.html#gab2932429a0017228461427a01e66a91d',1,'libm2k::M2kHardwareTrigger']]], + ['getdigitalsource',['getDigitalSource',['../group__m2ktrigger.html#ga135544f237102aab4b6ba0d83df4b9c5',1,'libm2k::M2kHardwareTrigger']]], + ['getdigitalstreamingflag',['getDigitalStreamingFlag',['../group__m2ktrigger.html#gaf1b599f37210ddedd5e553269e7160a7',1,'libm2k::M2kHardwareTrigger']]], + ['getdirection',['getDirection',['../group__digital.html#ga4bf19c9087009c73554cfefedcafaf88',1,'libm2k::digital::M2kDigital']]], + ['getdmm',['getDMM',['../group__context.html#ga29d1bf312eb0f122ed8872668ca1731d',1,'libm2k::context::Context::getDMM(unsigned int index)=0'],['../group__context.html#ga3c89623939ae8aa17723198616f6733a',1,'libm2k::context::Context::getDMM(std::string name)=0']]], + ['getdmmcount',['getDmmCount',['../group__context.html#ga896d74a68af376ed71b21660bff42add',1,'libm2k::context::Context']]], + ['getfiltercompensation',['getFilterCompensation',['../group__analogin.html#ga110371da0fff6dee26d603855fb83f95',1,'libm2k::analog::M2kAnalogIn::getFilterCompensation()'],['../group__analogout.html#ga3002c9ea4c24af64670da2018983c3dc',1,'libm2k::analog::M2kAnalogOut::getFilterCompensation()']]], + ['getfirmwareversion',['getFirmwareVersion',['../group__context.html#ga1d0abe606b0b05f910c5e2d30610863c',1,'libm2k::context::Context']]], + ['gethysteresisrange',['getHysteresisRange',['../group__analogin.html#gae1f054bba37640e9fbb740cc078d7dcc',1,'libm2k::analog::M2kAnalogIn']]], + ['getiiocontext',['getIioContext',['../group__context.html#gaad5e679af49b71db0827c82508472cf3',1,'libm2k::context::Context']]], + ['getiiocontextversion',['getIioContextVersion',['../group__context.html#gacc5340987f5af897e410f826159243db',1,'libm2k::context::Context']]], + ['getiioobjects',['getIioObjects',['../group__digital.html#ga7a90f510a936e8a2fb0443c55b95b6f1',1,'libm2k::digital::M2kDigital::getIioObjects()'],['../group__analogin.html#gaa1f732b362e4ac64c17fa16f44301e50',1,'libm2k::analog::M2kAnalogIn::getIioObjects()'],['../group__analogout.html#ga839474ad33fcc9f42ca6c9bb242a5076',1,'libm2k::analog::M2kAnalogOut::getIioObjects()']]], + ['getkernelbufferscount',['getKernelBuffersCount',['../group__analogin.html#gac6871e786db4a19f141acd65212bbdae',1,'libm2k::analog::M2kAnalogIn::getKernelBuffersCount()'],['../group__analogout.html#ga23b330fc9204382103b5ba916d097b2f',1,'libm2k::analog::M2kAnalogOut::getKernelBuffersCount()']]], + ['getled',['getLed',['../group__m2k.html#ga7b43520183627539dcf3d9c403dbfb32',1,'libm2k::context::M2k']]], + ['getlut',['getLUT',['../group__m2k.html#ga4e05838cd2168cfe96a41257452d1791',1,'libm2k::context::M2k']]], + ['getmaximumsamplerate',['getMaximumSamplerate',['../group__analogin.html#gacd5288290581b262b70cf49beedc2380',1,'libm2k::analog::M2kAnalogIn::getMaximumSamplerate()'],['../group__analogout.html#ga8ede142099d6c9a5b67a42af645b7838',1,'libm2k::analog::M2kAnalogOut::getMaximumSamplerate()']]], + ['getname',['getName',['../group__analogin.html#gab9b3ff0858b627db226b9870b75b5b5e',1,'libm2k::analog::M2kAnalogIn::getName()'],['../group__dmm.html#ga6c1be15dd24037b62558e3592b15e016',1,'libm2k::analog::DMM::getName()']]], + ['getnbchannels',['getNbChannels',['../group__analogin.html#gaf34915a36b28c543c9938ca3109e5e13',1,'libm2k::analog::M2kAnalogIn::getNbChannels()'],['../group__analogout.html#gaec2165e7809d9b70a856c2f31c25e33d',1,'libm2k::analog::M2kAnalogOut::getNbChannels()']]], + ['getnbchannelsin',['getNbChannelsIn',['../group__digital.html#gaf2af31083a48963fa7ef9d0a10bc4c93',1,'libm2k::digital::M2kDigital']]], + ['getnbchannelsout',['getNbChannelsOut',['../group__digital.html#ga186967fea84c0919ec945c615daa558d',1,'libm2k::digital::M2kDigital']]], + ['getoutputmode',['getOutputMode',['../group__digital.html#ga1b6c36b1bcf39c2dfe8a9870e3f3ace1',1,'libm2k::digital::M2kDigital::getOutputMode(DIO_CHANNEL chn)=0'],['../group__digital.html#gab724115861ddbb2920ab3e36bf45f49f',1,'libm2k::digital::M2kDigital::getOutputMode(unsigned int chn)=0']]], + ['getoversamplingratio',['getOversamplingRatio',['../group__analogin.html#ga385851d7f84e3554ce695f3807cc236e',1,'libm2k::analog::M2kAnalogIn::getOversamplingRatio()=0'],['../group__analogin.html#gac070ac2920a3ca8d0880c69493259790',1,'libm2k::analog::M2kAnalogIn::getOversamplingRatio(unsigned int chn_idx)=0'],['../group__analogout.html#ga7fc2bdfad8ddd3da510c09353f45d477',1,'libm2k::analog::M2kAnalogOut::getOversamplingRatio()=0'],['../group__analogout.html#gad685eb3445f3cf4b5712385a8e58df84',1,'libm2k::analog::M2kAnalogOut::getOversamplingRatio(unsigned int chn)=0']]], + ['getpowersupply',['getPowerSupply',['../group__m2k.html#ga69759758b630bb1047fc6c9b0adb05ce',1,'libm2k::context::M2k']]], + ['getrange',['getRange',['../group__analogin.html#ga1e2f076c97d206be7c1a8e4d66486f78',1,'libm2k::analog::M2kAnalogIn']]], + ['getrangelimits',['getRangeLimits',['../group__analogin.html#gace88f68d1901554ce3e678eb132921df',1,'libm2k::analog::M2kAnalogIn']]], + ['getsamplerate',['getSampleRate',['../group__analogin.html#ga4da0d800002f8daa35b3ec620e30a889',1,'libm2k::analog::M2kAnalogIn::getSampleRate()'],['../group__analogout.html#gaca7b9d1a5cf40b2d1065e679341cb1c1',1,'libm2k::analog::M2kAnalogOut::getSampleRate()=0'],['../group__analogout.html#ga9f184574f3be74ebd54822b1d16d7383',1,'libm2k::analog::M2kAnalogOut::getSampleRate(unsigned int chn)=0']]], + ['getsampleratein',['getSampleRateIn',['../group__digital.html#gaadd3fc056a59d6068e3f5700e6efbc00',1,'libm2k::digital::M2kDigital']]], + ['getsamplerateout',['getSampleRateOut',['../group__digital.html#ga21d2acd5bcab7adb707cae0b692cc4cb',1,'libm2k::digital::M2kDigital']]], + ['getsamples',['getSamples',['../group__digital.html#gad162531b93bfc8c7f8b8aeb49893e2eb',1,'libm2k::digital::M2kDigital::getSamples(unsigned int nb_samples)=0'],['../group__digital.html#gad3da0d7489a164de1ca8989061d92b3a',1,'libm2k::digital::M2kDigital::getSamples(std::vector< unsigned short > &data, unsigned int nb_samples)=0'],['../group__analogin.html#ga86eaa7648d05295f42eda702c222bfc3',1,'libm2k::analog::M2kAnalogIn::getSamples(unsigned int nb_samples)=0'],['../group__analogin.html#gaeb9c9bdc8b4096da422b429c63c14bc3',1,'libm2k::analog::M2kAnalogIn::getSamples(std::vector< std::vector< double >> &data, unsigned int nb_samples)=0']]], + ['getsamplesinterleaved',['getSamplesInterleaved',['../group__analogin.html#ga77d810f7a974604fa06fe023876f8492',1,'libm2k::analog::M2kAnalogIn']]], + ['getsamplesinterleaved_5fmatlab',['getSamplesInterleaved_matlab',['../group__analogin.html#ga06f87bb92bef352f3226040ce72c3979',1,'libm2k::analog::M2kAnalogIn']]], + ['getsamplesp',['getSamplesP',['../group__digital.html#ga67eee33d5a44a05044326d4b8573151d',1,'libm2k::digital::M2kDigital']]], + ['getsamplesraw',['getSamplesRaw',['../group__analogin.html#ga06f67051068810086abe494d5c79f83b',1,'libm2k::analog::M2kAnalogIn']]], + ['getsamplesrawinterleaved',['getSamplesRawInterleaved',['../group__analogin.html#ga178aacec348337dfe64a23088c170e2d',1,'libm2k::analog::M2kAnalogIn']]], + ['getsamplesrawinterleaved_5fmatlab',['getSamplesRawInterleaved_matlab',['../group__analogin.html#gaf663f193fe0f63f82fa542182bb79cb2',1,'libm2k::analog::M2kAnalogIn']]], + ['getscalingfactor',['getScalingFactor',['../group__analogin.html#ga0832e1a58f8e73b329cfbe3145517390',1,'libm2k::analog::M2kAnalogIn::getScalingFactor()'],['../group__analogout.html#gac220f9211474aa280cf5cd505a2bedbc',1,'libm2k::analog::M2kAnalogOut::getScalingFactor()']]], + ['getserialnumber',['getSerialNumber',['../group__context.html#gac6f8ad8f8259b2509b8835aba7940d5b',1,'libm2k::context::Context']]], + ['gettrigger',['getTrigger',['../group__digital.html#ga277e769057f7930035bc4321fd4d85b0',1,'libm2k::digital::M2kDigital::getTrigger()'],['../group__analogin.html#gab5735110834e439fba99166d025c06af',1,'libm2k::analog::M2kAnalogIn::getTrigger()'],['../group__analogout.html#ga781d66ca3fb8f129e7d08b559feab245',1,'libm2k::analog::M2kAnalogOut::getTrigger()']]], + ['geturi',['getUri',['../group__context.html#ga4b1b7e79cc1feb9e3649717a71453f3a',1,'libm2k::context::Context']]], + ['getvalueforrange',['getValueForRange',['../group__analogin.html#ga924b38f0417cc80c3c9d1fcb32033b59',1,'libm2k::analog::M2kAnalogIn']]], + ['getvalueraw',['getValueRaw',['../group__digital.html#gae305a91b5f2f3df197fc492b4b691a1c',1,'libm2k::digital::M2kDigital::getValueRaw(DIO_CHANNEL index)=0'],['../group__digital.html#ga5075565d2f5f370bee915c71c587d648',1,'libm2k::digital::M2kDigital::getValueRaw(unsigned int index)=0']]], + ['getversion',['getVersion',['../group__contextbuilder.html#gadf59cfc7ad6a8db902e66034fb7dd1a0',1,'libm2k::context']]], + ['getverticaloffset',['getVerticalOffset',['../group__analogin.html#gad67570b11f42ac5c77dbe26ff8eaac47',1,'libm2k::analog::M2kAnalogIn']]], + ['getvoltage',['getVoltage',['../group__analogin.html#ga3fe65b480a2a201257f579291cc70397',1,'libm2k::analog::M2kAnalogIn::getVoltage(unsigned int ch)=0'],['../group__analogin.html#gaacf7806f2c176d926f57d13dc084f981',1,'libm2k::analog::M2kAnalogIn::getVoltage(libm2k::analog::ANALOG_IN_CHANNEL ch)=0'],['../group__analogin.html#gab2f82b2d0d089724127e5a10691dd751',1,'libm2k::analog::M2kAnalogIn::getVoltage()=0']]], + ['getvoltagep',['getVoltageP',['../group__analogin.html#ga41e2cce97db7ab759c9be46e42a1e39d',1,'libm2k::analog::M2kAnalogIn']]], + ['getvoltageraw',['getVoltageRaw',['../group__analogin.html#ga2c909238a5085c777aa418fa39abc6d0',1,'libm2k::analog::M2kAnalogIn::getVoltageRaw(unsigned int ch)=0'],['../group__analogin.html#ga2c5ad2da6075d9676dedab6a6c791d58',1,'libm2k::analog::M2kAnalogIn::getVoltageRaw(libm2k::analog::ANALOG_IN_CHANNEL ch)=0'],['../group__analogin.html#gac449be0da6da9a7a792926d317a8adb6',1,'libm2k::analog::M2kAnalogIn::getVoltageRaw()=0']]], + ['getvoltagerawp',['getVoltageRawP',['../group__analogin.html#ga35311eb4a85e65741b6d88939921b420',1,'libm2k::analog::M2kAnalogIn']]], + ['git_5ftag',['git_tag',['../structlibm2k_1_1_i_i_o___c_o_n_t_e_x_t___v_e_r_s_i_o_n.html#a810dbe1857db0dcf01f25f5ca6e641e2',1,'libm2k::IIO_CONTEXT_VERSION']]] +]; diff --git a/search/all_5.html b/search/all_5.html new file mode 100644 index 00000000..f0780fdd --- /dev/null +++ b/search/all_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 00000000..e0695157 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['hascontextcalibration',['hasContextCalibration',['../group__m2k.html#ga6c0c9c90802225a37355126462247250',1,'libm2k::context::M2k']]], + ['hasmixedsignal',['hasMixedSignal',['../group__m2k.html#ga2236476a76c6e13fa28160f29c89cb11',1,'libm2k::context::M2k']]], + ['hysteresis',['hysteresis',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#ad6a94c396e8791b95e604b20abbcc083',1,'libm2k::SETTINGS']]], + ['hardwaretrigger',['HardwareTrigger',['../group__m2ktrigger.html',1,'']]] +]; diff --git a/search/all_6.html b/search/all_6.html new file mode 100644 index 00000000..39b0f555 --- /dev/null +++ b/search/all_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 00000000..7c2858a0 --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['id',['id',['../structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html#a9220f12e8f8aa3d9737a6bf3617658ae',1,'libm2k::analog::DMM_READING']]], + ['id_5fproduct',['id_product',['../structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html#a270eee1bfbdde69c9e01d18ba8dddd99',1,'libm2k::CONTEXT_INFO']]], + ['id_5fvendor',['id_vendor',['../structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html#a44be1459f408772b18a4f5aa71ab0b06',1,'libm2k::CONTEXT_INFO']]], + ['iio_5fcontext_5fversion',['IIO_CONTEXT_VERSION',['../structlibm2k_1_1_i_i_o___c_o_n_t_e_x_t___v_e_r_s_i_o_n.html',1,'libm2k']]], + ['iscalibrated',['isCalibrated',['../group__m2k.html#gae3f420c00beec2ab0711cf5a1953b741',1,'libm2k::context::M2k']]], + ['ischannelenabled',['isChannelEnabled',['../group__analogin.html#ga40233af683d4d9beeb1d9da19147378d',1,'libm2k::analog::M2kAnalogIn::isChannelEnabled()'],['../group__analogout.html#ga373c0e1c7cf70dfc78321fc609628b5f',1,'libm2k::analog::M2kAnalogOut::isChannelEnabled()']]], + ['isclocksourceexternal',['isClocksourceExternal',['../group__digital.html#gaa554d34e9d06b9d5c938f09ecbf72d86',1,'libm2k::digital::M2kDigital']]], + ['ispushdone',['isPushDone',['../group__analogout.html#ga0141fc6a3c9c5a80d429bfca61c58d40',1,'libm2k::analog::M2kAnalogOut']]] +]; diff --git a/search/all_7.html b/search/all_7.html new file mode 100644 index 00000000..9cd0196e --- /dev/null +++ b/search/all_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 00000000..e7d60150 --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['level',['level',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#a709b29b2d835cc22d3c35b44318aa36d',1,'libm2k::SETTINGS']]], + ['logallattributes',['logAllAttributes',['../group__context.html#ga675e187a25122015d151158ed512bf54',1,'libm2k::context::Context']]] +]; diff --git a/search/all_8.html b/search/all_8.html new file mode 100644 index 00000000..1e8fb9ce --- /dev/null +++ b/search/all_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 00000000..61bd7c9a --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['m2k',['M2k',['../classlibm2k_1_1context_1_1_m2k.html',1,'libm2k::context::M2k'],['../group__m2k.html',1,'(Global Namespace)']]], + ['m2k_5fexception_5ftype',['M2K_EXCEPTION_TYPE',['../enums_8hpp.html#a362a55a68400ed434f48efc7a3f38a93',1,'libm2k']]], + ['m2k_5frange',['M2K_RANGE',['../analog_2enums_8hpp.html#a8a569cec5a2f3b684ab78194392e9222',1,'libm2k::analog']]], + ['m2k_5ftrigger_5fcondition_5fanalog',['M2K_TRIGGER_CONDITION_ANALOG',['../enums_8hpp.html#a6ef409f0fb157999c4050789d0690032',1,'libm2k']]], + ['m2k_5ftrigger_5fcondition_5fdigital',['M2K_TRIGGER_CONDITION_DIGITAL',['../enums_8hpp.html#abc95abd9458e853ccd452354802e06db',1,'libm2k']]], + ['m2k_5ftrigger_5fcondition_5fout',['M2K_TRIGGER_CONDITION_OUT',['../enums_8hpp.html#a61dba25a2697c15d5b56abce68bf2d0c',1,'libm2k']]], + ['m2k_5ftrigger_5fmode',['M2K_TRIGGER_MODE',['../enums_8hpp.html#aeba800e1095f3c2c0d58082c8e5d815b',1,'libm2k']]], + ['m2k_5ftrigger_5fout_5fselect',['M2K_TRIGGER_OUT_SELECT',['../enums_8hpp.html#a6d865c665a30ccfe7428dab41e8e4227',1,'libm2k']]], + ['m2k_5ftrigger_5fsource_5fanalog',['M2K_TRIGGER_SOURCE_ANALOG',['../enums_8hpp.html#af39a96895342e305493d2498bed1b7b1',1,'libm2k']]], + ['m2k_5ftrigger_5fsource_5fdigital',['M2K_TRIGGER_SOURCE_DIGITAL',['../enums_8hpp.html#a2db0c89ea96fa7f0048f5cc161fd6190',1,'libm2k']]], + ['m2k_5ftrigger_5fsource_5fout',['M2K_TRIGGER_SOURCE_OUT',['../enums_8hpp.html#aeb857721705f7bc8404c873af96a0b6a',1,'libm2k']]], + ['m2k_5ftrigger_5fstatus_5fanalog_5fout',['M2K_TRIGGER_STATUS_ANALOG_OUT',['../enums_8hpp.html#a83e0675c62a876011c17a80462bc147a',1,'libm2k']]], + ['m2kanalogin',['M2kAnalogIn',['../classlibm2k_1_1analog_1_1_m2k_analog_in.html',1,'libm2k::analog']]], + ['m2kanalogout',['M2kAnalogOut',['../classlibm2k_1_1analog_1_1_m2k_analog_out.html',1,'libm2k::analog']]], + ['m2kdigital',['M2kDigital',['../classlibm2k_1_1digital_1_1_m2k_digital.html',1,'libm2k::digital']]], + ['m2khardwaretrigger',['M2kHardwareTrigger',['../classlibm2k_1_1_m2k_hardware_trigger.html',1,'libm2k']]], + ['m2kopen',['m2kOpen',['../group__contextbuilder.html#ga65989a4f62dfb4de8ed54734fb0efe44',1,'libm2k::context::m2kOpen(const char *uri)'],['../group__contextbuilder.html#ga2a15ff31380d7f2a300a1c970045fe1d',1,'libm2k::context::m2kOpen(struct iio_context *ctx, const char *uri)'],['../group__contextbuilder.html#ga2e1b7047a65ef26bf215d16462bf1b70',1,'libm2k::context::m2kOpen()']]], + ['m2kpowersupply',['M2kPowerSupply',['../classlibm2k_1_1analog_1_1_m2k_power_supply.html',1,'libm2k::analog']]], + ['major',['major',['../structlibm2k_1_1_i_i_o___c_o_n_t_e_x_t___v_e_r_s_i_o_n.html#ad0a183761a8e2002d0469eb2e00c247e',1,'libm2k::IIO_CONTEXT_VERSION']]], + ['manufacturer',['manufacturer',['../structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html#a8ba2392bd7b98bbdafe5a5bf8aafc0db',1,'libm2k::CONTEXT_INFO']]], + ['minor',['minor',['../structlibm2k_1_1_i_i_o___c_o_n_t_e_x_t___v_e_r_s_i_o_n.html#a604896457d0b72863a412f85f487804f',1,'libm2k::IIO_CONTEXT_VERSION']]], + ['mode',['mode',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#a38572a642c3c7fde5c59036e2c1f8a13',1,'libm2k::SETTINGS']]] +]; diff --git a/search/all_9.html b/search/all_9.html new file mode 100644 index 00000000..27df366b --- /dev/null +++ b/search/all_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 00000000..33ca051f --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['name',['name',['../structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html#a5524cf46e59d64afe7efd7a8e68633a0',1,'libm2k::analog::DMM_READING']]], + ['no_5fsource',['NO_SOURCE',['../enums_8hpp.html#af39a96895342e305493d2498bed1b7b1a2ea77399649c898c132b89dc00632e31',1,'libm2k']]] +]; diff --git a/search/all_a.html b/search/all_a.html new file mode 100644 index 00000000..63f9254d --- /dev/null +++ b/search/all_a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 00000000..a5289a6e --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['powersupply',['PowerSupply',['../group__powersupply.html',1,'']]], + ['product',['product',['../structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html#a0e79c28e15b301c597978c79ec1865fd',1,'libm2k::CONTEXT_INFO']]], + ['push',['push',['../group__digital.html#ga4b46cea8636d88c3c3cc5e74f9a49d65',1,'libm2k::digital::M2kDigital::push(std::vector< unsigned short > const &data)=0'],['../group__digital.html#gafcf3af4f7a7723c0832c67db81d97028',1,'libm2k::digital::M2kDigital::push(unsigned short *data, unsigned int nb_samples)=0'],['../group__analogout.html#ga8323899b9f5ea25d9213612471d4c63b',1,'libm2k::analog::M2kAnalogOut::push(unsigned int chnIdx, std::vector< double > const &data)=0'],['../group__analogout.html#ga5fe26dfdb24af3beac4de93529410408',1,'libm2k::analog::M2kAnalogOut::push(std::vector< std::vector< double >> const &data)=0']]], + ['pushbytes',['pushBytes',['../group__analogout.html#ga4b5b04c46fbaea5417174cc1b840095d',1,'libm2k::analog::M2kAnalogOut']]], + ['pushchannel',['pushChannel',['../group__powersupply.html#ga7d548daa8f48139286cf2da4b9fbf465',1,'libm2k::analog::M2kPowerSupply']]], + ['pushinterleaved',['pushInterleaved',['../group__analogout.html#gad130d87c90f18e68174beb50bebea18d',1,'libm2k::analog::M2kAnalogOut']]], + ['pushraw',['pushRaw',['../group__analogout.html#ga9f8e633ba25848e84db9bedb9bef58da',1,'libm2k::analog::M2kAnalogOut::pushRaw(unsigned int chnIdx, std::vector< short > const &data)=0'],['../group__analogout.html#ga6a7e23ea9992a48e644fbdd461fe4c61',1,'libm2k::analog::M2kAnalogOut::pushRaw(std::vector< std::vector< short >> const &data)=0']]], + ['pushrawbytes',['pushRawBytes',['../group__analogout.html#ga7e5f65bb4a93b4a6a8281aef6f37245c',1,'libm2k::analog::M2kAnalogOut']]], + ['pushrawinterleaved',['pushRawInterleaved',['../group__analogout.html#ga0973fbe8f043a37d2e0da5828d018073',1,'libm2k::analog::M2kAnalogOut']]] +]; diff --git a/search/all_b.html b/search/all_b.html new file mode 100644 index 00000000..44ae3e47 --- /dev/null +++ b/search/all_b.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 00000000..4ee7d858 --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['raw_5flevel',['raw_level',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#a405b400ce3a7292a63f43665a84bb9f9',1,'libm2k::SETTINGS']]], + ['readall',['readAll',['../group__dmm.html#ga706c94ab32fa2438a7eccc8a41834d0d',1,'libm2k::analog::DMM']]], + ['readchannel',['readChannel',['../group__powersupply.html#ga3bec194fde326a186390308545a1f85a',1,'libm2k::analog::M2kPowerSupply::readChannel()'],['../group__dmm.html#ga4040f03306a938aef4381605540d6603',1,'libm2k::analog::DMM::readChannel(unsigned int index)=0'],['../group__dmm.html#ga1d09c72139b0603217f7be1f5165e287',1,'libm2k::analog::DMM::readChannel(std::string chn_name)=0']]], + ['reset',['reset',['../group__m2k.html#gae663719cfccee787c9ebc853b43379d4',1,'libm2k::context::M2k']]], + ['resetratemux',['resetRateMux',['../group__digital.html#gae3d0ebe7daa8e53a16f53a30c6e04bbd',1,'libm2k::digital::M2kDigital']]] +]; diff --git a/search/all_c.html b/search/all_c.html new file mode 100644 index 00000000..3de15867 --- /dev/null +++ b/search/all_c.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 00000000..fb4368a7 --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,64 @@ +var searchData= +[ + ['select_5fanalog_5fin',['SELECT_ANALOG_IN',['../enums_8hpp.html#a6d865c665a30ccfe7428dab41e8e4227aa3719f5acce1198307a342b91dd807b5',1,'libm2k']]], + ['select_5fdigital_5fin',['SELECT_DIGITAL_IN',['../enums_8hpp.html#a6d865c665a30ccfe7428dab41e8e4227aa324c7e894ff1d10f538ec8fd299de73',1,'libm2k']]], + ['select_5fnone',['SELECT_NONE',['../enums_8hpp.html#a6d865c665a30ccfe7428dab41e8e4227a458d45a1725c08ebb3cb6d9678cddfcd',1,'libm2k']]], + ['select_5ftrigger_5fin',['SELECT_TRIGGER_IN',['../enums_8hpp.html#a6d865c665a30ccfe7428dab41e8e4227af1ed01516eb506d2fd4e165b9495cc5d',1,'libm2k']]], + ['serial',['serial',['../structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html#adf5df9bdaf6be5214015449631fb8070',1,'libm2k::CONTEXT_INFO']]], + ['setadccalibrationgain',['setAdcCalibrationGain',['../group__m2k.html#gace628592e5c62549451c7ee23150a622',1,'libm2k::context::M2k']]], + ['setadccalibrationoffset',['setAdcCalibrationOffset',['../group__m2k.html#ga672f46288b87f4fb37a0058d12e2fe36',1,'libm2k::context::M2k']]], + ['setanalogcondition',['setAnalogCondition',['../group__m2ktrigger.html#ga426f47bfb3e87bb95bbb3f91e1589430',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogdelay',['setAnalogDelay',['../group__m2ktrigger.html#ga2768b5052cdffd3e3d999420e1a2b9eb',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogexternalcondition',['setAnalogExternalCondition',['../group__m2ktrigger.html#ga591bbf9a24f526b67c53cdf3dbee168d',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogexternaloutselect',['setAnalogExternalOutSelect',['../group__m2ktrigger.html#ga5f746c978e0c27733ea8b31046ced185',1,'libm2k::M2kHardwareTrigger']]], + ['setanaloghysteresis',['setAnalogHysteresis',['../group__m2ktrigger.html#ga3dc1539be4572fcec9b71d1b69490fe5',1,'libm2k::M2kHardwareTrigger']]], + ['setanaloglevel',['setAnalogLevel',['../group__m2ktrigger.html#ga517a345a918de79ad261a709e8103e4f',1,'libm2k::M2kHardwareTrigger']]], + ['setanaloglevelraw',['setAnalogLevelRaw',['../group__m2ktrigger.html#ga4333fc4a839f103f03b0e8ffb39c4353',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogmode',['setAnalogMode',['../group__m2ktrigger.html#ga862b0a98c01a9b0042a5a91e1bf53da2',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogouttriggercondition',['setAnalogOutTriggerCondition',['../group__m2ktrigger.html#gaf25a29ee637502b49de0eb02ab7d201e',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogouttriggersource',['setAnalogOutTriggerSource',['../group__m2ktrigger.html#ga4dba33324c3d38ae7f59f8cd83f0363d',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogouttriggerstatus',['setAnalogOutTriggerStatus',['../group__m2ktrigger.html#gadce2bad55dc3fd1625191cdc08fef94c',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogsource',['setAnalogSource',['../group__m2ktrigger.html#ga4f05c7a2e590ced820c502e3cac5b624',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogsourcechannel',['setAnalogSourceChannel',['../group__m2ktrigger.html#ga8b713e04398e7b854279b5284b3ed77b',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogstreamingflag',['setAnalogStreamingFlag',['../group__m2ktrigger.html#gaa8ca8530d9994e75fbd86a9dddf543ec',1,'libm2k::M2kHardwareTrigger']]], + ['setbufferrearmontrigger',['setBufferRearmOnTrigger',['../group__analogout.html#ga9f847f25ad78a6b0b5f007bbd30af479',1,'libm2k::analog::M2kAnalogOut']]], + ['setcyclic',['setCyclic',['../group__digital.html#ga7a3eed27a67559a0bee079bb90e7ebf9',1,'libm2k::digital::M2kDigital::setCyclic()'],['../group__analogout.html#ga65ac70a9f0efd26bc46f01a8c6e7f371',1,'libm2k::analog::M2kAnalogOut::setCyclic(bool en)=0'],['../group__analogout.html#ga8fabc8b94b3874d6aff5a573fa4de5d5',1,'libm2k::analog::M2kAnalogOut::setCyclic(unsigned int chn, bool en)=0']]], + ['setdaccalibrationgain',['setDacCalibrationGain',['../group__m2k.html#ga2b0190a4298e37df1a202e09579c4e2e',1,'libm2k::context::M2k']]], + ['setdaccalibrationoffset',['setDacCalibrationOffset',['../group__m2k.html#ga1b1a58b9ba3200a17294eebecb4af0b9',1,'libm2k::context::M2k']]], + ['setdigitalcondition',['setDigitalCondition',['../group__m2ktrigger.html#gaec81a5c25b965dad039c227dcffe76a9',1,'libm2k::M2kHardwareTrigger::setDigitalCondition(unsigned int chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond)=0'],['../group__m2ktrigger.html#gaecad12bf34f18a4328042669dbaa17de',1,'libm2k::M2kHardwareTrigger::setDigitalCondition(libm2k::digital::DIO_CHANNEL chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond)=0']]], + ['setdigitaldelay',['setDigitalDelay',['../group__m2ktrigger.html#gae38474134e906466c653e0c5527bd3ae',1,'libm2k::M2kHardwareTrigger']]], + ['setdigitalexternalcondition',['setDigitalExternalCondition',['../group__m2ktrigger.html#ga82d65ac6d8843642ddd43991eecb35f6',1,'libm2k::M2kHardwareTrigger']]], + ['setdigitalmode',['setDigitalMode',['../group__m2ktrigger.html#ga706cca78b69ac775820ba8352040c573',1,'libm2k::M2kHardwareTrigger']]], + ['setdigitalsource',['setDigitalSource',['../group__m2ktrigger.html#ga77bbf71b3749a65b237061e5a04ad74c',1,'libm2k::M2kHardwareTrigger']]], + ['setdigitalstreamingflag',['setDigitalStreamingFlag',['../group__m2ktrigger.html#gaa349d3ea521c059c2a2812bcfe72db15',1,'libm2k::M2kHardwareTrigger']]], + ['setdirection',['setDirection',['../group__digital.html#ga8a8c8b62cd3d0d1d31ea03b8f53c8cc6',1,'libm2k::digital::M2kDigital::setDirection(unsigned short mask)=0'],['../group__digital.html#gaa47937847a67ad9157715fda43d9eca8',1,'libm2k::digital::M2kDigital::setDirection(unsigned int index, DIO_DIRECTION dir)=0'],['../group__digital.html#ga485feb70d26f0c70cd27400b35a17435',1,'libm2k::digital::M2kDigital::setDirection(unsigned int index, bool dir)=0'],['../group__digital.html#ga26efff4c4a48be84f2a4276611594ced',1,'libm2k::digital::M2kDigital::setDirection(DIO_CHANNEL index, bool dir)=0'],['../group__digital.html#ga1e31a402bf9e7170423e4e3f85c62ba4',1,'libm2k::digital::M2kDigital::setDirection(DIO_CHANNEL index, DIO_DIRECTION dir)=0']]], + ['setexternalclocksource',['setExternalClocksource',['../group__digital.html#gaff89e8e0fa8f7daf882b5926a5dcdf46',1,'libm2k::digital::M2kDigital']]], + ['setkernelbufferscount',['setKernelBuffersCount',['../group__analogin.html#ga252ebaf469a261b4f765cdde703cf274',1,'libm2k::analog::M2kAnalogIn::setKernelBuffersCount()'],['../group__analogout.html#ga054b4fc523c5b5fdf5f39f5b14ae94e7',1,'libm2k::analog::M2kAnalogOut::setKernelBuffersCount()']]], + ['setkernelbufferscountin',['setKernelBuffersCountIn',['../group__digital.html#gac3232a5fa0a0de00cc35d958e737ef34',1,'libm2k::digital::M2kDigital']]], + ['setkernelbufferscountout',['setKernelBuffersCountOut',['../group__digital.html#ga7d5ef2a8ee20d8ab3398338581320ac6',1,'libm2k::digital::M2kDigital']]], + ['setled',['setLed',['../group__m2k.html#ga7c660f05b5657b2bc46586eced3e9a58',1,'libm2k::context::M2k']]], + ['setoutputmode',['setOutputMode',['../group__digital.html#gadcff8a29282f1c2d1bf09a4146fa2e3d',1,'libm2k::digital::M2kDigital::setOutputMode(DIO_CHANNEL chn, DIO_MODE mode)=0'],['../group__digital.html#ga7f593428a7ccd3987f60864134fc4fb1',1,'libm2k::digital::M2kDigital::setOutputMode(unsigned int chn, DIO_MODE mode)=0']]], + ['setoversamplingratio',['setOversamplingRatio',['../group__analogin.html#gaf40f606df2772e654351a18ee2d62a99',1,'libm2k::analog::M2kAnalogIn::setOversamplingRatio(int oversampling)=0'],['../group__analogin.html#ga14c46dc50b7471c98a259dc2e53a750d',1,'libm2k::analog::M2kAnalogIn::setOversamplingRatio(unsigned int chn_idx, int oversampling)=0'],['../group__analogout.html#gabe34faa439ccf011673c5f1ddcc387e7',1,'libm2k::analog::M2kAnalogOut::setOversamplingRatio(std::vector< int > oversampling_ratio)=0'],['../group__analogout.html#ga2b50d86fc115feb46fdfe43ca2a1cb3b',1,'libm2k::analog::M2kAnalogOut::setOversamplingRatio(unsigned int chn, int oversampling_ratio)=0']]], + ['setrange',['setRange',['../group__analogin.html#gae81ff0a3106874cae2c4ebca7ed0d482',1,'libm2k::analog::M2kAnalogIn::setRange(ANALOG_IN_CHANNEL channel, M2K_RANGE range)=0'],['../group__analogin.html#ga9ca99010677ffb931d99248cb08bd1aa',1,'libm2k::analog::M2kAnalogIn::setRange(ANALOG_IN_CHANNEL channel, double min, double max)=0']]], + ['setratemux',['setRateMux',['../group__digital.html#ga412324220d5f07c20bc17e571cff5837',1,'libm2k::digital::M2kDigital']]], + ['setsamplerate',['setSampleRate',['../group__analogin.html#ga0c70f6e240849d26949ec753b0c97a0b',1,'libm2k::analog::M2kAnalogIn::setSampleRate()'],['../group__analogout.html#gab34bd111c55ed24ee4d49e26311794c4',1,'libm2k::analog::M2kAnalogOut::setSampleRate(std::vector< double > samplerates)=0'],['../group__analogout.html#ga84ce57f056e85fe9d58067fb8ceca21f',1,'libm2k::analog::M2kAnalogOut::setSampleRate(unsigned int chn, double samplerate)=0']]], + ['setsampleratein',['setSampleRateIn',['../group__digital.html#ga967d502aebe2cbd7ff5c3f9a1888c5ab',1,'libm2k::digital::M2kDigital']]], + ['setsamplerateout',['setSampleRateOut',['../group__digital.html#gad412f0742a9d5679050ffab2976f1f3d',1,'libm2k::digital::M2kDigital']]], + ['settimeout',['setTimeout',['../group__context.html#ga5369f9c730f5d6a37b21b13adf01abef',1,'libm2k::context::Context']]], + ['settings',['SETTINGS',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html',1,'libm2k']]], + ['setvalueraw',['setValueRaw',['../group__digital.html#ga5ae5c737e7f3c1281d2e242f2f600263',1,'libm2k::digital::M2kDigital::setValueRaw(DIO_CHANNEL index, DIO_LEVEL level)=0'],['../group__digital.html#ga9d6f40df3dbbfb16b72aae7e2b57bfc9',1,'libm2k::digital::M2kDigital::setValueRaw(unsigned int index, DIO_LEVEL level)=0'],['../group__digital.html#gabee14cf7edcabb1cd34474e99a86c102',1,'libm2k::digital::M2kDigital::setValueRaw(DIO_CHANNEL index, bool level)=0']]], + ['setverticaloffset',['setVerticalOffset',['../group__analogin.html#ga60891c201dbd0238e49139fd6199386e',1,'libm2k::analog::M2kAnalogIn']]], + ['setvoltage',['setVoltage',['../group__analogout.html#gafe266e2ff3c51fcc6878e7e487e2b010',1,'libm2k::analog::M2kAnalogOut']]], + ['setvoltageraw',['setVoltageRaw',['../group__analogout.html#gab436c577c151a246305a83f73953f124',1,'libm2k::analog::M2kAnalogOut']]], + ['src_5fanalog_5fin',['SRC_ANALOG_IN',['../enums_8hpp.html#a2db0c89ea96fa7f0048f5cc161fd6190af12944482583c6a4c5597f32b2c943c1',1,'libm2k']]], + ['src_5fdigital_5fin',['SRC_DIGITAL_IN',['../enums_8hpp.html#af39a96895342e305493d2498bed1b7b1a08f0cbfaa9d514dbd43d26c80eac3b5d',1,'libm2k']]], + ['src_5fdisabled',['SRC_DISABLED',['../enums_8hpp.html#a2db0c89ea96fa7f0048f5cc161fd6190ab63e8e621b9a89355f0ed4aa892ee573',1,'libm2k']]], + ['src_5fnone',['SRC_NONE',['../enums_8hpp.html#a2db0c89ea96fa7f0048f5cc161fd6190aa0e9df57f1f5956817ac0bb767c89e7d',1,'libm2k']]], + ['src_5ftrigger_5fin',['SRC_TRIGGER_IN',['../enums_8hpp.html#a2db0c89ea96fa7f0048f5cc161fd6190ac5c6bb92e8efb075be4261d53f8ce565',1,'libm2k']]], + ['startacquisition',['startAcquisition',['../group__digital.html#ga564049f0f0b53f1ab607fa8b4d871107',1,'libm2k::digital::M2kDigital::startAcquisition()'],['../group__analogin.html#ga7dab519b883bb7e4aa1543fd48c20c51',1,'libm2k::analog::M2kAnalogIn::startAcquisition()']]], + ['startmixedsignalacquisition',['startMixedSignalAcquisition',['../group__m2k.html#gaa8307fc93420ffb9b26aef9a5a0c053a',1,'libm2k::context::M2k']]], + ['stop',['stop',['../group__analogout.html#ga8fb08074cdda7f6fb407a2dfc0193efb',1,'libm2k::analog::M2kAnalogOut::stop()=0'],['../group__analogout.html#ga0087d48359470e8d7f0aaffe42b485e1',1,'libm2k::analog::M2kAnalogOut::stop(unsigned int chn)=0']]], + ['stopacquisition',['stopAcquisition',['../group__digital.html#ga95fa7d1d53f4eae3544378a30eaa0034',1,'libm2k::digital::M2kDigital::stopAcquisition()'],['../group__analogin.html#ga2f2aa24bf39fd0c1d6d32e1106e59799',1,'libm2k::analog::M2kAnalogIn::stopAcquisition()']]], + ['stopbufferout',['stopBufferOut',['../group__digital.html#gab538cf207b486ccda152d5aa2bf17e31',1,'libm2k::digital::M2kDigital']]], + ['stopmixedsignalacquisition',['stopMixedSignalAcquisition',['../group__m2k.html#gab4bb343d34897a8ebf3a8597a1703e90',1,'libm2k::context::M2k']]] +]; diff --git a/search/all_d.html b/search/all_d.html new file mode 100644 index 00000000..a2d5bd7e --- /dev/null +++ b/search/all_d.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 00000000..3fc80c86 --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['togeneric',['toGeneric',['../group__context.html#ga79ddd3a3dc41a6de6d73f32ee854c13a',1,'libm2k::context::Context']]], + ['tom2k',['toM2k',['../group__context.html#gaf52f55ba6c313dc35a7ef24526887dce',1,'libm2k::context::Context']]], + ['trigger_5fsource',['trigger_source',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#a3df2c31140c22a1fb470f1c9bea77307',1,'libm2k::SETTINGS']]] +]; diff --git a/search/all_e.html b/search/all_e.html new file mode 100644 index 00000000..f9a056dc --- /dev/null +++ b/search/all_e.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 00000000..003d8277 --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['unit_5fname',['unit_name',['../structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html#a41c14c12286a89476706c01197ea5d10',1,'libm2k::analog::DMM_READING']]], + ['unit_5fsymbol',['unit_symbol',['../structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html#acaddf76f97ab31812a08e952d7e746a3',1,'libm2k::analog::DMM_READING']]], + ['uri',['uri',['../structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html#a935ba950dcccf9ce28dceca872163aad',1,'libm2k::CONTEXT_INFO']]] +]; diff --git a/search/all_f.html b/search/all_f.html new file mode 100644 index 00000000..f6997fa5 --- /dev/null +++ b/search/all_f.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 00000000..9b799ede --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['value',['value',['../structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html#ae304e2cedc38b278cec223a66e8144f9',1,'libm2k::analog::DMM_READING']]] +]; diff --git a/search/classes_0.html b/search/classes_0.html new file mode 100644 index 00000000..b3c6ec6a --- /dev/null +++ b/search/classes_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 00000000..b5da6df5 --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['calibration_5fparameters',['CALIBRATION_PARAMETERS',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html',1,'libm2k']]], + ['context',['Context',['../classlibm2k_1_1context_1_1_context.html',1,'libm2k::context']]], + ['context_5finfo',['CONTEXT_INFO',['../structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html',1,'libm2k']]] +]; diff --git a/search/classes_1.html b/search/classes_1.html new file mode 100644 index 00000000..b744c4d1 --- /dev/null +++ b/search/classes_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 00000000..de3d87b2 --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dmm',['DMM',['../classlibm2k_1_1analog_1_1_d_m_m.html',1,'libm2k::analog']]], + ['dmm_5freading',['DMM_READING',['../structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html',1,'libm2k::analog']]] +]; diff --git a/search/classes_2.html b/search/classes_2.html new file mode 100644 index 00000000..7878acb4 --- /dev/null +++ b/search/classes_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 00000000..37603fff --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['iio_5fcontext_5fversion',['IIO_CONTEXT_VERSION',['../structlibm2k_1_1_i_i_o___c_o_n_t_e_x_t___v_e_r_s_i_o_n.html',1,'libm2k']]] +]; diff --git a/search/classes_3.html b/search/classes_3.html new file mode 100644 index 00000000..c231d86f --- /dev/null +++ b/search/classes_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 00000000..381ae61a --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['m2k',['M2k',['../classlibm2k_1_1context_1_1_m2k.html',1,'libm2k::context']]], + ['m2kanalogin',['M2kAnalogIn',['../classlibm2k_1_1analog_1_1_m2k_analog_in.html',1,'libm2k::analog']]], + ['m2kanalogout',['M2kAnalogOut',['../classlibm2k_1_1analog_1_1_m2k_analog_out.html',1,'libm2k::analog']]], + ['m2kdigital',['M2kDigital',['../classlibm2k_1_1digital_1_1_m2k_digital.html',1,'libm2k::digital']]], + ['m2khardwaretrigger',['M2kHardwareTrigger',['../classlibm2k_1_1_m2k_hardware_trigger.html',1,'libm2k']]], + ['m2kpowersupply',['M2kPowerSupply',['../classlibm2k_1_1analog_1_1_m2k_power_supply.html',1,'libm2k::analog']]] +]; diff --git a/search/classes_4.html b/search/classes_4.html new file mode 100644 index 00000000..86dd4384 --- /dev/null +++ b/search/classes_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_4.js b/search/classes_4.js new file mode 100644 index 00000000..215b3b58 --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['settings',['SETTINGS',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html',1,'libm2k']]] +]; diff --git a/search/close.png b/search/close.png new file mode 100644 index 00000000..9342d3df Binary files /dev/null and b/search/close.png differ diff --git a/search/enums_0.html b/search/enums_0.html new file mode 100644 index 00000000..7040a9c5 --- /dev/null +++ b/search/enums_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_0.js b/search/enums_0.js new file mode 100644 index 00000000..7bf19686 --- /dev/null +++ b/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['analog_5fin_5fchannel',['ANALOG_IN_CHANNEL',['../analog_2enums_8hpp.html#ae0ecde90087a71dca08ad7adcccb0bca',1,'libm2k::analog']]] +]; diff --git a/search/enums_1.html b/search/enums_1.html new file mode 100644 index 00000000..0c65c0e0 --- /dev/null +++ b/search/enums_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_1.js b/search/enums_1.js new file mode 100644 index 00000000..c899f9e4 --- /dev/null +++ b/search/enums_1.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['dio_5fchannel',['DIO_CHANNEL',['../digital_2enums_8hpp.html#a8ea91960822cd9737419b2778b503fa1',1,'libm2k::digital']]], + ['dio_5fdirection',['DIO_DIRECTION',['../digital_2enums_8hpp.html#ae5f7fe3a979c81e0b818a3717617340c',1,'libm2k::digital']]], + ['dio_5flevel',['DIO_LEVEL',['../digital_2enums_8hpp.html#a291d34c3a24337250152984979becc9f',1,'libm2k::digital']]], + ['dio_5fmode',['DIO_MODE',['../digital_2enums_8hpp.html#a1b5480a99a6e04cedbb86a964f03e08f',1,'libm2k::digital']]], + ['dio_5ftrigger_5fmode',['DIO_TRIGGER_MODE',['../digital_2enums_8hpp.html#aef7966160e8247e2eab1ace19487aeb4',1,'libm2k::digital']]] +]; diff --git a/search/enums_2.html b/search/enums_2.html new file mode 100644 index 00000000..4250446d --- /dev/null +++ b/search/enums_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_2.js b/search/enums_2.js new file mode 100644 index 00000000..9fd18e32 --- /dev/null +++ b/search/enums_2.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['m2k_5fexception_5ftype',['M2K_EXCEPTION_TYPE',['../enums_8hpp.html#a362a55a68400ed434f48efc7a3f38a93',1,'libm2k']]], + ['m2k_5frange',['M2K_RANGE',['../analog_2enums_8hpp.html#a8a569cec5a2f3b684ab78194392e9222',1,'libm2k::analog']]], + ['m2k_5ftrigger_5fcondition_5fanalog',['M2K_TRIGGER_CONDITION_ANALOG',['../enums_8hpp.html#a6ef409f0fb157999c4050789d0690032',1,'libm2k']]], + ['m2k_5ftrigger_5fcondition_5fdigital',['M2K_TRIGGER_CONDITION_DIGITAL',['../enums_8hpp.html#abc95abd9458e853ccd452354802e06db',1,'libm2k']]], + ['m2k_5ftrigger_5fcondition_5fout',['M2K_TRIGGER_CONDITION_OUT',['../enums_8hpp.html#a61dba25a2697c15d5b56abce68bf2d0c',1,'libm2k']]], + ['m2k_5ftrigger_5fmode',['M2K_TRIGGER_MODE',['../enums_8hpp.html#aeba800e1095f3c2c0d58082c8e5d815b',1,'libm2k']]], + ['m2k_5ftrigger_5fout_5fselect',['M2K_TRIGGER_OUT_SELECT',['../enums_8hpp.html#a6d865c665a30ccfe7428dab41e8e4227',1,'libm2k']]], + ['m2k_5ftrigger_5fsource_5fanalog',['M2K_TRIGGER_SOURCE_ANALOG',['../enums_8hpp.html#af39a96895342e305493d2498bed1b7b1',1,'libm2k']]], + ['m2k_5ftrigger_5fsource_5fdigital',['M2K_TRIGGER_SOURCE_DIGITAL',['../enums_8hpp.html#a2db0c89ea96fa7f0048f5cc161fd6190',1,'libm2k']]], + ['m2k_5ftrigger_5fsource_5fout',['M2K_TRIGGER_SOURCE_OUT',['../enums_8hpp.html#aeb857721705f7bc8404c873af96a0b6a',1,'libm2k']]], + ['m2k_5ftrigger_5fstatus_5fanalog_5fout',['M2K_TRIGGER_STATUS_ANALOG_OUT',['../enums_8hpp.html#a83e0675c62a876011c17a80462bc147a',1,'libm2k']]] +]; diff --git a/search/enumvalues_0.html b/search/enumvalues_0.html new file mode 100644 index 00000000..78895c79 --- /dev/null +++ b/search/enumvalues_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_0.js b/search/enumvalues_0.js new file mode 100644 index 00000000..30c4a8d9 --- /dev/null +++ b/search/enumvalues_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['always',['ALWAYS',['../enums_8hpp.html#aeba800e1095f3c2c0d58082c8e5d815ba5d598505a7cac3f0ef018435600cdfdc',1,'libm2k']]], + ['analog',['ANALOG',['../enums_8hpp.html#aeba800e1095f3c2c0d58082c8e5d815ba443730a5af20af63ab58ad9e39eb9a3d',1,'libm2k']]] +]; diff --git a/search/enumvalues_1.html b/search/enumvalues_1.html new file mode 100644 index 00000000..9b02a4b3 --- /dev/null +++ b/search/enumvalues_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_1.js b/search/enumvalues_1.js new file mode 100644 index 00000000..6b7b3779 --- /dev/null +++ b/search/enumvalues_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['channel_5f1',['CHANNEL_1',['../enums_8hpp.html#af39a96895342e305493d2498bed1b7b1a45b70a9415d84742f069301e97ad07a5',1,'libm2k']]], + ['channel_5f2',['CHANNEL_2',['../enums_8hpp.html#af39a96895342e305493d2498bed1b7b1a4017e84bc4b3115617ce1cf99bc2156d',1,'libm2k']]] +]; diff --git a/search/enumvalues_2.html b/search/enumvalues_2.html new file mode 100644 index 00000000..2482854d --- /dev/null +++ b/search/enumvalues_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_2.js b/search/enumvalues_2.js new file mode 100644 index 00000000..f0378b4c --- /dev/null +++ b/search/enumvalues_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['external',['EXTERNAL',['../enums_8hpp.html#aeba800e1095f3c2c0d58082c8e5d815ba1c3f9d5c79a69dc511891b85a8f0f5a0',1,'libm2k']]] +]; diff --git a/search/enumvalues_3.html b/search/enumvalues_3.html new file mode 100644 index 00000000..e6124b94 --- /dev/null +++ b/search/enumvalues_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_3.js b/search/enumvalues_3.js new file mode 100644 index 00000000..db29610a --- /dev/null +++ b/search/enumvalues_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['no_5fsource',['NO_SOURCE',['../enums_8hpp.html#af39a96895342e305493d2498bed1b7b1a2ea77399649c898c132b89dc00632e31',1,'libm2k']]] +]; diff --git a/search/enumvalues_4.html b/search/enumvalues_4.html new file mode 100644 index 00000000..8d234cfc --- /dev/null +++ b/search/enumvalues_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_4.js b/search/enumvalues_4.js new file mode 100644 index 00000000..fa78452b --- /dev/null +++ b/search/enumvalues_4.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['select_5fanalog_5fin',['SELECT_ANALOG_IN',['../enums_8hpp.html#a6d865c665a30ccfe7428dab41e8e4227aa3719f5acce1198307a342b91dd807b5',1,'libm2k']]], + ['select_5fdigital_5fin',['SELECT_DIGITAL_IN',['../enums_8hpp.html#a6d865c665a30ccfe7428dab41e8e4227aa324c7e894ff1d10f538ec8fd299de73',1,'libm2k']]], + ['select_5fnone',['SELECT_NONE',['../enums_8hpp.html#a6d865c665a30ccfe7428dab41e8e4227a458d45a1725c08ebb3cb6d9678cddfcd',1,'libm2k']]], + ['select_5ftrigger_5fin',['SELECT_TRIGGER_IN',['../enums_8hpp.html#a6d865c665a30ccfe7428dab41e8e4227af1ed01516eb506d2fd4e165b9495cc5d',1,'libm2k']]], + ['src_5fanalog_5fin',['SRC_ANALOG_IN',['../enums_8hpp.html#a2db0c89ea96fa7f0048f5cc161fd6190af12944482583c6a4c5597f32b2c943c1',1,'libm2k']]], + ['src_5fdigital_5fin',['SRC_DIGITAL_IN',['../enums_8hpp.html#af39a96895342e305493d2498bed1b7b1a08f0cbfaa9d514dbd43d26c80eac3b5d',1,'libm2k']]], + ['src_5fdisabled',['SRC_DISABLED',['../enums_8hpp.html#a2db0c89ea96fa7f0048f5cc161fd6190ab63e8e621b9a89355f0ed4aa892ee573',1,'libm2k']]], + ['src_5fnone',['SRC_NONE',['../enums_8hpp.html#a2db0c89ea96fa7f0048f5cc161fd6190aa0e9df57f1f5956817ac0bb767c89e7d',1,'libm2k']]], + ['src_5ftrigger_5fin',['SRC_TRIGGER_IN',['../enums_8hpp.html#a2db0c89ea96fa7f0048f5cc161fd6190ac5c6bb92e8efb075be4261d53f8ce565',1,'libm2k']]] +]; diff --git a/search/files_0.html b/search/files_0.html new file mode 100644 index 00000000..40cd4554 --- /dev/null +++ b/search/files_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_0.js b/search/files_0.js new file mode 100644 index 00000000..088217a4 --- /dev/null +++ b/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['enums_2ehpp',['enums.hpp',['../analog_2enums_8hpp.html',1,'']]] +]; diff --git a/search/files_1.html b/search/files_1.html new file mode 100644 index 00000000..646d1f4c --- /dev/null +++ b/search/files_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_1.js b/search/files_1.js new file mode 100644 index 00000000..f8f7748d --- /dev/null +++ b/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['enums_2ehpp',['enums.hpp',['../digital_2enums_8hpp.html',1,'']]] +]; diff --git a/search/files_2.html b/search/files_2.html new file mode 100644 index 00000000..9e47a77a --- /dev/null +++ b/search/files_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/files_2.js b/search/files_2.js new file mode 100644 index 00000000..9cf5604d --- /dev/null +++ b/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['enums_2ehpp',['enums.hpp',['../enums_8hpp.html',1,'']]] +]; diff --git a/search/functions_0.html b/search/functions_0.html new file mode 100644 index 00000000..bc73761f --- /dev/null +++ b/search/functions_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 00000000..08ef65ba --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['anychannelenabled',['anyChannelEnabled',['../group__digital.html#ga0c24d8f0fc23a2a70abbc5010073794c',1,'libm2k::digital::M2kDigital::anyChannelEnabled()'],['../group__powersupply.html#gab4ac3b677fe0a9ebd16945d6339423bf',1,'libm2k::analog::M2kPowerSupply::anyChannelEnabled()']]] +]; diff --git a/search/functions_1.html b/search/functions_1.html new file mode 100644 index 00000000..bfcf880b --- /dev/null +++ b/search/functions_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 00000000..13de6733 --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['calibrateadc',['calibrateADC',['../group__m2k.html#ga62771d2a4a349770065aa051888d9904',1,'libm2k::context::M2k']]], + ['calibratedac',['calibrateDAC',['../group__m2k.html#ga034a9364b1dd9f850c61249b7290735a',1,'libm2k::context::M2k']]], + ['calibratefromcontext',['calibrateFromContext',['../group__m2k.html#gac3480c51540ba917125abed6a0c9b840',1,'libm2k::context::M2k']]], + ['cancelacquisition',['cancelAcquisition',['../group__digital.html#ga0bd264618c41ac9b220de52077767b9f',1,'libm2k::digital::M2kDigital::cancelAcquisition()'],['../group__analogin.html#ga84eeb91d0426a1b08fa0bc1dec6224eb',1,'libm2k::analog::M2kAnalogIn::cancelAcquisition()']]], + ['cancelbuffer',['cancelBuffer',['../group__analogout.html#gab3e08834b2c91d62f3c6f8773e8a496f',1,'libm2k::analog::M2kAnalogOut::cancelBuffer()=0'],['../group__analogout.html#ga3898d232a908a35e3ead630fcb367ad6',1,'libm2k::analog::M2kAnalogOut::cancelBuffer(unsigned int chn)=0']]], + ['cancelbufferout',['cancelBufferOut',['../group__digital.html#ga5fc713220b8b09756d9335191a4eb42e',1,'libm2k::digital::M2kDigital']]], + ['contextclose',['contextClose',['../group__contextbuilder.html#ga6e5e40d0e87d47f8ca103f5a0565eea8',1,'libm2k::context']]], + ['contextcloseall',['contextCloseAll',['../group__contextbuilder.html#gadd914c2413159b35b5233d9d0677acc1',1,'libm2k::context']]], + ['convertrawtovolts',['convertRawToVolts',['../group__analogin.html#ga237e94f6d8c7fc222bdd398ce8b8dd42',1,'libm2k::analog::M2kAnalogIn::convertRawToVolts()'],['../group__analogout.html#gada83f295802844a9d5ec5c30fc503566',1,'libm2k::analog::M2kAnalogOut::convertRawToVolts()']]], + ['convertvoltstoraw',['convertVoltsToRaw',['../group__analogin.html#gaba8667ff41c635f3328e437bf068b9a6',1,'libm2k::analog::M2kAnalogIn::convertVoltsToRaw()'],['../group__analogout.html#gab5b23c10178362b1bc09e0a422c20b63',1,'libm2k::analog::M2kAnalogOut::convertVoltsToRaw()']]] +]; diff --git a/search/functions_2.html b/search/functions_2.html new file mode 100644 index 00000000..2b44474e --- /dev/null +++ b/search/functions_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 00000000..1863e31c --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['enableall',['enableAll',['../group__powersupply.html#ga00e30f4bec136da44b6f362ed192e3df',1,'libm2k::analog::M2kPowerSupply']]], + ['enableallout',['enableAllOut',['../group__digital.html#gadf8c692ae70ed0b63070ef629f0ac90d',1,'libm2k::digital::M2kDigital']]], + ['enablechannel',['enableChannel',['../group__digital.html#ga43566daefbf55586beb4b29bea00999e',1,'libm2k::digital::M2kDigital::enableChannel(unsigned int index, bool enable)=0'],['../group__digital.html#gaef6c1643fccde5e4ca5f6432936317d7',1,'libm2k::digital::M2kDigital::enableChannel(DIO_CHANNEL index, bool enable)=0'],['../group__analogin.html#ga5c5fe8e4445da890743226e3a5421222',1,'libm2k::analog::M2kAnalogIn::enableChannel()'],['../group__analogout.html#ga0293cf93f394c192f493d38d1a6f1f84',1,'libm2k::analog::M2kAnalogOut::enableChannel()'],['../group__powersupply.html#gaa41fba46e350018b34608f9371dc1d37',1,'libm2k::analog::M2kPowerSupply::enableChannel()']]], + ['enablelogging',['enableLogging',['../group__contextbuilder.html#ga45fdaa012ef8e63316f714f2f0aca4aa',1,'libm2k::context']]] +]; diff --git a/search/functions_3.html b/search/functions_3.html new file mode 100644 index 00000000..3dca3671 --- /dev/null +++ b/search/functions_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 00000000..52c9e220 --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,87 @@ +var searchData= +[ + ['getadccalibrationgain',['getAdcCalibrationGain',['../group__m2k.html#ga46599fe80b26ea415853f591abbf5da1',1,'libm2k::context::M2k']]], + ['getadccalibrationoffset',['getAdcCalibrationOffset',['../group__m2k.html#gac0e6fae8217270647c13da9b9b7f5314',1,'libm2k::context::M2k']]], + ['getallchannels',['getAllChannels',['../group__dmm.html#ga95bcf8878bf9dd59cbe38af83d4f4bc3',1,'libm2k::analog::DMM']]], + ['getallcontexts',['getAllContexts',['../group__contextbuilder.html#ga3579a7ce2c2bc8fbce914e48e85fc0ab',1,'libm2k::context']]], + ['getalldevices',['getAllDevices',['../group__context.html#ga07eb8023bee022c2ab0c65d1ced45274',1,'libm2k::context::Context']]], + ['getalldmm',['getAllDmm',['../group__context.html#gab5bc65de8fccef464039ad551f5a0d35',1,'libm2k::context::Context']]], + ['getanalogcondition',['getAnalogCondition',['../group__m2ktrigger.html#ga36281a1e8211ec72a4417cd09b56af0a',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogdelay',['getAnalogDelay',['../group__m2ktrigger.html#ga02eb920c7e5478bbe202d86c4b8d99c3',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogexternalcondition',['getAnalogExternalCondition',['../group__m2ktrigger.html#ga03b5ffc638d088b97ef767d437ed2f27',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogexternaloutselect',['getAnalogExternalOutSelect',['../group__m2ktrigger.html#gab5a4b58b5c02bb43ca9998880fccb1bb',1,'libm2k::M2kHardwareTrigger']]], + ['getanaloghysteresis',['getAnalogHysteresis',['../group__m2ktrigger.html#ga2919b1e7f0d31c773b212e54278d5cb9',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogin',['getAnalogIn',['../group__m2k.html#gad6256503ed771144856e05348a3dd4ae',1,'libm2k::context::M2k::getAnalogIn()=0'],['../group__m2k.html#ga4d569ea44d4d87d82626aee520183fa4',1,'libm2k::context::M2k::getAnalogIn(std::string dev_name)=0']]], + ['getanaloglevel',['getAnalogLevel',['../group__m2ktrigger.html#ga515f0c2c6e68ebe8fca6bf5e27351ebe',1,'libm2k::M2kHardwareTrigger']]], + ['getanaloglevelraw',['getAnalogLevelRaw',['../group__m2ktrigger.html#gae69e66414e4d8269dbc17411c88d924c',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogmode',['getAnalogMode',['../group__m2ktrigger.html#ga77edc0fc081e5eeb13b9d289fd4acf7b',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogout',['getAnalogOut',['../group__m2k.html#ga4f28af9ff01de2a70a5d0ea6afc0bf16',1,'libm2k::context::M2k']]], + ['getanalogouttriggercondition',['getAnalogOutTriggerCondition',['../group__m2ktrigger.html#ga139346ebd4fee43e52d4cdf9dbefb51e',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogouttriggersource',['getAnalogOutTriggerSource',['../group__m2ktrigger.html#ga5c308d49f86d61a7889882d790b4398d',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogouttriggerstatus',['getAnalogOutTriggerStatus',['../group__m2ktrigger.html#gaf06595a477e2c0c62855c6a60a649ae2',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogsource',['getAnalogSource',['../group__m2ktrigger.html#ga7f1d86bfe819d34eb5ca76c92192c93c',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogsourcechannel',['getAnalogSourceChannel',['../group__m2ktrigger.html#ga129b2bc52e91856f3bdc7ade8c6981fc',1,'libm2k::M2kHardwareTrigger']]], + ['getanalogstreamingflag',['getAnalogStreamingFlag',['../group__m2ktrigger.html#gacd3fa5a8f5d08ade52cc982c37b9b8ea',1,'libm2k::M2kHardwareTrigger']]], + ['getavailablecontextattributes',['getAvailableContextAttributes',['../group__context.html#ga8ebdea3a5684bc549ae9dd223183d8c0',1,'libm2k::context::Context']]], + ['getavailableranges',['getAvailableRanges',['../group__analogin.html#gac0945512459e6672fa782c2a34585c59',1,'libm2k::analog::M2kAnalogIn']]], + ['getavailablesamplerates',['getAvailableSampleRates',['../group__analogin.html#ga74d075460fbce07f0855a7a01e20312a',1,'libm2k::analog::M2kAnalogIn::getAvailableSampleRates()'],['../group__analogout.html#gaba62dc41d9bb4ca38c4434dce47b7b5d',1,'libm2k::analog::M2kAnalogOut::getAvailableSampleRates()']]], + ['getbufferrearmontrigger',['getBufferRearmOnTrigger',['../group__analogout.html#ga1404f76a293f0645c1858949514ff66b',1,'libm2k::analog::M2kAnalogOut']]], + ['getchannelname',['getChannelName',['../group__analogin.html#ga1367ecf1c243d290d07cff46ffc19c22',1,'libm2k::analog::M2kAnalogIn::getChannelName()'],['../group__analogout.html#gafbffa76f272fc6e1ed2fc7b581f37021',1,'libm2k::analog::M2kAnalogOut::getChannelName()']]], + ['getcontextattributevalue',['getContextAttributeValue',['../group__context.html#gaf86b317fbd0f4182b9f8bcea82cde622',1,'libm2k::context::Context']]], + ['getcontextdescription',['getContextDescription',['../group__context.html#ga333c238d19e9af040df6b7c03cee9827',1,'libm2k::context::Context']]], + ['getcontextsinfo',['getContextsInfo',['../group__contextbuilder.html#ga7203f5bdfac4498a2cb9ef558af583c6',1,'libm2k::context']]], + ['getcyclic',['getCyclic',['../group__digital.html#ga026027afc00ebf7453af0f2f36027f44',1,'libm2k::digital::M2kDigital::getCyclic()'],['../group__analogout.html#gac89e8a228fbf71a302b5d2e085fa8c25',1,'libm2k::analog::M2kAnalogOut::getCyclic()']]], + ['getdaccalibrationgain',['getDacCalibrationGain',['../group__m2k.html#gaa2db6567ceefccd8aadb42444629f47e',1,'libm2k::context::M2k']]], + ['getdaccalibrationoffset',['getDacCalibrationOffset',['../group__m2k.html#ga77075e62398b448df892baeebf3573bf',1,'libm2k::context::M2k']]], + ['getdigital',['getDigital',['../group__m2k.html#ga1490bea0b084d2a0c1520fccedd37b01',1,'libm2k::context::M2k']]], + ['getdigitalcondition',['getDigitalCondition',['../group__m2ktrigger.html#gaa4f2ef34570c13a94b8b49a209acdfc7',1,'libm2k::M2kHardwareTrigger::getDigitalCondition(unsigned int chnIdx)=0'],['../group__m2ktrigger.html#ga6d2afeda96fde0dbc3e6cd47eeec5b84',1,'libm2k::M2kHardwareTrigger::getDigitalCondition(libm2k::digital::DIO_CHANNEL chnIdx)=0']]], + ['getdigitaldelay',['getDigitalDelay',['../group__m2ktrigger.html#gac7029bc129b536e70615ad6b7005a594',1,'libm2k::M2kHardwareTrigger']]], + ['getdigitalexternalcondition',['getDigitalExternalCondition',['../group__m2ktrigger.html#gacd8661561a6d2196f9b96c8154dc976a',1,'libm2k::M2kHardwareTrigger']]], + ['getdigitalmode',['getDigitalMode',['../group__m2ktrigger.html#gab2932429a0017228461427a01e66a91d',1,'libm2k::M2kHardwareTrigger']]], + ['getdigitalsource',['getDigitalSource',['../group__m2ktrigger.html#ga135544f237102aab4b6ba0d83df4b9c5',1,'libm2k::M2kHardwareTrigger']]], + ['getdigitalstreamingflag',['getDigitalStreamingFlag',['../group__m2ktrigger.html#gaf1b599f37210ddedd5e553269e7160a7',1,'libm2k::M2kHardwareTrigger']]], + ['getdirection',['getDirection',['../group__digital.html#ga4bf19c9087009c73554cfefedcafaf88',1,'libm2k::digital::M2kDigital']]], + ['getdmm',['getDMM',['../group__context.html#ga29d1bf312eb0f122ed8872668ca1731d',1,'libm2k::context::Context::getDMM(unsigned int index)=0'],['../group__context.html#ga3c89623939ae8aa17723198616f6733a',1,'libm2k::context::Context::getDMM(std::string name)=0']]], + ['getdmmcount',['getDmmCount',['../group__context.html#ga896d74a68af376ed71b21660bff42add',1,'libm2k::context::Context']]], + ['getfiltercompensation',['getFilterCompensation',['../group__analogin.html#ga110371da0fff6dee26d603855fb83f95',1,'libm2k::analog::M2kAnalogIn::getFilterCompensation()'],['../group__analogout.html#ga3002c9ea4c24af64670da2018983c3dc',1,'libm2k::analog::M2kAnalogOut::getFilterCompensation()']]], + ['getfirmwareversion',['getFirmwareVersion',['../group__context.html#ga1d0abe606b0b05f910c5e2d30610863c',1,'libm2k::context::Context']]], + ['gethysteresisrange',['getHysteresisRange',['../group__analogin.html#gae1f054bba37640e9fbb740cc078d7dcc',1,'libm2k::analog::M2kAnalogIn']]], + ['getiiocontext',['getIioContext',['../group__context.html#gaad5e679af49b71db0827c82508472cf3',1,'libm2k::context::Context']]], + ['getiiocontextversion',['getIioContextVersion',['../group__context.html#gacc5340987f5af897e410f826159243db',1,'libm2k::context::Context']]], + ['getiioobjects',['getIioObjects',['../group__digital.html#ga7a90f510a936e8a2fb0443c55b95b6f1',1,'libm2k::digital::M2kDigital::getIioObjects()'],['../group__analogin.html#gaa1f732b362e4ac64c17fa16f44301e50',1,'libm2k::analog::M2kAnalogIn::getIioObjects()'],['../group__analogout.html#ga839474ad33fcc9f42ca6c9bb242a5076',1,'libm2k::analog::M2kAnalogOut::getIioObjects()']]], + ['getkernelbufferscount',['getKernelBuffersCount',['../group__analogin.html#gac6871e786db4a19f141acd65212bbdae',1,'libm2k::analog::M2kAnalogIn::getKernelBuffersCount()'],['../group__analogout.html#ga23b330fc9204382103b5ba916d097b2f',1,'libm2k::analog::M2kAnalogOut::getKernelBuffersCount()']]], + ['getled',['getLed',['../group__m2k.html#ga7b43520183627539dcf3d9c403dbfb32',1,'libm2k::context::M2k']]], + ['getlut',['getLUT',['../group__m2k.html#ga4e05838cd2168cfe96a41257452d1791',1,'libm2k::context::M2k']]], + ['getmaximumsamplerate',['getMaximumSamplerate',['../group__analogin.html#gacd5288290581b262b70cf49beedc2380',1,'libm2k::analog::M2kAnalogIn::getMaximumSamplerate()'],['../group__analogout.html#ga8ede142099d6c9a5b67a42af645b7838',1,'libm2k::analog::M2kAnalogOut::getMaximumSamplerate()']]], + ['getname',['getName',['../group__analogin.html#gab9b3ff0858b627db226b9870b75b5b5e',1,'libm2k::analog::M2kAnalogIn::getName()'],['../group__dmm.html#ga6c1be15dd24037b62558e3592b15e016',1,'libm2k::analog::DMM::getName()']]], + ['getnbchannels',['getNbChannels',['../group__analogin.html#gaf34915a36b28c543c9938ca3109e5e13',1,'libm2k::analog::M2kAnalogIn::getNbChannels()'],['../group__analogout.html#gaec2165e7809d9b70a856c2f31c25e33d',1,'libm2k::analog::M2kAnalogOut::getNbChannels()']]], + ['getnbchannelsin',['getNbChannelsIn',['../group__digital.html#gaf2af31083a48963fa7ef9d0a10bc4c93',1,'libm2k::digital::M2kDigital']]], + ['getnbchannelsout',['getNbChannelsOut',['../group__digital.html#ga186967fea84c0919ec945c615daa558d',1,'libm2k::digital::M2kDigital']]], + ['getoutputmode',['getOutputMode',['../group__digital.html#ga1b6c36b1bcf39c2dfe8a9870e3f3ace1',1,'libm2k::digital::M2kDigital::getOutputMode(DIO_CHANNEL chn)=0'],['../group__digital.html#gab724115861ddbb2920ab3e36bf45f49f',1,'libm2k::digital::M2kDigital::getOutputMode(unsigned int chn)=0']]], + ['getoversamplingratio',['getOversamplingRatio',['../group__analogin.html#ga385851d7f84e3554ce695f3807cc236e',1,'libm2k::analog::M2kAnalogIn::getOversamplingRatio()=0'],['../group__analogin.html#gac070ac2920a3ca8d0880c69493259790',1,'libm2k::analog::M2kAnalogIn::getOversamplingRatio(unsigned int chn_idx)=0'],['../group__analogout.html#ga7fc2bdfad8ddd3da510c09353f45d477',1,'libm2k::analog::M2kAnalogOut::getOversamplingRatio()=0'],['../group__analogout.html#gad685eb3445f3cf4b5712385a8e58df84',1,'libm2k::analog::M2kAnalogOut::getOversamplingRatio(unsigned int chn)=0']]], + ['getpowersupply',['getPowerSupply',['../group__m2k.html#ga69759758b630bb1047fc6c9b0adb05ce',1,'libm2k::context::M2k']]], + ['getrange',['getRange',['../group__analogin.html#ga1e2f076c97d206be7c1a8e4d66486f78',1,'libm2k::analog::M2kAnalogIn']]], + ['getrangelimits',['getRangeLimits',['../group__analogin.html#gace88f68d1901554ce3e678eb132921df',1,'libm2k::analog::M2kAnalogIn']]], + ['getsamplerate',['getSampleRate',['../group__analogin.html#ga4da0d800002f8daa35b3ec620e30a889',1,'libm2k::analog::M2kAnalogIn::getSampleRate()'],['../group__analogout.html#gaca7b9d1a5cf40b2d1065e679341cb1c1',1,'libm2k::analog::M2kAnalogOut::getSampleRate()=0'],['../group__analogout.html#ga9f184574f3be74ebd54822b1d16d7383',1,'libm2k::analog::M2kAnalogOut::getSampleRate(unsigned int chn)=0']]], + ['getsampleratein',['getSampleRateIn',['../group__digital.html#gaadd3fc056a59d6068e3f5700e6efbc00',1,'libm2k::digital::M2kDigital']]], + ['getsamplerateout',['getSampleRateOut',['../group__digital.html#ga21d2acd5bcab7adb707cae0b692cc4cb',1,'libm2k::digital::M2kDigital']]], + ['getsamples',['getSamples',['../group__digital.html#gad162531b93bfc8c7f8b8aeb49893e2eb',1,'libm2k::digital::M2kDigital::getSamples(unsigned int nb_samples)=0'],['../group__digital.html#gad3da0d7489a164de1ca8989061d92b3a',1,'libm2k::digital::M2kDigital::getSamples(std::vector< unsigned short > &data, unsigned int nb_samples)=0'],['../group__analogin.html#ga86eaa7648d05295f42eda702c222bfc3',1,'libm2k::analog::M2kAnalogIn::getSamples(unsigned int nb_samples)=0'],['../group__analogin.html#gaeb9c9bdc8b4096da422b429c63c14bc3',1,'libm2k::analog::M2kAnalogIn::getSamples(std::vector< std::vector< double >> &data, unsigned int nb_samples)=0']]], + ['getsamplesinterleaved',['getSamplesInterleaved',['../group__analogin.html#ga77d810f7a974604fa06fe023876f8492',1,'libm2k::analog::M2kAnalogIn']]], + ['getsamplesinterleaved_5fmatlab',['getSamplesInterleaved_matlab',['../group__analogin.html#ga06f87bb92bef352f3226040ce72c3979',1,'libm2k::analog::M2kAnalogIn']]], + ['getsamplesp',['getSamplesP',['../group__digital.html#ga67eee33d5a44a05044326d4b8573151d',1,'libm2k::digital::M2kDigital']]], + ['getsamplesraw',['getSamplesRaw',['../group__analogin.html#ga06f67051068810086abe494d5c79f83b',1,'libm2k::analog::M2kAnalogIn']]], + ['getsamplesrawinterleaved',['getSamplesRawInterleaved',['../group__analogin.html#ga178aacec348337dfe64a23088c170e2d',1,'libm2k::analog::M2kAnalogIn']]], + ['getsamplesrawinterleaved_5fmatlab',['getSamplesRawInterleaved_matlab',['../group__analogin.html#gaf663f193fe0f63f82fa542182bb79cb2',1,'libm2k::analog::M2kAnalogIn']]], + ['getscalingfactor',['getScalingFactor',['../group__analogin.html#ga0832e1a58f8e73b329cfbe3145517390',1,'libm2k::analog::M2kAnalogIn::getScalingFactor()'],['../group__analogout.html#gac220f9211474aa280cf5cd505a2bedbc',1,'libm2k::analog::M2kAnalogOut::getScalingFactor()']]], + ['getserialnumber',['getSerialNumber',['../group__context.html#gac6f8ad8f8259b2509b8835aba7940d5b',1,'libm2k::context::Context']]], + ['gettrigger',['getTrigger',['../group__digital.html#ga277e769057f7930035bc4321fd4d85b0',1,'libm2k::digital::M2kDigital::getTrigger()'],['../group__analogin.html#gab5735110834e439fba99166d025c06af',1,'libm2k::analog::M2kAnalogIn::getTrigger()'],['../group__analogout.html#ga781d66ca3fb8f129e7d08b559feab245',1,'libm2k::analog::M2kAnalogOut::getTrigger()']]], + ['geturi',['getUri',['../group__context.html#ga4b1b7e79cc1feb9e3649717a71453f3a',1,'libm2k::context::Context']]], + ['getvalueforrange',['getValueForRange',['../group__analogin.html#ga924b38f0417cc80c3c9d1fcb32033b59',1,'libm2k::analog::M2kAnalogIn']]], + ['getvalueraw',['getValueRaw',['../group__digital.html#gae305a91b5f2f3df197fc492b4b691a1c',1,'libm2k::digital::M2kDigital::getValueRaw(DIO_CHANNEL index)=0'],['../group__digital.html#ga5075565d2f5f370bee915c71c587d648',1,'libm2k::digital::M2kDigital::getValueRaw(unsigned int index)=0']]], + ['getversion',['getVersion',['../group__contextbuilder.html#gadf59cfc7ad6a8db902e66034fb7dd1a0',1,'libm2k::context']]], + ['getverticaloffset',['getVerticalOffset',['../group__analogin.html#gad67570b11f42ac5c77dbe26ff8eaac47',1,'libm2k::analog::M2kAnalogIn']]], + ['getvoltage',['getVoltage',['../group__analogin.html#ga3fe65b480a2a201257f579291cc70397',1,'libm2k::analog::M2kAnalogIn::getVoltage(unsigned int ch)=0'],['../group__analogin.html#gaacf7806f2c176d926f57d13dc084f981',1,'libm2k::analog::M2kAnalogIn::getVoltage(libm2k::analog::ANALOG_IN_CHANNEL ch)=0'],['../group__analogin.html#gab2f82b2d0d089724127e5a10691dd751',1,'libm2k::analog::M2kAnalogIn::getVoltage()=0']]], + ['getvoltagep',['getVoltageP',['../group__analogin.html#ga41e2cce97db7ab759c9be46e42a1e39d',1,'libm2k::analog::M2kAnalogIn']]], + ['getvoltageraw',['getVoltageRaw',['../group__analogin.html#ga2c909238a5085c777aa418fa39abc6d0',1,'libm2k::analog::M2kAnalogIn::getVoltageRaw(unsigned int ch)=0'],['../group__analogin.html#ga2c5ad2da6075d9676dedab6a6c791d58',1,'libm2k::analog::M2kAnalogIn::getVoltageRaw(libm2k::analog::ANALOG_IN_CHANNEL ch)=0'],['../group__analogin.html#gac449be0da6da9a7a792926d317a8adb6',1,'libm2k::analog::M2kAnalogIn::getVoltageRaw()=0']]], + ['getvoltagerawp',['getVoltageRawP',['../group__analogin.html#ga35311eb4a85e65741b6d88939921b420',1,'libm2k::analog::M2kAnalogIn']]] +]; diff --git a/search/functions_4.html b/search/functions_4.html new file mode 100644 index 00000000..e713f286 --- /dev/null +++ b/search/functions_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 00000000..0777ada0 --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['hascontextcalibration',['hasContextCalibration',['../group__m2k.html#ga6c0c9c90802225a37355126462247250',1,'libm2k::context::M2k']]], + ['hasmixedsignal',['hasMixedSignal',['../group__m2k.html#ga2236476a76c6e13fa28160f29c89cb11',1,'libm2k::context::M2k']]] +]; diff --git a/search/functions_5.html b/search/functions_5.html new file mode 100644 index 00000000..cfe6b17d --- /dev/null +++ b/search/functions_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 00000000..5d8be741 --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['iscalibrated',['isCalibrated',['../group__m2k.html#gae3f420c00beec2ab0711cf5a1953b741',1,'libm2k::context::M2k']]], + ['ischannelenabled',['isChannelEnabled',['../group__analogin.html#ga40233af683d4d9beeb1d9da19147378d',1,'libm2k::analog::M2kAnalogIn::isChannelEnabled()'],['../group__analogout.html#ga373c0e1c7cf70dfc78321fc609628b5f',1,'libm2k::analog::M2kAnalogOut::isChannelEnabled()']]], + ['isclocksourceexternal',['isClocksourceExternal',['../group__digital.html#gaa554d34e9d06b9d5c938f09ecbf72d86',1,'libm2k::digital::M2kDigital']]], + ['ispushdone',['isPushDone',['../group__analogout.html#ga0141fc6a3c9c5a80d429bfca61c58d40',1,'libm2k::analog::M2kAnalogOut']]] +]; diff --git a/search/functions_6.html b/search/functions_6.html new file mode 100644 index 00000000..a78ec13f --- /dev/null +++ b/search/functions_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_6.js b/search/functions_6.js new file mode 100644 index 00000000..6f8ae6ce --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['logallattributes',['logAllAttributes',['../group__context.html#ga675e187a25122015d151158ed512bf54',1,'libm2k::context::Context']]] +]; diff --git a/search/functions_7.html b/search/functions_7.html new file mode 100644 index 00000000..7842361f --- /dev/null +++ b/search/functions_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_7.js b/search/functions_7.js new file mode 100644 index 00000000..3d63e75f --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['m2kopen',['m2kOpen',['../group__contextbuilder.html#ga65989a4f62dfb4de8ed54734fb0efe44',1,'libm2k::context::m2kOpen(const char *uri)'],['../group__contextbuilder.html#ga2a15ff31380d7f2a300a1c970045fe1d',1,'libm2k::context::m2kOpen(struct iio_context *ctx, const char *uri)'],['../group__contextbuilder.html#ga2e1b7047a65ef26bf215d16462bf1b70',1,'libm2k::context::m2kOpen()']]] +]; diff --git a/search/functions_8.html b/search/functions_8.html new file mode 100644 index 00000000..48feafe5 --- /dev/null +++ b/search/functions_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_8.js b/search/functions_8.js new file mode 100644 index 00000000..7adfc84f --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['push',['push',['../group__digital.html#ga4b46cea8636d88c3c3cc5e74f9a49d65',1,'libm2k::digital::M2kDigital::push(std::vector< unsigned short > const &data)=0'],['../group__digital.html#gafcf3af4f7a7723c0832c67db81d97028',1,'libm2k::digital::M2kDigital::push(unsigned short *data, unsigned int nb_samples)=0'],['../group__analogout.html#ga8323899b9f5ea25d9213612471d4c63b',1,'libm2k::analog::M2kAnalogOut::push(unsigned int chnIdx, std::vector< double > const &data)=0'],['../group__analogout.html#ga5fe26dfdb24af3beac4de93529410408',1,'libm2k::analog::M2kAnalogOut::push(std::vector< std::vector< double >> const &data)=0']]], + ['pushbytes',['pushBytes',['../group__analogout.html#ga4b5b04c46fbaea5417174cc1b840095d',1,'libm2k::analog::M2kAnalogOut']]], + ['pushchannel',['pushChannel',['../group__powersupply.html#ga7d548daa8f48139286cf2da4b9fbf465',1,'libm2k::analog::M2kPowerSupply']]], + ['pushinterleaved',['pushInterleaved',['../group__analogout.html#gad130d87c90f18e68174beb50bebea18d',1,'libm2k::analog::M2kAnalogOut']]], + ['pushraw',['pushRaw',['../group__analogout.html#ga9f8e633ba25848e84db9bedb9bef58da',1,'libm2k::analog::M2kAnalogOut::pushRaw(unsigned int chnIdx, std::vector< short > const &data)=0'],['../group__analogout.html#ga6a7e23ea9992a48e644fbdd461fe4c61',1,'libm2k::analog::M2kAnalogOut::pushRaw(std::vector< std::vector< short >> const &data)=0']]], + ['pushrawbytes',['pushRawBytes',['../group__analogout.html#ga7e5f65bb4a93b4a6a8281aef6f37245c',1,'libm2k::analog::M2kAnalogOut']]], + ['pushrawinterleaved',['pushRawInterleaved',['../group__analogout.html#ga0973fbe8f043a37d2e0da5828d018073',1,'libm2k::analog::M2kAnalogOut']]] +]; diff --git a/search/functions_9.html b/search/functions_9.html new file mode 100644 index 00000000..0f05a8ba --- /dev/null +++ b/search/functions_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_9.js b/search/functions_9.js new file mode 100644 index 00000000..05741b9f --- /dev/null +++ b/search/functions_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['readall',['readAll',['../group__dmm.html#ga706c94ab32fa2438a7eccc8a41834d0d',1,'libm2k::analog::DMM']]], + ['readchannel',['readChannel',['../group__powersupply.html#ga3bec194fde326a186390308545a1f85a',1,'libm2k::analog::M2kPowerSupply::readChannel()'],['../group__dmm.html#ga4040f03306a938aef4381605540d6603',1,'libm2k::analog::DMM::readChannel(unsigned int index)=0'],['../group__dmm.html#ga1d09c72139b0603217f7be1f5165e287',1,'libm2k::analog::DMM::readChannel(std::string chn_name)=0']]], + ['reset',['reset',['../group__m2k.html#gae663719cfccee787c9ebc853b43379d4',1,'libm2k::context::M2k']]], + ['resetratemux',['resetRateMux',['../group__digital.html#gae3d0ebe7daa8e53a16f53a30c6e04bbd',1,'libm2k::digital::M2kDigital']]] +]; diff --git a/search/functions_a.html b/search/functions_a.html new file mode 100644 index 00000000..03faad22 --- /dev/null +++ b/search/functions_a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_a.js b/search/functions_a.js new file mode 100644 index 00000000..19d09de0 --- /dev/null +++ b/search/functions_a.js @@ -0,0 +1,53 @@ +var searchData= +[ + ['setadccalibrationgain',['setAdcCalibrationGain',['../group__m2k.html#gace628592e5c62549451c7ee23150a622',1,'libm2k::context::M2k']]], + ['setadccalibrationoffset',['setAdcCalibrationOffset',['../group__m2k.html#ga672f46288b87f4fb37a0058d12e2fe36',1,'libm2k::context::M2k']]], + ['setanalogcondition',['setAnalogCondition',['../group__m2ktrigger.html#ga426f47bfb3e87bb95bbb3f91e1589430',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogdelay',['setAnalogDelay',['../group__m2ktrigger.html#ga2768b5052cdffd3e3d999420e1a2b9eb',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogexternalcondition',['setAnalogExternalCondition',['../group__m2ktrigger.html#ga591bbf9a24f526b67c53cdf3dbee168d',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogexternaloutselect',['setAnalogExternalOutSelect',['../group__m2ktrigger.html#ga5f746c978e0c27733ea8b31046ced185',1,'libm2k::M2kHardwareTrigger']]], + ['setanaloghysteresis',['setAnalogHysteresis',['../group__m2ktrigger.html#ga3dc1539be4572fcec9b71d1b69490fe5',1,'libm2k::M2kHardwareTrigger']]], + ['setanaloglevel',['setAnalogLevel',['../group__m2ktrigger.html#ga517a345a918de79ad261a709e8103e4f',1,'libm2k::M2kHardwareTrigger']]], + ['setanaloglevelraw',['setAnalogLevelRaw',['../group__m2ktrigger.html#ga4333fc4a839f103f03b0e8ffb39c4353',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogmode',['setAnalogMode',['../group__m2ktrigger.html#ga862b0a98c01a9b0042a5a91e1bf53da2',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogouttriggercondition',['setAnalogOutTriggerCondition',['../group__m2ktrigger.html#gaf25a29ee637502b49de0eb02ab7d201e',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogouttriggersource',['setAnalogOutTriggerSource',['../group__m2ktrigger.html#ga4dba33324c3d38ae7f59f8cd83f0363d',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogouttriggerstatus',['setAnalogOutTriggerStatus',['../group__m2ktrigger.html#gadce2bad55dc3fd1625191cdc08fef94c',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogsource',['setAnalogSource',['../group__m2ktrigger.html#ga4f05c7a2e590ced820c502e3cac5b624',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogsourcechannel',['setAnalogSourceChannel',['../group__m2ktrigger.html#ga8b713e04398e7b854279b5284b3ed77b',1,'libm2k::M2kHardwareTrigger']]], + ['setanalogstreamingflag',['setAnalogStreamingFlag',['../group__m2ktrigger.html#gaa8ca8530d9994e75fbd86a9dddf543ec',1,'libm2k::M2kHardwareTrigger']]], + ['setbufferrearmontrigger',['setBufferRearmOnTrigger',['../group__analogout.html#ga9f847f25ad78a6b0b5f007bbd30af479',1,'libm2k::analog::M2kAnalogOut']]], + ['setcyclic',['setCyclic',['../group__digital.html#ga7a3eed27a67559a0bee079bb90e7ebf9',1,'libm2k::digital::M2kDigital::setCyclic()'],['../group__analogout.html#ga65ac70a9f0efd26bc46f01a8c6e7f371',1,'libm2k::analog::M2kAnalogOut::setCyclic(bool en)=0'],['../group__analogout.html#ga8fabc8b94b3874d6aff5a573fa4de5d5',1,'libm2k::analog::M2kAnalogOut::setCyclic(unsigned int chn, bool en)=0']]], + ['setdaccalibrationgain',['setDacCalibrationGain',['../group__m2k.html#ga2b0190a4298e37df1a202e09579c4e2e',1,'libm2k::context::M2k']]], + ['setdaccalibrationoffset',['setDacCalibrationOffset',['../group__m2k.html#ga1b1a58b9ba3200a17294eebecb4af0b9',1,'libm2k::context::M2k']]], + ['setdigitalcondition',['setDigitalCondition',['../group__m2ktrigger.html#gaec81a5c25b965dad039c227dcffe76a9',1,'libm2k::M2kHardwareTrigger::setDigitalCondition(unsigned int chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond)=0'],['../group__m2ktrigger.html#gaecad12bf34f18a4328042669dbaa17de',1,'libm2k::M2kHardwareTrigger::setDigitalCondition(libm2k::digital::DIO_CHANNEL chnIdx, M2K_TRIGGER_CONDITION_DIGITAL cond)=0']]], + ['setdigitaldelay',['setDigitalDelay',['../group__m2ktrigger.html#gae38474134e906466c653e0c5527bd3ae',1,'libm2k::M2kHardwareTrigger']]], + ['setdigitalexternalcondition',['setDigitalExternalCondition',['../group__m2ktrigger.html#ga82d65ac6d8843642ddd43991eecb35f6',1,'libm2k::M2kHardwareTrigger']]], + ['setdigitalmode',['setDigitalMode',['../group__m2ktrigger.html#ga706cca78b69ac775820ba8352040c573',1,'libm2k::M2kHardwareTrigger']]], + ['setdigitalsource',['setDigitalSource',['../group__m2ktrigger.html#ga77bbf71b3749a65b237061e5a04ad74c',1,'libm2k::M2kHardwareTrigger']]], + ['setdigitalstreamingflag',['setDigitalStreamingFlag',['../group__m2ktrigger.html#gaa349d3ea521c059c2a2812bcfe72db15',1,'libm2k::M2kHardwareTrigger']]], + ['setdirection',['setDirection',['../group__digital.html#ga8a8c8b62cd3d0d1d31ea03b8f53c8cc6',1,'libm2k::digital::M2kDigital::setDirection(unsigned short mask)=0'],['../group__digital.html#gaa47937847a67ad9157715fda43d9eca8',1,'libm2k::digital::M2kDigital::setDirection(unsigned int index, DIO_DIRECTION dir)=0'],['../group__digital.html#ga485feb70d26f0c70cd27400b35a17435',1,'libm2k::digital::M2kDigital::setDirection(unsigned int index, bool dir)=0'],['../group__digital.html#ga26efff4c4a48be84f2a4276611594ced',1,'libm2k::digital::M2kDigital::setDirection(DIO_CHANNEL index, bool dir)=0'],['../group__digital.html#ga1e31a402bf9e7170423e4e3f85c62ba4',1,'libm2k::digital::M2kDigital::setDirection(DIO_CHANNEL index, DIO_DIRECTION dir)=0']]], + ['setexternalclocksource',['setExternalClocksource',['../group__digital.html#gaff89e8e0fa8f7daf882b5926a5dcdf46',1,'libm2k::digital::M2kDigital']]], + ['setkernelbufferscount',['setKernelBuffersCount',['../group__analogin.html#ga252ebaf469a261b4f765cdde703cf274',1,'libm2k::analog::M2kAnalogIn::setKernelBuffersCount()'],['../group__analogout.html#ga054b4fc523c5b5fdf5f39f5b14ae94e7',1,'libm2k::analog::M2kAnalogOut::setKernelBuffersCount()']]], + ['setkernelbufferscountin',['setKernelBuffersCountIn',['../group__digital.html#gac3232a5fa0a0de00cc35d958e737ef34',1,'libm2k::digital::M2kDigital']]], + ['setkernelbufferscountout',['setKernelBuffersCountOut',['../group__digital.html#ga7d5ef2a8ee20d8ab3398338581320ac6',1,'libm2k::digital::M2kDigital']]], + ['setled',['setLed',['../group__m2k.html#ga7c660f05b5657b2bc46586eced3e9a58',1,'libm2k::context::M2k']]], + ['setoutputmode',['setOutputMode',['../group__digital.html#gadcff8a29282f1c2d1bf09a4146fa2e3d',1,'libm2k::digital::M2kDigital::setOutputMode(DIO_CHANNEL chn, DIO_MODE mode)=0'],['../group__digital.html#ga7f593428a7ccd3987f60864134fc4fb1',1,'libm2k::digital::M2kDigital::setOutputMode(unsigned int chn, DIO_MODE mode)=0']]], + ['setoversamplingratio',['setOversamplingRatio',['../group__analogin.html#gaf40f606df2772e654351a18ee2d62a99',1,'libm2k::analog::M2kAnalogIn::setOversamplingRatio(int oversampling)=0'],['../group__analogin.html#ga14c46dc50b7471c98a259dc2e53a750d',1,'libm2k::analog::M2kAnalogIn::setOversamplingRatio(unsigned int chn_idx, int oversampling)=0'],['../group__analogout.html#gabe34faa439ccf011673c5f1ddcc387e7',1,'libm2k::analog::M2kAnalogOut::setOversamplingRatio(std::vector< int > oversampling_ratio)=0'],['../group__analogout.html#ga2b50d86fc115feb46fdfe43ca2a1cb3b',1,'libm2k::analog::M2kAnalogOut::setOversamplingRatio(unsigned int chn, int oversampling_ratio)=0']]], + ['setrange',['setRange',['../group__analogin.html#gae81ff0a3106874cae2c4ebca7ed0d482',1,'libm2k::analog::M2kAnalogIn::setRange(ANALOG_IN_CHANNEL channel, M2K_RANGE range)=0'],['../group__analogin.html#ga9ca99010677ffb931d99248cb08bd1aa',1,'libm2k::analog::M2kAnalogIn::setRange(ANALOG_IN_CHANNEL channel, double min, double max)=0']]], + ['setratemux',['setRateMux',['../group__digital.html#ga412324220d5f07c20bc17e571cff5837',1,'libm2k::digital::M2kDigital']]], + ['setsamplerate',['setSampleRate',['../group__analogin.html#ga0c70f6e240849d26949ec753b0c97a0b',1,'libm2k::analog::M2kAnalogIn::setSampleRate()'],['../group__analogout.html#gab34bd111c55ed24ee4d49e26311794c4',1,'libm2k::analog::M2kAnalogOut::setSampleRate(std::vector< double > samplerates)=0'],['../group__analogout.html#ga84ce57f056e85fe9d58067fb8ceca21f',1,'libm2k::analog::M2kAnalogOut::setSampleRate(unsigned int chn, double samplerate)=0']]], + ['setsampleratein',['setSampleRateIn',['../group__digital.html#ga967d502aebe2cbd7ff5c3f9a1888c5ab',1,'libm2k::digital::M2kDigital']]], + ['setsamplerateout',['setSampleRateOut',['../group__digital.html#gad412f0742a9d5679050ffab2976f1f3d',1,'libm2k::digital::M2kDigital']]], + ['settimeout',['setTimeout',['../group__context.html#ga5369f9c730f5d6a37b21b13adf01abef',1,'libm2k::context::Context']]], + ['setvalueraw',['setValueRaw',['../group__digital.html#ga5ae5c737e7f3c1281d2e242f2f600263',1,'libm2k::digital::M2kDigital::setValueRaw(DIO_CHANNEL index, DIO_LEVEL level)=0'],['../group__digital.html#ga9d6f40df3dbbfb16b72aae7e2b57bfc9',1,'libm2k::digital::M2kDigital::setValueRaw(unsigned int index, DIO_LEVEL level)=0'],['../group__digital.html#gabee14cf7edcabb1cd34474e99a86c102',1,'libm2k::digital::M2kDigital::setValueRaw(DIO_CHANNEL index, bool level)=0']]], + ['setverticaloffset',['setVerticalOffset',['../group__analogin.html#ga60891c201dbd0238e49139fd6199386e',1,'libm2k::analog::M2kAnalogIn']]], + ['setvoltage',['setVoltage',['../group__analogout.html#gafe266e2ff3c51fcc6878e7e487e2b010',1,'libm2k::analog::M2kAnalogOut']]], + ['setvoltageraw',['setVoltageRaw',['../group__analogout.html#gab436c577c151a246305a83f73953f124',1,'libm2k::analog::M2kAnalogOut']]], + ['startacquisition',['startAcquisition',['../group__digital.html#ga564049f0f0b53f1ab607fa8b4d871107',1,'libm2k::digital::M2kDigital::startAcquisition()'],['../group__analogin.html#ga7dab519b883bb7e4aa1543fd48c20c51',1,'libm2k::analog::M2kAnalogIn::startAcquisition()']]], + ['startmixedsignalacquisition',['startMixedSignalAcquisition',['../group__m2k.html#gaa8307fc93420ffb9b26aef9a5a0c053a',1,'libm2k::context::M2k']]], + ['stop',['stop',['../group__analogout.html#ga8fb08074cdda7f6fb407a2dfc0193efb',1,'libm2k::analog::M2kAnalogOut::stop()=0'],['../group__analogout.html#ga0087d48359470e8d7f0aaffe42b485e1',1,'libm2k::analog::M2kAnalogOut::stop(unsigned int chn)=0']]], + ['stopacquisition',['stopAcquisition',['../group__digital.html#ga95fa7d1d53f4eae3544378a30eaa0034',1,'libm2k::digital::M2kDigital::stopAcquisition()'],['../group__analogin.html#ga2f2aa24bf39fd0c1d6d32e1106e59799',1,'libm2k::analog::M2kAnalogIn::stopAcquisition()']]], + ['stopbufferout',['stopBufferOut',['../group__digital.html#gab538cf207b486ccda152d5aa2bf17e31',1,'libm2k::digital::M2kDigital']]], + ['stopmixedsignalacquisition',['stopMixedSignalAcquisition',['../group__m2k.html#gab4bb343d34897a8ebf3a8597a1703e90',1,'libm2k::context::M2k']]] +]; diff --git a/search/functions_b.html b/search/functions_b.html new file mode 100644 index 00000000..c690013a --- /dev/null +++ b/search/functions_b.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_b.js b/search/functions_b.js new file mode 100644 index 00000000..bcca461c --- /dev/null +++ b/search/functions_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['togeneric',['toGeneric',['../group__context.html#ga79ddd3a3dc41a6de6d73f32ee854c13a',1,'libm2k::context::Context']]], + ['tom2k',['toM2k',['../group__context.html#gaf52f55ba6c313dc35a7ef24526887dce',1,'libm2k::context::Context']]] +]; diff --git a/search/groups_0.html b/search/groups_0.html new file mode 100644 index 00000000..194bb7bc --- /dev/null +++ b/search/groups_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_0.js b/search/groups_0.js new file mode 100644 index 00000000..f13f0bbb --- /dev/null +++ b/search/groups_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['analog',['Analog',['../group__analog.html',1,'']]], + ['analogin',['AnalogIn',['../group__analogin.html',1,'']]], + ['analogout',['AnalogOut',['../group__analogout.html',1,'']]] +]; diff --git a/search/groups_1.html b/search/groups_1.html new file mode 100644 index 00000000..ed9b5c61 --- /dev/null +++ b/search/groups_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_1.js b/search/groups_1.js new file mode 100644 index 00000000..9ed61ceb --- /dev/null +++ b/search/groups_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['context',['Context',['../group__context.html',1,'']]], + ['contextbuilder',['ContextBuilder',['../group__contextbuilder.html',1,'']]] +]; diff --git a/search/groups_2.html b/search/groups_2.html new file mode 100644 index 00000000..17d4e06a --- /dev/null +++ b/search/groups_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_2.js b/search/groups_2.js new file mode 100644 index 00000000..ac320744 --- /dev/null +++ b/search/groups_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['digital',['Digital',['../group__digital.html',1,'']]], + ['dmm',['DMM',['../group__dmm.html',1,'']]] +]; diff --git a/search/groups_3.html b/search/groups_3.html new file mode 100644 index 00000000..7d4a624e --- /dev/null +++ b/search/groups_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_3.js b/search/groups_3.js new file mode 100644 index 00000000..01726927 --- /dev/null +++ b/search/groups_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hardwaretrigger',['HardwareTrigger',['../group__m2ktrigger.html',1,'']]] +]; diff --git a/search/groups_4.html b/search/groups_4.html new file mode 100644 index 00000000..5e5ae2ac --- /dev/null +++ b/search/groups_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_4.js b/search/groups_4.js new file mode 100644 index 00000000..660d16f8 --- /dev/null +++ b/search/groups_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['m2k',['M2k',['../group__m2k.html',1,'']]] +]; diff --git a/search/groups_5.html b/search/groups_5.html new file mode 100644 index 00000000..fbd14605 --- /dev/null +++ b/search/groups_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_5.js b/search/groups_5.js new file mode 100644 index 00000000..442298d6 --- /dev/null +++ b/search/groups_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['powersupply',['PowerSupply',['../group__powersupply.html',1,'']]] +]; diff --git a/search/mag_sel.png b/search/mag_sel.png new file mode 100644 index 00000000..39c0ed52 Binary files /dev/null and b/search/mag_sel.png differ diff --git a/search/nomatches.html b/search/nomatches.html new file mode 100644 index 00000000..43773208 --- /dev/null +++ b/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/search/search.css b/search/search.css new file mode 100644 index 00000000..3cf9df94 --- /dev/null +++ b/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + float: none; + margin-top: 8px; + right: 0px; + width: 170px; + height: 24px; + z-index: 102; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:115px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:8px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 00000000..a554ab9c --- /dev/null +++ b/search/search.js @@ -0,0 +1,814 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_0.js b/search/variables_0.js new file mode 100644 index 00000000..51e518b6 --- /dev/null +++ b/search/variables_0.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['adc_5fgain_5fch_5f1',['adc_gain_ch_1',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#af95d5815f94f63824ef3b7fdee3353a5',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['adc_5fgain_5fch_5f2',['adc_gain_ch_2',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#ab39bc944bd18797152284a00e4de22ab',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['adc_5foffset_5fch_5f1',['adc_offset_ch_1',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#abdd022cd2de96e50442c07b20ce4bcbd',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['adc_5foffset_5fch_5f2',['adc_offset_ch_2',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#a839f19b12c4e2012637e813ea48b51f6',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['analog_5fcondition',['analog_condition',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#a17b390fcf63b213221bc0520abd1b2d8',1,'libm2k::SETTINGS']]] +]; diff --git a/search/variables_1.html b/search/variables_1.html new file mode 100644 index 00000000..b784017a --- /dev/null +++ b/search/variables_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_1.js b/search/variables_1.js new file mode 100644 index 00000000..d1a77ee2 --- /dev/null +++ b/search/variables_1.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['dac_5fa_5fgain',['dac_a_gain',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#ad41196a804f918958109f3e26cc84b86',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['dac_5fa_5foffset',['dac_a_offset',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#a91b82c1619e8b9391fb18161b546cc74',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['dac_5fb_5fgain',['dac_b_gain',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#a473d417371c34985ab03d67398c18d7f',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['dac_5fb_5foffset',['dac_b_offset',['../structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html#a99ebbe59e897683e640c216695b9fb7a',1,'libm2k::CALIBRATION_PARAMETERS']]], + ['delay',['delay',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#a8f98fcfe7928bb304ab42f5e364b01be',1,'libm2k::SETTINGS']]], + ['digital_5fcondition',['digital_condition',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#ac61236c4a0c8fcf6cc6e26458eae7a27',1,'libm2k::SETTINGS']]] +]; diff --git a/search/variables_2.html b/search/variables_2.html new file mode 100644 index 00000000..0cb98d30 --- /dev/null +++ b/search/variables_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_2.js b/search/variables_2.js new file mode 100644 index 00000000..67c03ca2 --- /dev/null +++ b/search/variables_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['git_5ftag',['git_tag',['../structlibm2k_1_1_i_i_o___c_o_n_t_e_x_t___v_e_r_s_i_o_n.html#a810dbe1857db0dcf01f25f5ca6e641e2',1,'libm2k::IIO_CONTEXT_VERSION']]] +]; diff --git a/search/variables_3.html b/search/variables_3.html new file mode 100644 index 00000000..1e83bf5a --- /dev/null +++ b/search/variables_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_3.js b/search/variables_3.js new file mode 100644 index 00000000..8af5ede4 --- /dev/null +++ b/search/variables_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hysteresis',['hysteresis',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#ad6a94c396e8791b95e604b20abbcc083',1,'libm2k::SETTINGS']]] +]; diff --git a/search/variables_4.html b/search/variables_4.html new file mode 100644 index 00000000..39883bd6 --- /dev/null +++ b/search/variables_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_4.js b/search/variables_4.js new file mode 100644 index 00000000..b8df85cb --- /dev/null +++ b/search/variables_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['id',['id',['../structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html#a9220f12e8f8aa3d9737a6bf3617658ae',1,'libm2k::analog::DMM_READING']]], + ['id_5fproduct',['id_product',['../structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html#a270eee1bfbdde69c9e01d18ba8dddd99',1,'libm2k::CONTEXT_INFO']]], + ['id_5fvendor',['id_vendor',['../structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html#a44be1459f408772b18a4f5aa71ab0b06',1,'libm2k::CONTEXT_INFO']]] +]; diff --git a/search/variables_5.html b/search/variables_5.html new file mode 100644 index 00000000..f25879c0 --- /dev/null +++ b/search/variables_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_5.js b/search/variables_5.js new file mode 100644 index 00000000..11da02e0 --- /dev/null +++ b/search/variables_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['level',['level',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#a709b29b2d835cc22d3c35b44318aa36d',1,'libm2k::SETTINGS']]] +]; diff --git a/search/variables_6.html b/search/variables_6.html new file mode 100644 index 00000000..0fcd6c2f --- /dev/null +++ b/search/variables_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_6.js b/search/variables_6.js new file mode 100644 index 00000000..fe9f80bf --- /dev/null +++ b/search/variables_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['major',['major',['../structlibm2k_1_1_i_i_o___c_o_n_t_e_x_t___v_e_r_s_i_o_n.html#ad0a183761a8e2002d0469eb2e00c247e',1,'libm2k::IIO_CONTEXT_VERSION']]], + ['manufacturer',['manufacturer',['../structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html#a8ba2392bd7b98bbdafe5a5bf8aafc0db',1,'libm2k::CONTEXT_INFO']]], + ['minor',['minor',['../structlibm2k_1_1_i_i_o___c_o_n_t_e_x_t___v_e_r_s_i_o_n.html#a604896457d0b72863a412f85f487804f',1,'libm2k::IIO_CONTEXT_VERSION']]], + ['mode',['mode',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#a38572a642c3c7fde5c59036e2c1f8a13',1,'libm2k::SETTINGS']]] +]; diff --git a/search/variables_7.html b/search/variables_7.html new file mode 100644 index 00000000..ad2fa37a --- /dev/null +++ b/search/variables_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_7.js b/search/variables_7.js new file mode 100644 index 00000000..bc613897 --- /dev/null +++ b/search/variables_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['name',['name',['../structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html#a5524cf46e59d64afe7efd7a8e68633a0',1,'libm2k::analog::DMM_READING']]] +]; diff --git a/search/variables_8.html b/search/variables_8.html new file mode 100644 index 00000000..23887d77 --- /dev/null +++ b/search/variables_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_8.js b/search/variables_8.js new file mode 100644 index 00000000..781ecd3d --- /dev/null +++ b/search/variables_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['product',['product',['../structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html#a0e79c28e15b301c597978c79ec1865fd',1,'libm2k::CONTEXT_INFO']]] +]; diff --git a/search/variables_9.html b/search/variables_9.html new file mode 100644 index 00000000..f4466499 --- /dev/null +++ b/search/variables_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_9.js b/search/variables_9.js new file mode 100644 index 00000000..8769bfd9 --- /dev/null +++ b/search/variables_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['raw_5flevel',['raw_level',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#a405b400ce3a7292a63f43665a84bb9f9',1,'libm2k::SETTINGS']]] +]; diff --git a/search/variables_a.html b/search/variables_a.html new file mode 100644 index 00000000..59633b35 --- /dev/null +++ b/search/variables_a.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_a.js b/search/variables_a.js new file mode 100644 index 00000000..3ad70e41 --- /dev/null +++ b/search/variables_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['serial',['serial',['../structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html#adf5df9bdaf6be5214015449631fb8070',1,'libm2k::CONTEXT_INFO']]] +]; diff --git a/search/variables_b.html b/search/variables_b.html new file mode 100644 index 00000000..17216090 --- /dev/null +++ b/search/variables_b.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_b.js b/search/variables_b.js new file mode 100644 index 00000000..257ad59a --- /dev/null +++ b/search/variables_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['trigger_5fsource',['trigger_source',['../structlibm2k_1_1_s_e_t_t_i_n_g_s.html#a3df2c31140c22a1fb470f1c9bea77307',1,'libm2k::SETTINGS']]] +]; diff --git a/search/variables_c.html b/search/variables_c.html new file mode 100644 index 00000000..78e211ac --- /dev/null +++ b/search/variables_c.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_c.js b/search/variables_c.js new file mode 100644 index 00000000..003d8277 --- /dev/null +++ b/search/variables_c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['unit_5fname',['unit_name',['../structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html#a41c14c12286a89476706c01197ea5d10',1,'libm2k::analog::DMM_READING']]], + ['unit_5fsymbol',['unit_symbol',['../structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html#acaddf76f97ab31812a08e952d7e746a3',1,'libm2k::analog::DMM_READING']]], + ['uri',['uri',['../structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html#a935ba950dcccf9ce28dceca872163aad',1,'libm2k::CONTEXT_INFO']]] +]; diff --git a/search/variables_d.html b/search/variables_d.html new file mode 100644 index 00000000..bd27a70b --- /dev/null +++ b/search/variables_d.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_d.js b/search/variables_d.js new file mode 100644 index 00000000..9b799ede --- /dev/null +++ b/search/variables_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['value',['value',['../structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html#ae304e2cedc38b278cec223a66e8144f9',1,'libm2k::analog::DMM_READING']]] +]; diff --git a/sphinx/Makefile b/sphinx/Makefile new file mode 100644 index 00000000..d43a4fce --- /dev/null +++ b/sphinx/Makefile @@ -0,0 +1,40 @@ +# +# Copyright (c) 2024 Analog Devices Inc. +# +# This file is part of libm2k +# (see http://www.github.com/analogdevicesinc/libm2k). +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 2.1 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# + +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/sphinx/build/conf.py b/sphinx/build/conf.py new file mode 100644 index 00000000..1756cd35 --- /dev/null +++ b/sphinx/build/conf.py @@ -0,0 +1,59 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +import sphinx_rtd_theme + +# -- Project information ----------------------------------------------------- + +project = 'libm2k' +copyright = '2020, Analog Devices Inc.' +author = 'Analog Devices Inc.' + +# The full version, including alpha/beta/rc tags +release = 'v0.4.0' + + +# The master toctree document. +master_doc = "index" + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ["sphinx.ext.autodoc", "sphinx_rtd_theme"] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +#html_static_path = ['_static'] diff --git a/sphinx/build/doctrees/environment.pickle b/sphinx/build/doctrees/environment.pickle new file mode 100644 index 00000000..3f47b99e Binary files /dev/null and b/sphinx/build/doctrees/environment.pickle differ diff --git a/sphinx/build/doctrees/examples.doctree b/sphinx/build/doctrees/examples.doctree new file mode 100644 index 00000000..0154e932 Binary files /dev/null and b/sphinx/build/doctrees/examples.doctree differ diff --git a/sphinx/build/doctrees/index.doctree b/sphinx/build/doctrees/index.doctree new file mode 100644 index 00000000..9c5c55d4 Binary files /dev/null and b/sphinx/build/doctrees/index.doctree differ diff --git a/sphinx/build/doctrees/libm2k.doctree b/sphinx/build/doctrees/libm2k.doctree new file mode 100644 index 00000000..b1ca7b60 Binary files /dev/null and b/sphinx/build/doctrees/libm2k.doctree differ diff --git a/sphinx/build/html/.buildinfo b/sphinx/build/html/.buildinfo new file mode 100644 index 00000000..66cebd18 --- /dev/null +++ b/sphinx/build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: d622d515c8ba8c3946430e1613f8e86e +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/sphinx/build/html/_sources/examples.rst.txt b/sphinx/build/html/_sources/examples.rst.txt new file mode 100644 index 00000000..57518577 --- /dev/null +++ b/sphinx/build/html/_sources/examples.rst.txt @@ -0,0 +1,71 @@ +libm2k Examples +=================== + + +Generating data using the ADALM2000 DAC and acquiring it using the ADALM2000 ADC + +.. code-block:: python + + # This example assumes the following connections: + # W1 -> 1+ + # W2 -> 2+ + # GND -> 1- + # GND -> 2- + # + # The application will generate a sine and triangular wave on W1 and W2. The signal is fed back into the analog input + # and the voltage values are displayed on the screen + + import libm2k + import matplotlib.pyplot as plt + import time + import numpy as np + + ctx=libm2k.m2kOpen() + if ctx is None: + print("Connection Error: No ADALM2000 device available/connected to your PC.") + exit(1) + + ctx.calibrateADC() + ctx.calibrateDAC() + + ain=ctx.getAnalogIn() + aout=ctx.getAnalogOut() + trig=ain.getTrigger() + + ain.enableChannel(0,True) + ain.enableChannel(1,True) + ain.setSampleRate(100000) + ain.setRange(0,-10,10) + + ### uncomment the following block to enable triggering + #trig.setAnalogSource(0) # Channel 0 as source + #trig.setAnalogCondition(0,libm2k.RISING_EDGE_ANALOG) + #trig.setAnalogLevel(0,0.5) # Set trigger level at 0.5 + #trig.setAnalogDelay(0) # Trigger is centered + #trig.setAnalogMode(1, libm2k.ANALOG) + + aout.setSampleRate(0, 750000) + aout.setSampleRate(1, 750000) + aout.enableChannel(0, True) + aout.enableChannel(1, True) + + x=np.linspace(-np.pi,np.pi,1024) + buffer1=np.linspace(-2.0,2.00,1024) + buffer2=np.sin(x) + + buffer = [buffer1, buffer2] + + aout.setCyclic(True) + aout.push(buffer) + + for i in range(10): # gets 10 triggered samples then quits + data = ain.getSamples(1000) + plt.plot(data[0]) + plt.plot(data[1]) + plt.show() + time.sleep(0.1) + + libm2k.contextClose(ctx) + + +Other Python examples are available in the `source repository `_ diff --git a/sphinx/build/html/_sources/index.rst.txt b/sphinx/build/html/_sources/index.rst.txt new file mode 100644 index 00000000..46a865b7 --- /dev/null +++ b/sphinx/build/html/_sources/index.rst.txt @@ -0,0 +1,21 @@ +.. libm2k documentation master file, created by + sphinx-quickstart on Fri Apr 10 14:15:12 2020. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +libm2k documentation - Library for interfacing with the ADALM2000 +==================================================================== + +.. toctree:: + :maxdepth: 2 + + libm2k + examples + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/sphinx/build/html/_sources/libm2k.rst.txt b/sphinx/build/html/_sources/libm2k.rst.txt new file mode 100644 index 00000000..c6864f5a --- /dev/null +++ b/sphinx/build/html/_sources/libm2k.rst.txt @@ -0,0 +1,7 @@ +libm2k Module +============= + +.. automodule:: libm2k + :members: + :undoc-members: + :show-inheritance: diff --git a/sphinx/build/html/_static/ajax-loader.gif b/sphinx/build/html/_static/ajax-loader.gif new file mode 100644 index 00000000..61faf8ca Binary files /dev/null and b/sphinx/build/html/_static/ajax-loader.gif differ diff --git a/sphinx/build/html/_static/basic.css b/sphinx/build/html/_static/basic.css new file mode 100644 index 00000000..0807176e --- /dev/null +++ b/sphinx/build/html/_static/basic.css @@ -0,0 +1,676 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist td { + vertical-align: top; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/sphinx/build/html/_static/comment-bright.png b/sphinx/build/html/_static/comment-bright.png new file mode 100644 index 00000000..15e27edb Binary files /dev/null and b/sphinx/build/html/_static/comment-bright.png differ diff --git a/sphinx/build/html/_static/comment-close.png b/sphinx/build/html/_static/comment-close.png new file mode 100644 index 00000000..4d91bcf5 Binary files /dev/null and b/sphinx/build/html/_static/comment-close.png differ diff --git a/sphinx/build/html/_static/comment.png b/sphinx/build/html/_static/comment.png new file mode 100644 index 00000000..dfbc0cbd Binary files /dev/null and b/sphinx/build/html/_static/comment.png differ diff --git a/sphinx/build/html/_static/css/badge_only.css b/sphinx/build/html/_static/css/badge_only.css new file mode 100644 index 00000000..e380325b --- /dev/null +++ b/sphinx/build/html/_static/css/badge_only.css @@ -0,0 +1 @@ +.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/sphinx/build/html/_static/css/fonts/Roboto-Slab-Bold.woff b/sphinx/build/html/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/sphinx/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 b/sphinx/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/sphinx/build/html/_static/css/fonts/Roboto-Slab-Regular.woff b/sphinx/build/html/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/sphinx/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 b/sphinx/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/sphinx/build/html/_static/css/fonts/fontawesome-webfont.eot b/sphinx/build/html/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/sphinx/build/html/_static/css/fonts/fontawesome-webfont.svg b/sphinx/build/html/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/sphinx/build/html/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sphinx/build/html/_static/css/fonts/fontawesome-webfont.ttf b/sphinx/build/html/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/sphinx/build/html/_static/css/fonts/fontawesome-webfont.woff b/sphinx/build/html/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/sphinx/build/html/_static/css/fonts/fontawesome-webfont.woff2 b/sphinx/build/html/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/sphinx/build/html/_static/css/fonts/lato-bold-italic.woff b/sphinx/build/html/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/lato-bold-italic.woff differ diff --git a/sphinx/build/html/_static/css/fonts/lato-bold-italic.woff2 b/sphinx/build/html/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/sphinx/build/html/_static/css/fonts/lato-bold.woff b/sphinx/build/html/_static/css/fonts/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/lato-bold.woff differ diff --git a/sphinx/build/html/_static/css/fonts/lato-bold.woff2 b/sphinx/build/html/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/lato-bold.woff2 differ diff --git a/sphinx/build/html/_static/css/fonts/lato-normal-italic.woff b/sphinx/build/html/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/lato-normal-italic.woff differ diff --git a/sphinx/build/html/_static/css/fonts/lato-normal-italic.woff2 b/sphinx/build/html/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/sphinx/build/html/_static/css/fonts/lato-normal.woff b/sphinx/build/html/_static/css/fonts/lato-normal.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/lato-normal.woff differ diff --git a/sphinx/build/html/_static/css/fonts/lato-normal.woff2 b/sphinx/build/html/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/sphinx/build/html/_static/css/fonts/lato-normal.woff2 differ diff --git a/sphinx/build/html/_static/css/theme.css b/sphinx/build/html/_static/css/theme.css new file mode 100644 index 00000000..8cd4f101 --- /dev/null +++ b/sphinx/build/html/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li span.toctree-expand:before,.wy-nav-top a,.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li span.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li span.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li span.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li span.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li span.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:"ï€"}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:"ï€"}.fa-search-plus:before{content:""}.fa-search-minus:before{content:"ï€"}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:"ï€"}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:"ï€"}.fa-map-marker:before{content:"ï"}.fa-adjust:before{content:"ï‚"}.fa-tint:before{content:"ïƒ"}.fa-edit:before,.fa-pencil-square-o:before{content:"ï„"}.fa-share-square-o:before{content:"ï…"}.fa-check-square-o:before{content:"ï†"}.fa-arrows:before{content:"ï‡"}.fa-step-backward:before{content:"ïˆ"}.fa-fast-backward:before{content:"ï‰"}.fa-backward:before{content:"ïŠ"}.fa-play:before{content:"ï‹"}.fa-pause:before{content:"ïŒ"}.fa-stop:before{content:"ï"}.fa-forward:before{content:"ïŽ"}.fa-fast-forward:before{content:"ï"}.fa-step-forward:before{content:"ï‘"}.fa-eject:before{content:"ï’"}.fa-chevron-left:before{content:"ï“"}.fa-chevron-right:before{content:"ï”"}.fa-plus-circle:before{content:"ï•"}.fa-minus-circle:before{content:"ï–"}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:"ï—"}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:"ï˜"}.fa-question-circle:before{content:"ï™"}.fa-info-circle:before{content:"ïš"}.fa-crosshairs:before{content:"ï›"}.fa-times-circle-o:before{content:"ïœ"}.fa-check-circle-o:before{content:"ï"}.fa-ban:before{content:"ïž"}.fa-arrow-left:before{content:"ï "}.fa-arrow-right:before{content:"ï¡"}.fa-arrow-up:before{content:"ï¢"}.fa-arrow-down:before{content:"ï£"}.fa-mail-forward:before,.fa-share:before{content:"ï¤"}.fa-expand:before{content:"ï¥"}.fa-compress:before{content:"ï¦"}.fa-plus:before{content:"ï§"}.fa-minus:before{content:"ï¨"}.fa-asterisk:before{content:"ï©"}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:"ïª"}.fa-gift:before{content:"ï«"}.fa-leaf:before{content:"ï¬"}.fa-fire:before,.icon-fire:before{content:"ï­"}.fa-eye:before{content:"ï®"}.fa-eye-slash:before{content:"ï°"}.fa-exclamation-triangle:before,.fa-warning:before{content:"ï±"}.fa-plane:before{content:"ï²"}.fa-calendar:before{content:"ï³"}.fa-random:before{content:"ï´"}.fa-comment:before{content:"ïµ"}.fa-magnet:before{content:"ï¶"}.fa-chevron-up:before{content:"ï·"}.fa-chevron-down:before{content:"ï¸"}.fa-retweet:before{content:"ï¹"}.fa-shopping-cart:before{content:"ïº"}.fa-folder:before{content:"ï»"}.fa-folder-open:before{content:"ï¼"}.fa-arrows-v:before{content:"ï½"}.fa-arrows-h:before{content:"ï¾"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"ï‚€"}.fa-twitter-square:before{content:"ï‚"}.fa-facebook-square:before{content:"ï‚‚"}.fa-camera-retro:before{content:""}.fa-key:before{content:"ï‚„"}.fa-cogs:before,.fa-gears:before{content:"ï‚…"}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:"ï‚Š"}.fa-sign-out:before{content:"ï‚‹"}.fa-linkedin-square:before{content:"ï‚Œ"}.fa-thumb-tack:before{content:"ï‚"}.fa-external-link:before{content:"ï‚Ž"}.fa-sign-in:before{content:"ï‚"}.fa-trophy:before{content:"ï‚‘"}.fa-github-square:before{content:"ï‚’"}.fa-upload:before{content:"ï‚“"}.fa-lemon-o:before{content:"ï‚”"}.fa-phone:before{content:"ï‚•"}.fa-square-o:before{content:"ï‚–"}.fa-bookmark-o:before{content:"ï‚—"}.fa-phone-square:before{content:""}.fa-twitter:before{content:"ï‚™"}.fa-facebook-f:before,.fa-facebook:before{content:"ï‚š"}.fa-github:before,.icon-github:before{content:"ï‚›"}.fa-unlock:before{content:"ï‚œ"}.fa-credit-card:before{content:"ï‚"}.fa-feed:before,.fa-rss:before{content:"ï‚ž"}.fa-hdd-o:before{content:"ï‚ "}.fa-bullhorn:before{content:"ï‚¡"}.fa-bell:before{content:""}.fa-certificate:before{content:"ï‚£"}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:"ï‚¥"}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:"ï‚©"}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:"ï‚«"}.fa-globe:before{content:""}.fa-wrench:before{content:"ï‚­"}.fa-tasks:before{content:"ï‚®"}.fa-filter:before{content:"ï‚°"}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:"ïƒ"}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:"ïƒ"}.fa-table:before{content:""}.fa-magic:before{content:"ïƒ"}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:"ïƒ"}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:"ï‚¢"}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:"ï„€"}.fa-angle-double-right:before{content:"ï„"}.fa-angle-double-up:before{content:"ï„‚"}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:"ï„„"}.fa-angle-right:before{content:"ï„…"}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:"ï„Š"}.fa-mobile-phone:before,.fa-mobile:before{content:"ï„‹"}.fa-circle-o:before{content:"ï„Œ"}.fa-quote-left:before{content:"ï„"}.fa-quote-right:before{content:"ï„Ž"}.fa-spinner:before{content:"ï„"}.fa-circle:before{content:"ï„‘"}.fa-mail-reply:before,.fa-reply:before{content:"ï„’"}.fa-github-alt:before{content:"ï„“"}.fa-folder-o:before{content:"ï„”"}.fa-folder-open-o:before{content:"ï„•"}.fa-smile-o:before{content:""}.fa-frown-o:before{content:"ï„™"}.fa-meh-o:before{content:"ï„š"}.fa-gamepad:before{content:"ï„›"}.fa-keyboard-o:before{content:"ï„œ"}.fa-flag-o:before{content:"ï„"}.fa-flag-checkered:before{content:"ï„ž"}.fa-terminal:before{content:"ï„ "}.fa-code:before{content:"ï„¡"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"ï„¢"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"ï„£"}.fa-location-arrow:before{content:""}.fa-crop:before{content:"ï„¥"}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:"ï„©"}.fa-exclamation:before{content:""}.fa-superscript:before{content:"ï„«"}.fa-subscript:before{content:""}.fa-eraser:before{content:"ï„­"}.fa-puzzle-piece:before{content:"ï„®"}.fa-microphone:before{content:"ï„°"}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:"ï„´"}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:"ï„·"}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:"ï„»"}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:"ï…€"}.fa-ellipsis-h:before{content:"ï…"}.fa-ellipsis-v:before{content:"ï…‚"}.fa-rss-square:before{content:"ï…ƒ"}.fa-play-circle:before{content:"ï…„"}.fa-ticket:before{content:"ï……"}.fa-minus-square:before{content:"ï…†"}.fa-minus-square-o:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before{content:"ï…‡"}.fa-level-up:before{content:"ï…ˆ"}.fa-level-down:before{content:"ï…‰"}.fa-check-square:before{content:"ï…Š"}.fa-pencil-square:before{content:"ï…‹"}.fa-external-link-square:before{content:"ï…Œ"}.fa-share-square:before{content:"ï…"}.fa-compass:before{content:"ï…Ž"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"ï…"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"ï…‘"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"ï…’"}.fa-eur:before,.fa-euro:before{content:"ï…“"}.fa-gbp:before{content:"ï…”"}.fa-dollar:before,.fa-usd:before{content:"ï…•"}.fa-inr:before,.fa-rupee:before{content:"ï…–"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"ï…—"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"ï…˜"}.fa-krw:before,.fa-won:before{content:"ï…™"}.fa-bitcoin:before,.fa-btc:before{content:"ï…š"}.fa-file:before{content:"ï…›"}.fa-file-text:before{content:"ï…œ"}.fa-sort-alpha-asc:before{content:"ï…"}.fa-sort-alpha-desc:before{content:"ï…ž"}.fa-sort-amount-asc:before{content:"ï… "}.fa-sort-amount-desc:before{content:"ï…¡"}.fa-sort-numeric-asc:before{content:"ï…¢"}.fa-sort-numeric-desc:before{content:"ï…£"}.fa-thumbs-up:before{content:"ï…¤"}.fa-thumbs-down:before{content:"ï…¥"}.fa-youtube-square:before{content:"ï…¦"}.fa-youtube:before{content:"ï…§"}.fa-xing:before{content:"ï…¨"}.fa-xing-square:before{content:"ï…©"}.fa-youtube-play:before{content:"ï…ª"}.fa-dropbox:before{content:"ï…«"}.fa-stack-overflow:before{content:"ï…¬"}.fa-instagram:before{content:"ï…­"}.fa-flickr:before{content:"ï…®"}.fa-adn:before{content:"ï…°"}.fa-bitbucket:before,.icon-bitbucket:before{content:"ï…±"}.fa-bitbucket-square:before{content:"ï…²"}.fa-tumblr:before{content:"ï…³"}.fa-tumblr-square:before{content:"ï…´"}.fa-long-arrow-down:before{content:"ï…µ"}.fa-long-arrow-up:before{content:"ï…¶"}.fa-long-arrow-left:before{content:"ï…·"}.fa-long-arrow-right:before{content:"ï…¸"}.fa-apple:before{content:"ï…¹"}.fa-windows:before{content:"ï…º"}.fa-android:before{content:"ï…»"}.fa-linux:before{content:"ï…¼"}.fa-dribbble:before{content:"ï…½"}.fa-skype:before{content:"ï…¾"}.fa-foursquare:before{content:""}.fa-trello:before{content:"ï†"}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:"ï†"}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:"ï†"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:"ï†"}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:"ï‡"}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"ï‡"}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"ï‡"}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:"ï‡"}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:"ïˆ"}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:"ïˆ"}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:"ïˆ"}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:"ïˆ"}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"ï‰"}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:"ï‰"}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:"ï‰"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:"ï‰"}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:"ïŠ"}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:"ïŠ"}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:"ïŠ"}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:"ïŠ"}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:"ï‹€"}.fa-id-badge:before{content:"ï‹"}.fa-drivers-license:before,.fa-id-card:before{content:"ï‹‚"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:"ï‹„"}.fa-free-code-camp:before{content:"ï‹…"}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"ï‹Š"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"ï‹‹"}.fa-shower:before{content:"ï‹Œ"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:"ï‹"}.fa-podcast:before{content:"ï‹Ž"}.fa-window-maximize:before{content:"ï‹"}.fa-window-minimize:before{content:"ï‹‘"}.fa-window-restore:before{content:"ï‹’"}.fa-times-rectangle:before,.fa-window-close:before{content:"ï‹“"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"ï‹”"}.fa-bandcamp:before{content:"ï‹•"}.fa-grav:before{content:"ï‹–"}.fa-etsy:before{content:"ï‹—"}.fa-imdb:before{content:""}.fa-ravelry:before{content:"ï‹™"}.fa-eercast:before{content:"ï‹š"}.fa-microchip:before{content:"ï‹›"}.fa-snowflake-o:before{content:"ï‹œ"}.fa-superpowers:before{content:"ï‹"}.fa-wpexplorer:before{content:"ï‹ž"}.fa-meetup:before{content:"ï‹ "}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li span.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li span.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li span.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p.caption .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.btn .wy-menu-vertical li span.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p.caption .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.nav .wy-menu-vertical li span.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p.caption .btn .headerlink,.rst-content p.caption .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li span.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol li,.rst-content ol.arabic li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content ol.arabic li p:last-child,.rst-content ol.arabic li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.rst-content .wy-breadcrumbs li tt,.wy-breadcrumbs li .rst-content tt,.wy-breadcrumbs li code{padding:5px;border:none;background:none}.rst-content .wy-breadcrumbs li tt.literal,.wy-breadcrumbs li .rst-content tt.literal,.wy-breadcrumbs li code.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover span.toctree-expand,.wy-menu-vertical li.on a:hover span.toctree-expand{color:grey}.wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover span.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover span.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp{user-select:none;pointer-events:none}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink{visibility:hidden;font-size:14px}.rst-content .code-block-caption .headerlink:after,.rst-content .toctree-wrapper>p.caption .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after{content:"\f0c1";font-family:FontAwesome}.rst-content .code-block-caption:hover .headerlink:after,.rst-content .toctree-wrapper>p.caption:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .hlist{width:100%}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl dt span.classifier:before{content:" : "}html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.field-list>dt:after,html.writer-html5 .rst-content dl.footnote>dt:after{content:":"}html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.footnote>dt>span.brackets{margin-right:.5rem}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{font-style:italic}html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.footnote>dd p,html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.field-list)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dl:not(.field-list)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code,html.writer-html4 .rst-content dl:not(.docutils) tt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/sphinx/build/html/_static/doctools.js b/sphinx/build/html/_static/doctools.js new file mode 100644 index 00000000..344db17d --- /dev/null +++ b/sphinx/build/html/_static/doctools.js @@ -0,0 +1,315 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var bbox = span.getBBox(); + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + var parentOfText = node.parentNode.parentNode; + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/sphinx/build/html/_static/documentation_options.js b/sphinx/build/html/_static/documentation_options.js new file mode 100644 index 00000000..7f34fa0f --- /dev/null +++ b/sphinx/build/html/_static/documentation_options.js @@ -0,0 +1,10 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: 'v0.4.0', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, +}; \ No newline at end of file diff --git a/sphinx/build/html/_static/down-pressed.png b/sphinx/build/html/_static/down-pressed.png new file mode 100644 index 00000000..5756c8ca Binary files /dev/null and b/sphinx/build/html/_static/down-pressed.png differ diff --git a/sphinx/build/html/_static/down.png b/sphinx/build/html/_static/down.png new file mode 100644 index 00000000..1b3bdad2 Binary files /dev/null and b/sphinx/build/html/_static/down.png differ diff --git a/sphinx/build/html/_static/file.png b/sphinx/build/html/_static/file.png new file mode 100644 index 00000000..a858a410 Binary files /dev/null and b/sphinx/build/html/_static/file.png differ diff --git a/sphinx/build/html/_static/fonts/FontAwesome.otf b/sphinx/build/html/_static/fonts/FontAwesome.otf new file mode 100644 index 00000000..401ec0f3 Binary files /dev/null and b/sphinx/build/html/_static/fonts/FontAwesome.otf differ diff --git a/sphinx/build/html/_static/fonts/Inconsolata-Bold.ttf b/sphinx/build/html/_static/fonts/Inconsolata-Bold.ttf new file mode 100644 index 00000000..809c1f58 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Inconsolata-Bold.ttf differ diff --git a/sphinx/build/html/_static/fonts/Inconsolata-Regular.ttf b/sphinx/build/html/_static/fonts/Inconsolata-Regular.ttf new file mode 100644 index 00000000..fc981ce7 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Inconsolata-Regular.ttf differ diff --git a/sphinx/build/html/_static/fonts/Inconsolata.ttf b/sphinx/build/html/_static/fonts/Inconsolata.ttf new file mode 100644 index 00000000..4b8a36d2 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Inconsolata.ttf differ diff --git a/sphinx/build/html/_static/fonts/Lato-Bold.ttf b/sphinx/build/html/_static/fonts/Lato-Bold.ttf new file mode 100644 index 00000000..1d23c706 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato-Bold.ttf differ diff --git a/sphinx/build/html/_static/fonts/Lato-Regular.ttf b/sphinx/build/html/_static/fonts/Lato-Regular.ttf new file mode 100644 index 00000000..0f3d0f83 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato-Regular.ttf differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-bold.eot b/sphinx/build/html/_static/fonts/Lato/lato-bold.eot new file mode 100644 index 00000000..3361183a Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-bold.eot differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-bold.ttf b/sphinx/build/html/_static/fonts/Lato/lato-bold.ttf new file mode 100644 index 00000000..29f691d5 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-bold.ttf differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-bold.woff b/sphinx/build/html/_static/fonts/Lato/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-bold.woff differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-bold.woff2 b/sphinx/build/html/_static/fonts/Lato/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-bold.woff2 differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.eot b/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.eot new file mode 100644 index 00000000..3d415493 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.eot differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.ttf b/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.ttf new file mode 100644 index 00000000..f402040b Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.ttf differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.woff b/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.woff differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.woff2 b/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-bolditalic.woff2 differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-italic.eot b/sphinx/build/html/_static/fonts/Lato/lato-italic.eot new file mode 100644 index 00000000..3f826421 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-italic.eot differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-italic.ttf b/sphinx/build/html/_static/fonts/Lato/lato-italic.ttf new file mode 100644 index 00000000..b4bfc9b2 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-italic.ttf differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-italic.woff b/sphinx/build/html/_static/fonts/Lato/lato-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-italic.woff differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-italic.woff2 b/sphinx/build/html/_static/fonts/Lato/lato-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-italic.woff2 differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-regular.eot b/sphinx/build/html/_static/fonts/Lato/lato-regular.eot new file mode 100644 index 00000000..11e3f2a5 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-regular.eot differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-regular.ttf b/sphinx/build/html/_static/fonts/Lato/lato-regular.ttf new file mode 100644 index 00000000..74decd9e Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-regular.ttf differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-regular.woff b/sphinx/build/html/_static/fonts/Lato/lato-regular.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-regular.woff differ diff --git a/sphinx/build/html/_static/fonts/Lato/lato-regular.woff2 b/sphinx/build/html/_static/fonts/Lato/lato-regular.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Lato/lato-regular.woff2 differ diff --git a/sphinx/build/html/_static/fonts/Roboto-Slab-Bold.woff b/sphinx/build/html/_static/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Roboto-Slab-Bold.woff differ diff --git a/sphinx/build/html/_static/fonts/Roboto-Slab-Bold.woff2 b/sphinx/build/html/_static/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/sphinx/build/html/_static/fonts/Roboto-Slab-Light.woff b/sphinx/build/html/_static/fonts/Roboto-Slab-Light.woff new file mode 100644 index 00000000..337d2871 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Roboto-Slab-Light.woff differ diff --git a/sphinx/build/html/_static/fonts/Roboto-Slab-Light.woff2 b/sphinx/build/html/_static/fonts/Roboto-Slab-Light.woff2 new file mode 100644 index 00000000..20398aff Binary files /dev/null and b/sphinx/build/html/_static/fonts/Roboto-Slab-Light.woff2 differ diff --git a/sphinx/build/html/_static/fonts/Roboto-Slab-Regular.woff b/sphinx/build/html/_static/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/sphinx/build/html/_static/fonts/Roboto-Slab-Regular.woff differ diff --git a/sphinx/build/html/_static/fonts/Roboto-Slab-Regular.woff2 b/sphinx/build/html/_static/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/sphinx/build/html/_static/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/sphinx/build/html/_static/fonts/Roboto-Slab-Thin.woff b/sphinx/build/html/_static/fonts/Roboto-Slab-Thin.woff new file mode 100644 index 00000000..6b30ea63 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Roboto-Slab-Thin.woff differ diff --git a/sphinx/build/html/_static/fonts/Roboto-Slab-Thin.woff2 b/sphinx/build/html/_static/fonts/Roboto-Slab-Thin.woff2 new file mode 100644 index 00000000..328f5bb0 Binary files /dev/null and b/sphinx/build/html/_static/fonts/Roboto-Slab-Thin.woff2 differ diff --git a/sphinx/build/html/_static/fonts/RobotoSlab-Bold.ttf b/sphinx/build/html/_static/fonts/RobotoSlab-Bold.ttf new file mode 100644 index 00000000..df5d1df2 Binary files /dev/null and b/sphinx/build/html/_static/fonts/RobotoSlab-Bold.ttf differ diff --git a/sphinx/build/html/_static/fonts/RobotoSlab-Regular.ttf b/sphinx/build/html/_static/fonts/RobotoSlab-Regular.ttf new file mode 100644 index 00000000..eb52a790 Binary files /dev/null and b/sphinx/build/html/_static/fonts/RobotoSlab-Regular.ttf differ diff --git a/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot new file mode 100644 index 00000000..79dc8efe Binary files /dev/null and b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot differ diff --git a/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf new file mode 100644 index 00000000..df5d1df2 Binary files /dev/null and b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf differ diff --git a/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff differ diff --git a/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 differ diff --git a/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot new file mode 100644 index 00000000..2f7ca78a Binary files /dev/null and b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot differ diff --git a/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf new file mode 100644 index 00000000..eb52a790 Binary files /dev/null and b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf differ diff --git a/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff differ diff --git a/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/sphinx/build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 differ diff --git a/sphinx/build/html/_static/fonts/fontawesome-webfont.eot b/sphinx/build/html/_static/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/sphinx/build/html/_static/fonts/fontawesome-webfont.eot differ diff --git a/sphinx/build/html/_static/fonts/fontawesome-webfont.svg b/sphinx/build/html/_static/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/sphinx/build/html/_static/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sphinx/build/html/_static/fonts/fontawesome-webfont.ttf b/sphinx/build/html/_static/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/sphinx/build/html/_static/fonts/fontawesome-webfont.ttf differ diff --git a/sphinx/build/html/_static/fonts/fontawesome-webfont.woff b/sphinx/build/html/_static/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/sphinx/build/html/_static/fonts/fontawesome-webfont.woff differ diff --git a/sphinx/build/html/_static/fonts/fontawesome-webfont.woff2 b/sphinx/build/html/_static/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/sphinx/build/html/_static/fonts/fontawesome-webfont.woff2 differ diff --git a/sphinx/build/html/_static/fonts/lato-bold-italic.woff b/sphinx/build/html/_static/fonts/lato-bold-italic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/sphinx/build/html/_static/fonts/lato-bold-italic.woff differ diff --git a/sphinx/build/html/_static/fonts/lato-bold-italic.woff2 b/sphinx/build/html/_static/fonts/lato-bold-italic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/sphinx/build/html/_static/fonts/lato-bold-italic.woff2 differ diff --git a/sphinx/build/html/_static/fonts/lato-bold.woff b/sphinx/build/html/_static/fonts/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/sphinx/build/html/_static/fonts/lato-bold.woff differ diff --git a/sphinx/build/html/_static/fonts/lato-bold.woff2 b/sphinx/build/html/_static/fonts/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/sphinx/build/html/_static/fonts/lato-bold.woff2 differ diff --git a/sphinx/build/html/_static/fonts/lato-normal-italic.woff b/sphinx/build/html/_static/fonts/lato-normal-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/sphinx/build/html/_static/fonts/lato-normal-italic.woff differ diff --git a/sphinx/build/html/_static/fonts/lato-normal-italic.woff2 b/sphinx/build/html/_static/fonts/lato-normal-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/sphinx/build/html/_static/fonts/lato-normal-italic.woff2 differ diff --git a/sphinx/build/html/_static/fonts/lato-normal.woff b/sphinx/build/html/_static/fonts/lato-normal.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/sphinx/build/html/_static/fonts/lato-normal.woff differ diff --git a/sphinx/build/html/_static/fonts/lato-normal.woff2 b/sphinx/build/html/_static/fonts/lato-normal.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/sphinx/build/html/_static/fonts/lato-normal.woff2 differ diff --git a/sphinx/build/html/_static/jquery.js b/sphinx/build/html/_static/jquery.js new file mode 100644 index 00000000..7e329108 --- /dev/null +++ b/sphinx/build/html/_static/jquery.js @@ -0,0 +1,10365 @@ +/*! + * jQuery JavaScript Library v3.3.1-dfsg + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2019-04-19T06:52Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. + + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + + + + var preservedScriptAttributes = { + type: true, + src: true, + noModule: true + }; + + function DOMEval( code, doc, node ) { + doc = doc || document; + + var i, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + if ( node[ i ] ) { + script[ i ] = node[ i ]; + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.3.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + div.style.position = "absolute"; + scrollboxSizeVal = div.offsetWidth === 36 || "absolute"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + ) ); + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + val = curCSS( elem, dimension, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox; + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = valueIsBorderBox && + ( support.boxSizingReliable() || val === elem.style[ dimension ] ); + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + if ( val === "auto" || + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) { + + val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ]; + + // offsetWidth/offsetHeight provide border-box values + valueIsBorderBox = true; + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra && boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ); + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && support.scrollboxSize() === styles.position ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = Date.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    libm2k Examples¶

    +

    Generating data using the ADALM2000 DAC and acquiring it using the ADALM2000 ADC

    +
    # This example assumes the following connections:
    +# W1 -> 1+
    +# W2 -> 2+
    +# GND -> 1-
    +# GND -> 2-
    +#
    +# The application will generate a sine and triangular wave on W1 and W2. The signal is fed back into the analog input
    +# and the voltage values are displayed on the screen
    +
    +import libm2k
    +import matplotlib.pyplot as plt
    +import time
    +import numpy as np
    +
    +ctx=libm2k.m2kOpen()
    +if ctx is None:
    +      print("Connection Error: No ADALM2000 device available/connected to your PC.")
    +      exit(1)
    +
    +ctx.calibrateADC()
    +ctx.calibrateDAC()
    +
    +ain=ctx.getAnalogIn()
    +aout=ctx.getAnalogOut()
    +trig=ain.getTrigger()
    +
    +ain.enableChannel(0,True)
    +ain.enableChannel(1,True)
    +ain.setSampleRate(100000)
    +ain.setRange(0,-10,10)
    +
    +### uncomment the following block to enable triggering
    +#trig.setAnalogSource(0) # Channel 0 as source
    +#trig.setAnalogCondition(0,libm2k.RISING_EDGE_ANALOG)
    +#trig.setAnalogLevel(0,0.5)  # Set trigger level at 0.5
    +#trig.setAnalogDelay(0) # Trigger is centered
    +#trig.setAnalogMode(1, libm2k.ANALOG)
    +
    +aout.setSampleRate(0, 750000)
    +aout.setSampleRate(1, 750000)
    +aout.enableChannel(0, True)
    +aout.enableChannel(1, True)
    +
    +x=np.linspace(-np.pi,np.pi,1024)
    +buffer1=np.linspace(-2.0,2.00,1024)
    +buffer2=np.sin(x)
    +
    +buffer = [buffer1, buffer2]
    +
    +aout.setCyclic(True)
    +aout.push(buffer)
    +
    +for i in range(10): # gets 10 triggered samples then quits
    +    data = ain.getSamples(1000)
    +    plt.plot(data[0])
    +    plt.plot(data[1])
    +    plt.show()
    +    time.sleep(0.1)
    +
    +libm2k.contextClose(ctx)
    +
    +
    +

    Other Python examples are available in the source repository

    +
    + + +
    + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + \ No newline at end of file diff --git a/sphinx/build/html/genindex.html b/sphinx/build/html/genindex.html new file mode 100644 index 00000000..8f126262 --- /dev/null +++ b/sphinx/build/html/genindex.html @@ -0,0 +1,206 @@ + + + + + + + + + + + Index — libm2k v0.4.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
      + +
    • »
    • + +
    • Index
    • + + +
    • + + + +
    • + +
    + + +
    +
    +
    +
    + + +

    Index

    + +
    + +
    + + +
    + +
    +
    + +
    + +
    +

    + © Copyright 2020, Analog Devices Inc.. + +

    +
    + + + + Built with Sphinx using a + + theme + + provided by Read the Docs. + +
    +
    +
    + +
    + +
    + + + + + + + + + + + \ No newline at end of file diff --git a/sphinx/build/html/index.html b/sphinx/build/html/index.html new file mode 100644 index 00000000..0672d9da --- /dev/null +++ b/sphinx/build/html/index.html @@ -0,0 +1,222 @@ + + + + + + + + + + libm2k documentation - Library for interfacing with the ADALM2000 — libm2k v0.4.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
      + +
    • »
    • + +
    • libm2k documentation - Library for interfacing with the ADALM2000
    • + + +
    • + + + View page source + + +
    • + +
    + + +
    +
    +
    +
    + +
    +

    libm2k documentation - Library for interfacing with the ADALM2000¶

    + +
    +
    +

    Indices and tables¶

    + +
    + + +
    + +
    +
    + + +
    + +
    +

    + © Copyright 2020, Analog Devices Inc.. + +

    +
    + + + + Built with Sphinx using a + + theme + + provided by Read the Docs. + +
    +
    +
    + +
    + +
    + + + + + + + + + + + \ No newline at end of file diff --git a/sphinx/build/html/libm2k.html b/sphinx/build/html/libm2k.html new file mode 100644 index 00000000..4541b296 --- /dev/null +++ b/sphinx/build/html/libm2k.html @@ -0,0 +1,210 @@ + + + + + + + + + + libm2k Module — libm2k v0.4.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    +
    +
    + +
    +

    libm2k Module¶

    +
    + + +
    + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + \ No newline at end of file diff --git a/sphinx/build/html/objects.inv b/sphinx/build/html/objects.inv new file mode 100644 index 00000000..dd819809 --- /dev/null +++ b/sphinx/build/html/objects.inv @@ -0,0 +1,6 @@ +# Sphinx inventory version 2 +# Project: libm2k +# Version: +# The remainder of this file is compressed using zlib. +xÚmŽM +ƒ0…÷9Å\Àb]v'´‹‚B¡'ˆf4¡ù‘d¤zûj©BwÃ{ïûœ¸4$.µSv’d4h՘ⷲ­²§/¡yƒze¶42÷õd¿Yïɺ£AKœ”³A¥Ïý óËšÐw¼U¶‡·" $ÊkYÕEžç,vú˜üµ£Ffœøóó0g[¡¸Nß侕G"fqüŒýƒ÷È>]wqÅ \ No newline at end of file diff --git a/sphinx/build/html/py-modindex.html b/sphinx/build/html/py-modindex.html new file mode 100644 index 00000000..56f07d5f --- /dev/null +++ b/sphinx/build/html/py-modindex.html @@ -0,0 +1,228 @@ + + + + + + + + + + Python Module Index — libm2k v0.3.2 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + +
    + +
      + +
    • »
    • + +
    • Python Module Index
    • + + +
    • + +
    • + +
    + + +
    +
    +
    +
    + + +

    Python Module Index

    + +
    + l +
    + + + + + + + +
     
    + l
    + libm2k +
    + + +
    + +
    +
    + + +
    + +
    +

    + + © Copyright 2020, Analog Devices Inc. + +

    +
    + + + + Built with Sphinx using a + + theme + + provided by Read the Docs. + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + \ No newline at end of file diff --git a/sphinx/build/html/search.html b/sphinx/build/html/search.html new file mode 100644 index 00000000..20264305 --- /dev/null +++ b/sphinx/build/html/search.html @@ -0,0 +1,218 @@ + + + + + + + + + + Search — libm2k v0.4.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
      + +
    • »
    • + +
    • Search
    • + + +
    • + +
    • + +
    + + +
    +
    +
    +
    + + + + +
    + +
    + +
    + +
    +
    + +
    + +
    +

    + © Copyright 2020, Analog Devices Inc.. + +

    +
    + + + + Built with Sphinx using a + + theme + + provided by Read the Docs. + +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sphinx/build/html/searchindex.js b/sphinx/build/html/searchindex.js new file mode 100644 index 00000000..35708398 --- /dev/null +++ b/sphinx/build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["examples","index","libm2k"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:55},filenames:["examples.rst","index.rst","libm2k.rst"],objects:{},objnames:{},objtypes:{},terms:{"import":0,"true":0,The:0,acquir:0,adalm2000:0,adc:0,ain:0,analog:0,aout:0,applic:0,assum:0,avail:0,back:0,block:0,buffer1:0,buffer2:0,buffer:0,calibrateadc:0,calibratedac:0,center:0,channel:0,connect:0,contextclos:0,ctx:0,dac:0,data:0,devic:0,displai:0,enabl:0,enablechannel:0,error:0,exampl:1,exit:0,fed:0,follow:0,gener:0,get:0,getanalogin:0,getanalogout:0,getsampl:0,gettrigg:0,gnd:0,index:1,input:0,level:0,linspac:0,m2kopen:0,matplotlib:0,modul:1,none:0,numpi:0,other:0,page:1,plot:0,plt:0,print:0,push:0,pyplot:0,python:0,quit:0,rang:0,repositori:0,rising_edge_analog:0,sampl:0,screen:0,search:1,set:0,setanalogcondit:0,setanalogdelai:0,setanaloglevel:0,setanalogmod:0,setanalogsourc:0,setcycl:0,setrang:0,setsampler:0,show:0,signal:0,sin:0,sine:0,sleep:0,sourc:0,thi:0,time:0,triangular:0,trig:0,trigger:0,uncom:0,using:0,valu:0,voltag:0,wave:0,your:0},titles:["libm2k Examples","libm2k documentation - Library for interfacing with the ADALM2000","libm2k Module"],titleterms:{adalm2000:1,document:1,exampl:0,indic:1,interfac:1,libm2k:[0,1,2],librari:1,modul:2,tabl:1}}) \ No newline at end of file diff --git a/sphinx/make.bat b/sphinx/make.bat new file mode 100644 index 00000000..6f4e2ffc --- /dev/null +++ b/sphinx/make.bat @@ -0,0 +1,55 @@ +@ECHO OFF +REM +REM Copyright (c) 2024 Analog Devices Inc. +REM +REM This file is part of libm2k +REM (see http://www.github.com/analogdevicesinc/libm2k). +REM +REM This program is free software; you can redistribute it and/or modify +REM it under the terms of the GNU Lesser General Public License as published by +REM the Free Software Foundation, either version 2.1 of the License, or +REM (at your option) any later version. +REM +REM This program is distributed in the hope that it will be useful, +REM but WITHOUT ANY WARRANTY; without even the implied warranty of +REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +REM GNU Lesser General Public License for more details. +REM +REM You should have received a copy of the GNU Lesser General Public License +REM along with this program. If not, see . +REM +@ECHO ON + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/sphinx/source/conf.py.in b/sphinx/source/conf.py.in new file mode 100644 index 00000000..a20fdd5c --- /dev/null +++ b/sphinx/source/conf.py.in @@ -0,0 +1,59 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +import sphinx_rtd_theme + +# -- Project information ----------------------------------------------------- + +project = 'libm2k' +copyright = '2020, Analog Devices Inc.' +author = 'Analog Devices Inc.' + +# The full version, including alpha/beta/rc tags +release = 'v@LIBM2K_VERSION@' + + +# The master toctree document. +master_doc = "index" + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ["sphinx.ext.autodoc", "sphinx_rtd_theme"] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +#html_static_path = ['_static'] diff --git a/sphinx/source/examples.rst b/sphinx/source/examples.rst new file mode 100644 index 00000000..1ae81672 --- /dev/null +++ b/sphinx/source/examples.rst @@ -0,0 +1,71 @@ +libm2k Examples +=================== + + +Generating data using the ADALM2000 DAC and acquiring it using the ADALM2000 ADC + +.. code-block:: python + + # This example assumes the following connections: + # W1 -> 1+ + # W2 -> 2+ + # GND -> 1- + # GND -> 2- + # + # The application will generate a sine and triangular wave on W1 and W2. The signal is fed back into the analog input + # and the voltage values are displayed on the screen + + import libm2k + import matplotlib.pyplot as plt + import time + import numpy as np + + ctx=libm2k.m2kOpen() + if ctx is None: + print("Connection Error: No ADALM2000 device available/connected to your PC.") + exit(1) + + ctx.calibrateADC() + ctx.calibrateDAC() + + ain=ctx.getAnalogIn() + aout=ctx.getAnalogOut() + trig=ain.getTrigger() + + ain.enableChannel(0,True) + ain.enableChannel(1,True) + ain.setSampleRate(100000) + ain.setRange(0,-10,10) + + ### uncomment the following block to enable triggering + #trig.setAnalogSource(0) # Channel 0 as source + #trig.setAnalogCondition(0,libm2k.RISING_EDGE_ANALOG) + #trig.setAnalogLevel(0,0.5) # Set trigger level at 0.5 + #trig.setAnalogDelay(0) # Trigger is centered + #trig.setAnalogMode(1, libm2k.ANALOG) + + aout.setSampleRate(0, 750000) + aout.setSampleRate(1, 750000) + aout.enableChannel(0, True) + aout.enableChannel(1, True) + + x=np.linspace(-np.pi,np.pi,1024) + buffer1=np.linspace(-2.0,2.00,1024) + buffer2=np.sin(x) + + buffer = [buffer1, buffer2] + + aout.setCyclic(True) + aout.push(buffer) + + for i in range(10): # gets 10 triggered samples then quits + data = ain.getSamples(1000) + plt.plot(data[0]) + plt.plot(data[1]) + plt.show() + time.sleep(0.1) + + libm2k.contextClose(ctx) + + +Other Python examples are available in the `source repository `_ diff --git a/sphinx/source/index.rst b/sphinx/source/index.rst new file mode 100644 index 00000000..46a865b7 --- /dev/null +++ b/sphinx/source/index.rst @@ -0,0 +1,21 @@ +.. libm2k documentation master file, created by + sphinx-quickstart on Fri Apr 10 14:15:12 2020. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +libm2k documentation - Library for interfacing with the ADALM2000 +==================================================================== + +.. toctree:: + :maxdepth: 2 + + libm2k + examples + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/sphinx/source/libm2k.rst b/sphinx/source/libm2k.rst new file mode 100644 index 00000000..c6864f5a --- /dev/null +++ b/sphinx/source/libm2k.rst @@ -0,0 +1,7 @@ +libm2k Module +============= + +.. automodule:: libm2k + :members: + :undoc-members: + :show-inheritance: diff --git a/splitbar.png b/splitbar.png new file mode 100644 index 00000000..fe895f2c Binary files /dev/null and b/splitbar.png differ diff --git a/structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s-members.html b/structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s-members.html new file mode 100644 index 00000000..143e7e2e --- /dev/null +++ b/structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s-members.html @@ -0,0 +1,91 @@ + + + + + + + +libm2k: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    libm2k +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    libm2k::CALIBRATION_PARAMETERS Member List
    +
    + + + + + diff --git a/structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html b/structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html new file mode 100644 index 00000000..c90af2d1 --- /dev/null +++ b/structlibm2k_1_1_c_a_l_i_b_r_a_t_i_o_n___p_a_r_a_m_e_t_e_r_s.html @@ -0,0 +1,129 @@ + + + + + + + +libm2k: libm2k::CALIBRATION_PARAMETERS Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libm2k +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    libm2k::CALIBRATION_PARAMETERS Struct Reference
    +
    +
    + +

    Calibration parameters of m2k. + More...

    + +

    #include <libm2k/enums.hpp>

    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +int adc_offset_ch_1
     ADC calibration offset - channel 1.
     
    +int adc_offset_ch_2
     ADC calibration offset - channel 2.
     
    +double adc_gain_ch_1
     ADC calibration gain - channel 1.
     
    +double adc_gain_ch_2
     ADC calibration gain - channel 2.
     
    +int dac_a_offset
     DAC calibration offset - channel 1.
     
    +int dac_b_offset
     DAC calibration offset - channel 2.
     
    +double dac_a_gain
     DAC calibration gain - channel 1.
     
    +double dac_b_gain
     DAC calibration gain - channel 2.
     
    +

    Detailed Description

    +

    Calibration parameters of m2k.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o-members.html b/structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o-members.html new file mode 100644 index 00000000..ce0d2d5a --- /dev/null +++ b/structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o-members.html @@ -0,0 +1,89 @@ + + + + + + + +libm2k: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    libm2k +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    libm2k::CONTEXT_INFO Member List
    +
    + + + + + diff --git a/structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html b/structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html new file mode 100644 index 00000000..26586afa --- /dev/null +++ b/structlibm2k_1_1_c_o_n_t_e_x_t___i_n_f_o.html @@ -0,0 +1,121 @@ + + + + + + + +libm2k: libm2k::CONTEXT_INFO Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libm2k +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    libm2k::CONTEXT_INFO Struct Reference
    +
    +
    + +

    Additional information about the context. + More...

    + +

    #include <libm2k/enums.hpp>

    + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +std::string id_vendor
     Vendor ID extracted from IIO context.
     
    +std::string id_product
     Product ID extracted from IIO context.
     
    +std::string manufacturer
     Manufacturer extracted from IIO context.
     
    +std::string product
     Product name extracted from IIO context.
     
    +std::string serial
     Serial number.
     
    +std::string uri
     IIO context URI.
     
    +

    Detailed Description

    +

    Additional information about the context.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structlibm2k_1_1_i_i_o___c_o_n_t_e_x_t___v_e_r_s_i_o_n-members.html b/structlibm2k_1_1_i_i_o___c_o_n_t_e_x_t___v_e_r_s_i_o_n-members.html new file mode 100644 index 00000000..a6d94ff2 --- /dev/null +++ b/structlibm2k_1_1_i_i_o___c_o_n_t_e_x_t___v_e_r_s_i_o_n-members.html @@ -0,0 +1,86 @@ + + + + + + + +libm2k: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    libm2k +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    libm2k::IIO_CONTEXT_VERSION Member List
    +
    +
    + +

    This is the complete list of members for libm2k::IIO_CONTEXT_VERSION, including all inherited members.

    + + + + +
    git_taglibm2k::IIO_CONTEXT_VERSION
    majorlibm2k::IIO_CONTEXT_VERSION
    minorlibm2k::IIO_CONTEXT_VERSION
    + + + + diff --git a/structlibm2k_1_1_i_i_o___c_o_n_t_e_x_t___v_e_r_s_i_o_n.html b/structlibm2k_1_1_i_i_o___c_o_n_t_e_x_t___v_e_r_s_i_o_n.html new file mode 100644 index 00000000..6d9ce978 --- /dev/null +++ b/structlibm2k_1_1_i_i_o___c_o_n_t_e_x_t___v_e_r_s_i_o_n.html @@ -0,0 +1,109 @@ + + + + + + + +libm2k: libm2k::IIO_CONTEXT_VERSION Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libm2k +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    libm2k::IIO_CONTEXT_VERSION Struct Reference
    +
    +
    + +

    The version of the backend. + More...

    + +

    #include <libm2k/enums.hpp>

    + + + + + + + + + + + +

    +Public Attributes

    +unsigned int major
     major version
     
    +unsigned int minor
     minor version
     
    +char git_tag [8]
     git tag
     
    +

    Detailed Description

    +

    The version of the backend.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structlibm2k_1_1_s_e_t_t_i_n_g_s-members.html b/structlibm2k_1_1_s_e_t_t_i_n_g_s-members.html new file mode 100644 index 00000000..6fa3e0d9 --- /dev/null +++ b/structlibm2k_1_1_s_e_t_t_i_n_g_s-members.html @@ -0,0 +1,91 @@ + + + + + + + +libm2k: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    libm2k +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    libm2k::SETTINGS Member List
    +
    + + + + + diff --git a/structlibm2k_1_1_s_e_t_t_i_n_g_s.html b/structlibm2k_1_1_s_e_t_t_i_n_g_s.html new file mode 100644 index 00000000..33280c67 --- /dev/null +++ b/structlibm2k_1_1_s_e_t_t_i_n_g_s.html @@ -0,0 +1,129 @@ + + + + + + + +libm2k: libm2k::SETTINGS Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libm2k +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    libm2k::SETTINGS Struct Reference
    +
    +
    + +

    Triggering system. + More...

    + +

    #include <libm2k/enums.hpp>

    + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +std::vector< M2K_TRIGGER_CONDITION_ANALOGanalog_condition
     Analogical trigger's condition.
     
    +std::vector< M2K_TRIGGER_CONDITION_DIGITALdigital_condition
     Digital trigger's condition.
     
    +std::vector< int > raw_level
     Trigger's raw level.
     
    +std::vector< double > level
     Trigger's level.
     
    +std::vector< double > hysteresis
     Trigger's hysteresis.
     
    +std::vector< M2K_TRIGGER_MODEmode
     Triggering mode.
     
    +M2K_TRIGGER_SOURCE_ANALOG trigger_source
     Triggering source.
     
    +int delay
     Trigger's delay.
     
    +

    Detailed Description

    +

    Triggering system.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g-members.html b/structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g-members.html new file mode 100644 index 00000000..07823dd2 --- /dev/null +++ b/structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g-members.html @@ -0,0 +1,88 @@ + + + + + + + +libm2k: Member List + + + + + + + + + +
    +
    + + + + + + +
    +
    libm2k +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    libm2k::analog::DMM_READING Member List
    +
    + + + + + diff --git a/structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html b/structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html new file mode 100644 index 00000000..ccc69640 --- /dev/null +++ b/structlibm2k_1_1analog_1_1_d_m_m___r_e_a_d_i_n_g.html @@ -0,0 +1,117 @@ + + + + + + + +libm2k: libm2k::analog::DMM_READING Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libm2k +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    libm2k::analog::DMM_READING Struct Reference
    +
    +
    + +

    The structure of a DMM. + More...

    + +

    #include <libm2k/analog/enums.hpp>

    + + + + + + + + + + + + + + + + + +

    +Public Attributes

    +std::string name
     The name of the channel.
     
    +std::string id
     Channel's id.
     
    +double value
     The measured value.
     
    +std::string unit_name
     Unit of measurement.
     
    +std::string unit_symbol
     Unit symbol.
     
    +

    Detailed Description

    +

    The structure of a DMM.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 00000000..3b443fc6 Binary files /dev/null and b/sync_off.png differ diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 00000000..e08320fb Binary files /dev/null and b/sync_on.png differ diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 00000000..3b725c41 Binary files /dev/null and b/tab_a.png differ diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 00000000..e2b4a863 Binary files /dev/null and b/tab_b.png differ diff --git a/tab_h.png b/tab_h.png new file mode 100644 index 00000000..fd5cb705 Binary files /dev/null and b/tab_h.png differ diff --git a/tab_s.png b/tab_s.png new file mode 100644 index 00000000..ab478c95 Binary files /dev/null and b/tab_s.png differ diff --git a/tabs.css b/tabs.css new file mode 100644 index 00000000..8ea7d549 --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file