
\pgf@circ@Rlen = \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
\def\pgf@circ@direction{0.0}

% Names
\ctikzset{name/.style = { n=#1 } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@
\ctikzset{n/.code = { 
	\pgfkeys{/tikz/circuitikz/bipole/name=#1}
}}

% Reflect the node along
\ctikzset{mirrored/.is choice}
\ctikzset{mirror value/.initial=1}
\ctikzset{mirrored/true/.code = {\ctikzsetvalof{mirror value}{-1}} }
\ctikzset{mirrored/false/.code = {\ctikzsetvalof{mirror value}{1}} }
\ctikzset{mirror/.style = {/tikz/circuitikz/mirrored=true}}

% Invert node along path
\ctikzset{inverted/.is choice}
\ctikzset{invert value/.initial=1}
\ctikzset{inverted/true/.code = {\ctikzsetvalof{invert value}{-1}\pgf@circuit@bipole@invertedtrue}}
\ctikzset{inverted/false/.code = {\ctikzsetvalof{invert value}{1}\pgf@circuit@bipole@invertedfalse}}
\ctikzset{invert/.style = {/tikz/circuitikz/inverted=true}}
\newif\ifpgf@circuit@bipole@inverted
\ctikzset{bipole/inverted/.is if=pgf@circuit@bipole@inverted}


\newif\ifpgf@circuit@bipole@voltage@backward
\ctikzset{bipole/voltage/direction/.is choice}
\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}



% Initialize paths
\def\pgfcircresetpath{
	\ctikzset{bipole/name=, bipole/label/name=, bipole/label/position=90, ,bipole/annotation/name=, bipole/annotation/position=-90, 
		bipole/inverted=false, bipole/kind=,
	  	bipole/voltage/direction=backward, bipole/voltage/label/name=, bipole/voltage/position=below,
	  	bipole/nodes/left=none, bipole/nodes/right=none, bipole/is voltage=false,bipole/is voltageoutsideofsymbol=false,bipole/is strokedsymbol=false,
		bipole/is current=false, bipole/current/label/name=, bipole/current/x position=after,
		bipole/current/y position=above, bipole/current/direction=forward, 
		mirrored=false
   }
}


%% Generic bipole path
\def\pgf@circ@bipole@path#1#2{
	\pgfextra{
		\ctikzset{bipole/kind = #1}
		
		\edef\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/name}}
		\def\pgf@circ@temp{}
		\ifx\pgf@temp\pgf@circ@temp % if it has not a name
			\pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
			\ctikzset{bipole/name = #2\pgf@circ@rand} % create it
		\fi

		\def\pgf@temp{open}
		\def\pgf@circ@temp{#1}
	}

		(\tikztostart) coordinate (\ctikzvalof{bipole/name}start)
		(\tikztotarget) coordinate (\ctikzvalof{bipole/name}end)
		\pgfextra{
			\pgf@circ@slope{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
							{\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
			\edef\pgf@circ@direction{\pgfmathresult}		
		}
	
		($(\tikztostart) ! .5 ! (\tikztotarget)$) 
		node[#1shape, rotate=\pgf@circ@direction, yscale=\ctikzvalof{mirror value}, xscale=\ctikzvalof{invert value}] 
			(\ctikzvalof{bipole/name}) {}
			\ifpgf@circuit@bipole@inverted
				\ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
					coordinate	(anchorstartnode) at (\ctikzvalof{bipole/name}.pathend)
					coordinate	(anchorendnode) at (\ctikzvalof{bipole/name}.pathstart)
				\else
					coordinate	(anchorstartnode) at (\ctikzvalof{bipole/name}.right)
					coordinate	(anchorendnode) at (\ctikzvalof{bipole/name}.left)
				\fi
			\else
				\ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
					coordinate	(anchorstartnode) at (\ctikzvalof{bipole/name}.pathstart)
					coordinate	(anchorendnode) at (\ctikzvalof{bipole/name}.pathend)
				\else
					coordinate	(anchorstartnode) at (\ctikzvalof{bipole/name}.left)
					coordinate	(anchorendnode) at (\ctikzvalof{bipole/name}.right)
				\fi
			\fi
	\ifx\pgf@temp\pgf@circ@temp  % if it is an open
	\else
		\ifpgf@circuit@bipole@strokedsymbol%draw line thrue symbol(e.g. diodes)
			\ifcsname pgf@anchor@#1shape@strokepathstart\endcsname%if special path-anchors are defined, use them!
				(\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.strokepathstart)
				(\ctikzvalof{bipole/name}.strokepathend)  -- (\ctikzvalof{bipole/name}end.center)
			\else
				(\ctikzvalof{bipole/name}start.center)--(\ctikzvalof{bipole/name}end.center)
			\fi
		\else		
			(\ctikzvalof{bipole/name}start.center) --(anchorstartnode)
			(anchorendnode)  -- (\ctikzvalof{bipole/name}end.center)
		
		\fi
	\fi
	

	\pgf@circ@ifkeyempty{bipole/label/name}\else\pgf@circ@drawlabels{label}\fi
	\pgf@circ@ifkeyempty{bipole/annotation/name}\else\pgf@circ@drawlabels{annotation}\fi
	\drawpoles
	\pgf@circ@ifkeyempty{bipole/voltage/label/name}\else\pgf@circ@drawvoltage\fi
	\pgf@circ@ifkeyempty{bipole/current/label/name}\else\pgf@circ@drawcurrent\fi
	% reset
	\pgfextra{
		\pgfcircresetpath
	}  
	(\tikztotarget) 	\tikztonodes  % e si continua
}


%% Path definitions
\def\pgf@circ@resistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{generic}{#1}\else\pgf@circ@bipole@path{resistor}{#1}\fi}
\def\pgf@circ@vresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{tgeneric}{#1}\else\pgf@circ@bipole@path{vresistor}{#1}\fi}
\def\pgf@circ@potentiometer@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{genericpotentiometer}{#1}\else\pgf@circ@bipole@path{potentiometer}{#1}\fi}
\def\pgf@circ@thermistor@path#1{\pgf@circ@bipole@path{thermistor}{#1}}
\def\pgf@circ@thermistorptc@path#1{\pgf@circ@bipole@path{thermistorptc}{#1}}
\def\pgf@circ@thermistorntc@path#1{\pgf@circ@bipole@path{thermistorntc}{#1}}
\def\pgf@circ@varistor@path#1{\pgf@circ@bipole@path{varistor}{#1}}
\def\pgf@circ@capacitor@path#1{\pgf@circ@bipole@path{capacitor}{#1}}
\def\pgf@circ@ecapacitor@path#1{\pgf@circ@bipole@path{ecapacitor}{#1}}
\def\pgf@circ@polarcapacitor@path#1{\pgf@circ@bipole@path{polarcapacitor}{#1}}
\def\pgf@circ@vcapacitor@path#1{\pgf@circ@bipole@path{vcapacitor}{#1}}
\def\pgf@circ@piezoelectric@path#1{\pgf@circ@bipole@path{piezoelectric}{#1}}
\def\pgf@circ@battery@path#1{\pgf@circ@bipole@path{battery}{#1}}
\def\pgf@circ@battery1@path#1{\pgf@circ@bipole@path{battery1}{#1}}
\def\pgf@circ@europeaninductor@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
\def\pgf@circ@americaninductor@path#1{\pgf@circ@bipole@path{americaninductor}{#1}}
\def\pgf@circ@cuteinductor@path#1{\pgf@circ@bipole@path{cuteinductor}{#1}}
\def\pgf@circ@inductor@path#1{%
	\pgfextra{
		\edef\pgf@circ@temp{\ctikzvalof{inductor}}%
		\def\pgf@temp{european}%
	}
	\ifx\pgf@temp\pgf@circ@temp%
		\pgf@circ@europeaninductor@path{#1}%
	\else%
		\pgfextra{	\def\pgf@temp{cute} }%
		\ifx\pgf@temp\pgf@circ@temp%
			\pgf@circ@cuteinductor@path{#1}%
		\else%
			\pgf@circ@americaninductor@path{#1}%
		\fi%
	\fi%
}
\def\pgf@circ@vinductor@path#1{
	\pgfextra{
		\edef\pgf@circ@temp{\ctikzvalof{inductor}}%
		\def\pgf@temp{european}%
	}
	\ifx\pgf@temp\pgf@circ@temp%
		\pgf@circ@veuropeaninductor@path{#1}%
	\else%
		\pgfextra{	\def\pgf@temp{cute} }%
		\ifx\pgf@temp\pgf@circ@temp%
			\pgf@circ@vcuteinductor@path{#1}%
		\else%
			\pgf@circ@vamericaninductor@path{#1}%
		\fi%
	\fi%
}
\def\pgf@circ@veuropeaninductor@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
\def\pgf@circ@vamericaninductor@path#1{\pgf@circ@bipole@path{vamericaninductor}{#1}}
\def\pgf@circ@vcuteinductor@path#1{\pgf@circ@bipole@path{vcuteinductor}{#1}}
\def\pgf@circ@lamp@path#1{\pgf@circ@bipole@path{lamp}{#1}}
\def\pgf@circ@esource@path#1{\pgf@circ@bipole@path{esource}{#1}}
\def\pgf@circ@pvsource@path#1{\pgf@circ@bipole@path{pvsource}{#1}}
\def\pgf@circ@vsource@path#1{\pgf@circ@bipole@path{vsource}{#1}}
\def\pgf@circ@dcvsource@path#1{\pgf@circ@bipole@path{dcvsource}{#1}}
\def\pgf@circ@vsourceam@path#1{\pgf@circ@bipole@path{vsourceAM}{#1}}
\def\pgf@circ@vsourcesin@path#1{\pgf@circ@bipole@path{vsourcesin}{#1}}
\def\pgf@circ@isource@path#1{\pgf@circ@bipole@path{isource}{#1}}
\def\pgf@circ@oosource@path#1{\pgf@circ@bipole@path{oosource}{#1}}
\def\pgf@circ@dcisource@path#1{\pgf@circ@bipole@path{dcisource}{#1}}
\def\pgf@circ@isourcesin@path#1{\pgf@circ@bipole@path{isourcesin}{#1}}
\def\pgf@circ@vsourcesquare@path#1{\pgf@circ@bipole@path{vsourcesquare}{#1}}
\def\pgf@circ@vsourcetri@path#1{\pgf@circ@bipole@path{vsourcetri}{#1}}
\def\pgf@circ@isourceam@path#1{\pgf@circ@bipole@path{isourceAM}{#1}}
\def\pgf@circ@cvsource@path#1{\pgf@circ@bipole@path{cvsource}{#1}}
\def\pgf@circ@cvsourceam@path#1{\pgf@circ@bipole@path{cvsourceAM}{#1}}
\def\pgf@circ@cvsourcesin@path#1{\pgf@circ@bipole@path{cvsourcesin}{#1}}
\def\pgf@circ@cisource@path#1{\pgf@circ@bipole@path{cisource}{#1}}
\def\pgf@circ@cisourceam@path#1{\pgf@circ@bipole@path{cisourceAM}{#1}}
\def\pgf@circ@cisourcesin@path#1{\pgf@circ@bipole@path{cisourcesin}{#1}}
\def\pgf@circ@short@path#1{\pgf@circ@bipole@path{short}{#1}}
\def\pgf@circ@cspst@path#1{\pgf@circ@bipole@path{cspst}{#1}}
\def\pgf@circ@spst@path#1{\pgf@circ@bipole@path{spst}{#1}}
\def\pgf@circ@ospst@path#1{\pgf@circ@bipole@path{ospst}{#1}}
\def\pgf@circ@pushbutton@path#1{\pgf@circ@bipole@path{pushbutton}{#1}}
\def\pgf@circ@open@path#1{\pgf@circ@bipole@path{open}{#1}}
\def\pgf@circ@generic@path#1{\pgf@circ@bipole@path{generic}{#1}}
\def\pgf@circ@ageneric@path#1{\pgf@circ@bipole@path{ageneric}{#1}}
\def\pgf@circ@tgeneric@path#1{\pgf@circ@bipole@path{tgeneric}{#1}}
\def\pgf@circ@fullgeneric@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
\def\pgf@circ@tfullgeneric@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
\def\pgf@circ@ammeter@path#1{\pgf@circ@bipole@path{ammeter}{#1}}
\def\pgf@circ@ohmmeter@path#1{\pgf@circ@bipole@path{ohmmeter}{#1}}
\def\pgf@circ@voltmeter@path#1{\pgf@circ@bipole@path{voltmeter}{#1}}
\def\pgf@circ@empty@path#1{}
\def\pgf@circ@photoresistor@path#1{\pgf@circ@bipole@path{photoresistor}{#1}}
\def\pgf@circ@emptythyristor@path#1{\pgf@circ@bipole@path{emptythyristor}{#1}}
\def\pgf@circ@fullthyristor@path#1{\pgf@circ@bipole@path{fullthyristor}{#1}}
\def\pgf@circ@toggleswitch@path#1{\pgf@circ@bipole@path{toggleswitch}{#1}}
\def\pgf@circ@memristor@path#1{\pgf@circ@bipole@path{memristor}{#1}}
\def\pgf@circ@emptytriac@path#1{\pgf@circ@bipole@path{emptytriac}{#1}}
\def\pgf@circ@fulltriac@path#1{\pgf@circ@bipole@path{fulltriac}{#1}}
\def\pgf@circ@tline@path#1{\pgf@circ@bipole@path{tline}{#1}}
\def\pgf@circ@squid@path#1{\pgf@circ@bipole@path{squid}{#1}}
\def\pgf@circ@barrier@path#1{\pgf@circ@bipole@path{barrier}{#1}}
\def\pgf@circ@thermocouple@path#1{\pgf@circ@bipole@path{thermocouple}{#1}}
\def\pgf@circ@fuse@path#1{\pgf@circ@bipole@path{fuse}{#1}}
\def\pgf@circ@afuse@path#1{\pgf@circ@bipole@path{afuse}{#1}}

\def\pgf@circ@gfsurgearrester@path#1{\ifpgf@circuit@europeangfsurgearrester\pgf@circ@europeangfsurgearrester@path{#1}\else\pgf@circ@americangfsurgearrester@path{#1}\fi}
\def\pgf@circ@europeangfsurgearrester@path#1{\pgf@circ@bipole@path{european gas filled surge arrester}{#1}}
\def\pgf@circ@americangfsurgearrester@path#1{\pgf@circ@bipole@path{american gas filled surge arrester}{#1}}

\def\pgf@circ@twoport@path#1{\pgf@circ@bipole@path{twoport}{#1}}
\def\pgf@circ@vco@path#1{\pgf@circ@bipole@path{vco}{#1}}
\def\pgf@circ@bandpass@path#1{\pgf@circ@bipole@path{bandpass}{#1}}
\def\pgf@circ@highpass@path#1{\pgf@circ@bipole@path{highpass}{#1}}
\def\pgf@circ@lowpass@path#1{\pgf@circ@bipole@path{lowpass}{#1}}
\def\pgf@circ@adc@path#1{\pgf@circ@bipole@path{adc}{#1}}
\def\pgf@circ@dac@path#1{\pgf@circ@bipole@path{dac}{#1}}
\def\pgf@circ@dsp@path#1{\pgf@circ@bipole@path{dsp}{#1}}
\def\pgf@circ@fft@path#1{\pgf@circ@bipole@path{fft}{#1}}
\def\pgf@circ@amp@path#1{\pgf@circ@bipole@path{amp}{#1}}
\def\pgf@circ@vamp@path#1{\pgf@circ@bipole@path{vamp}{#1}}
\def\pgf@circ@piattenuator@path#1{\pgf@circ@bipole@path{piattenuator}{#1}}
\def\pgf@circ@vpiattenuator@path#1{\pgf@circ@bipole@path{vpiattenuator}{#1}}
\def\pgf@circ@tattenuator@path#1{\pgf@circ@bipole@path{tattenuator}{#1}}
\def\pgf@circ@vtattenuator@path#1{\pgf@circ@bipole@path{vtattenuator}{#1}}
\def\pgf@circ@phaseshifter@path#1{\pgf@circ@bipole@path{phaseshifter}{#1}}
\def\pgf@circ@vphaseshifter@path#1{\pgf@circ@bipole@path{vphaseshifter}{#1}}
\def\pgf@circ@detector@path#1{\pgf@circ@bipole@path{detector}{#1}}

%%Mechanical
\def\pgf@circ@spring@path#1{\pgf@circ@bipole@path{spring}{#1}}
\def\pgf@circ@mass@path#1{\pgf@circ@bipole@path{mass}{#1}}
\def\pgf@circ@damper@path#1{\pgf@circ@bipole@path{damper}{#1}}




%% Styles

\def\comnpatname{\ifpgf@circuit@compat *\else\fi}
\def\compattikzset#1{\tikzset{\comnpatname#1}}

%\def\ctikzsetbipole#1#2{%
%	\tikzset{#1/.style= {to path=#2, \circuitikzbasekey, l=##1}}%
%}

\compattikzset{spring/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@spring@path, l=#1}}
\compattikzset{mass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mass@path, l=#1}}
\compattikzset{damper/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@damper@path, l=#1}}
\compattikzset{resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@resistor@path, l=#1}}
\compattikzset{american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{resistor}{#1}, l=#1}}
\compattikzset{european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{generic}{#1}, l=#1}}
\compattikzset{potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@potentiometer@path, l=#1}}
\compattikzset{varistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@varistor@path, l=#1}}
\compattikzset{photoresistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@photoresistor@path, l=#1}}
\compattikzset{thermistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistor@path, l=#1}}
\compattikzset{thermistor ptc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorptc@path, l=#1}}
\compattikzset{thermistor ntc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorntc@path, l=#1}}
\compattikzset{american potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{potentiometer}{#1}, l=#1}}
\compattikzset{european potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{genericpotentiometer}{#1}, l=#1}}
\compattikzset{variable resistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vresistor@path, l=#1}}
\compattikzset{variable american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{vresistor}{#1}, l=#1}}
\compattikzset{variable european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{tgeneric}{#1}, l=#1}}
\compattikzset{capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@capacitor@path, l=#1}}
\compattikzset{elko/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
\compattikzset{ecapacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
\compattikzset{polar capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@polarcapacitor@path, l=#1}}
\compattikzset{variable capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcapacitor@path, l=#1}}
\compattikzset{piezoelectric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piezoelectric@path, l=#1}}
\compattikzset{battery/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@battery@path, \circuitikzbasekey/bipole/is voltage=true,  \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
\compattikzset{battery1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@battery1@path, \circuitikzbasekey/bipole/is voltage=true,  \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
\compattikzset{inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@inductor@path, l=#1}}
\compattikzset{gf surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
\compattikzset{american gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americangfsurgearrester@path, l=#1}}
\compattikzset{european gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeangfsurgearrester@path, l=#1}}
\compattikzset{gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
\compattikzset{american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americaninductor@path, l=#1}}
\compattikzset{cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteinductor@path, l=#1}}
\compattikzset{european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeaninductor@path, l=#1}}
\compattikzset{variable inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vinductor@path, l=#1}}
\compattikzset{variable european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@veuropeaninductor@path, l=#1}}
\compattikzset{variable american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamericaninductor@path, l=#1}}
\compattikzset{variable cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcuteinductor@path, l=#1}}
\compattikzset{tline/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tline@path, l=#1}}
\compattikzset{transmission line/.style = {tline = #1}}
\compattikzset{TL/.style = {tline = #1}}
\compattikzset{european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
\compattikzset{american voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
\compattikzset{european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
\compattikzset{american current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
\compattikzset{european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
\compattikzset{american controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
\compattikzset{european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
\compattikzset{american controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
\compattikzset{sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
\compattikzset{square voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesquare@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
\compattikzset{triangle voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcetri@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
\compattikzset{sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
\compattikzset{controlled sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
\compattikzset{controlled sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}

\compattikzset{voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
\compattikzset{current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi current source, \circuitikzbasekey/bipole/is current=true, i=#1}}
\compattikzset{controlled voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi controlled voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
\compattikzset{controlled current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi controlled current source, \circuitikzbasekey/bipole/is current=true, i=#1}}


\compattikzset{generic/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@generic@path, l=#1}}
\compattikzset{ageneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ageneric@path, l=#1}}
\compattikzset{tgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tgeneric@path, l=#1}}
\compattikzset{fullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullgeneric@path, l=#1}}
\compattikzset{tfullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tfullgeneric@path, l=#1}}
\compattikzset{short/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@short@path}}
\compattikzset{open/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@open@path}}

\compattikzset{lamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lamp@path}}

\compattikzset{squid/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@squid@path}}
\compattikzset{barrier/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@barrier@path}}
\compattikzset{thermocouple/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermocouple@path}}
\compattikzset{fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fuse@path}}
\compattikzset{asymmetric fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@afuse@path}}

\compattikzset{twoport/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@twoport@path}}
\compattikzset{vco/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vco@path}}
\compattikzset{bandpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandpass@path}}
\compattikzset{highpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@highpass@path}}
\compattikzset{lowpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lowpass@path}}
\compattikzset{adc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@adc@path}}
\compattikzset{dac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dac@path}}
\compattikzset{dsp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dsp@path}}
\compattikzset{fft/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fft@path}}
\compattikzset{amp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@amp@path}}
\compattikzset{vamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamp@path}}
\compattikzset{piattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piattenuator@path}}
\compattikzset{vpiattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vpiattenuator@path}}
\compattikzset{tattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tattenuator@path}}
\compattikzset{vtattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vtattenuator@path}}
\compattikzset{phaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@phaseshifter@path}}
\compattikzset{vphaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vphaseshifter@path}}
\compattikzset{detector/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@detector@path}}

% % % % % %
% % Beginn of Diodes
% % % % % %

\def\pgf@circ@fulldiode@path#1{\pgf@circ@bipole@path{fulldiode}{#1}}
\def\pgf@circ@fullzdiode@path#1{\pgf@circ@bipole@path{fullzdiode}{#1}}
\def\pgf@circ@fullzzdiode@path#1{\pgf@circ@bipole@path{fullzzdiode}{#1}}
\def\pgf@circ@fullsdiode@path#1{\pgf@circ@bipole@path{fullsdiode}{#1}}
\def\pgf@circ@fulltdiode@path#1{\pgf@circ@bipole@path{fulltdiode}{#1}}
\def\pgf@circ@fulllediode@path#1{\pgf@circ@bipole@path{fulllediode}{#1}}
\def\pgf@circ@fullpdiode@path#1{\pgf@circ@bipole@path{fullpdiode}{#1}}
\def\pgf@circ@fullvarcap@path#1{\pgf@circ@bipole@path{fullvarcap}{#1}}
\def\pgf@circ@emptydiode@path#1{\pgf@circ@bipole@path{emptydiode}{#1}}
\def\pgf@circ@emptyzdiode@path#1{\pgf@circ@bipole@path{emptyzdiode}{#1}}
\def\pgf@circ@emptyzzdiode@path#1{\pgf@circ@bipole@path{emptyzzdiode}{#1}}
\def\pgf@circ@emptysdiode@path#1{\pgf@circ@bipole@path{emptysdiode}{#1}}
\def\pgf@circ@emptytdiode@path#1{\pgf@circ@bipole@path{emptytdiode}{#1}}
\def\pgf@circ@emptylediode@path#1{\pgf@circ@bipole@path{emptylediode}{#1}}
\def\pgf@circ@emptypdiode@path#1{\pgf@circ@bipole@path{emptypdiode}{#1}}
\def\pgf@circ@emptyvarcap@path#1{\pgf@circ@bipole@path{emptyvarcap}{#1}}

\compattikzset{full diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulldiode@path}}
\compattikzset{full Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullsdiode@path}}
\compattikzset{full Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzdiode@path}}
\compattikzset{full ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzzdiode@path}}
\compattikzset{full tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltdiode@path}}
\compattikzset{full photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullpdiode@path}}
\compattikzset{full led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulllediode@path}}
\compattikzset{full varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullvarcap@path}}
\compattikzset{full thyristor/.style =  {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullthyristor@path}}
\compattikzset{full triac/.style =  {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltriac@path}}

\compattikzset{empty diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptydiode@path}}
\compattikzset{empty Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptysdiode@path}}
\compattikzset{empty Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzdiode@path}}
\compattikzset{empty ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
\compattikzset{empty tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytdiode@path}}
\compattikzset{empty photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptypdiode@path}}
\compattikzset{empty led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptylediode@path}}
\compattikzset{empty varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyvarcap@path}}
\compattikzset{empty thyristor/.style =  {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptythyristor@path}}
\compattikzset{empty triac/.style =  {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytriac@path}}

\compattikzset{stroke diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptydiode@path}}
\compattikzset{stroke Schottky diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptysdiode@path}}
\compattikzset{stroke Zener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzdiode@path}}
\compattikzset{stroke ZZener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
\compattikzset{stroke tunnel diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytdiode@path}}
\compattikzset{stroke photodiode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptypdiode@path}}
\compattikzset{stroke led/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptylediode@path}}
\compattikzset{stroke varcap/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyvarcap@path}}
\compattikzset{stroke thyristor/.style =  {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptythyristor@path}}
%\compattikzset{stroke triac/.style =  {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytriac@path}}

\def\pgfcircdiodestylemacro{\ifpgf@circuit@strokediode stroke \else\ifpgf@circuit@fulldiode full \else empty \fi\fi}

\compattikzset{Schottky diode/.style = {\comnpatname \pgfcircdiodestylemacro Schottky diode}}
\compattikzset{Zener diode/.style = {\comnpatname \pgfcircdiodestylemacro Zener diode}}
\compattikzset{ZZener diode/.style = {\comnpatname \pgfcircdiodestylemacro ZZener diode}}
\compattikzset{tunnel diode/.style = {\comnpatname \pgfcircdiodestylemacro tunnel diode}}
\compattikzset{photodiode/.style = {\comnpatname \pgfcircdiodestylemacro photodiode}}
\compattikzset{led/.style = {\comnpatname \pgfcircdiodestylemacro led}}
\compattikzset{varcap/.style = {\comnpatname \pgfcircdiodestylemacro varcap}}
\compattikzset{diode/.style = {\comnpatname \pgfcircdiodestylemacro diode}}
\compattikzset{thyristor/.style =  {\comnpatname \pgfcircdiodestylemacro thyristor}}
\compattikzset{triac/.style =  {\comnpatname \ifpgf@circuit@fulldiode full \else empty \fi triac}}%no stroke triac!

%% Define Shortcuts
\compattikzset{Do/.style = {\comnpatname empty diode}}
\compattikzset{tDo/.style = {\comnpatname empty tunnel diode}}
\compattikzset{zDo/.style = {\comnpatname empty Zener diode}}
\compattikzset{zzDo/.style = {\comnpatname empty ZZener diode}}
\compattikzset{sDo/.style = {\comnpatname empty Schottky diode}}
\compattikzset{pDo/.style = {\comnpatname empty photodiode}}
\compattikzset{leDo/.style = {\comnpatname empty led}}
\compattikzset{VCo/.style = {\comnpatname empty varcap}}
\compattikzset{Tyo/.style = {\comnpatname empty thyristor}}
\compattikzset{Tro/.style = {\comnpatname empty triac}}

\compattikzset{D*/.style = {\comnpatname full diode}}
\compattikzset{tD*/.style = {\comnpatname full tunnel diode}}
\compattikzset{zD*/.style = {\comnpatname full Zener diode}}
\compattikzset{zzD*/.style = {\comnpatname full ZZener diode}}
\compattikzset{sD*/.style = {\comnpatname full Schottky diode}}
\compattikzset{pD*/.style = {\comnpatname full photodiode}}
\compattikzset{leD*/.style = {\comnpatname full led}}
\compattikzset{VC*/.style = {\comnpatname full varcap}}
\compattikzset{Ty*/.style = {\comnpatname full thyristor}}
\compattikzset{Tr*/.style = {\comnpatname full triac}}

\compattikzset{D/.style = {\comnpatname diode}}
\compattikzset{tD/.style = {\comnpatname tunnel diode}}
\compattikzset{zD/.style = {\comnpatname Zener diode}}
\compattikzset{zzD/.style = {\comnpatname ZZener diode}}
\compattikzset{sD/.style = {\comnpatname Schottky diode}}
\compattikzset{pD/.style = {\comnpatname photodiode}}
\compattikzset{leD/.style = {\comnpatname led}}
\compattikzset{VC/.style = {\comnpatname varcap}}
\compattikzset{Ty/.style = {\comnpatname thyristor}}
\compattikzset{Tr/.style = {\comnpatname triac}}

\compattikzset{D-/.style = {\comnpatname stroke diode}}
\compattikzset{tD-/.style = {\comnpatname stroke tunnel diode}}
\compattikzset{zD-/.style = {\comnpatname stroke Zener diode}}
\compattikzset{zzD-/.style = {\comnpatname stroke ZZener diode}}
\compattikzset{sD-/.style = {\comnpatname stroke Schottky diode}}
\compattikzset{pD-/.style = {\comnpatname stroke photodiode}}
\compattikzset{leD-/.style = {\comnpatname stroke led}}
\compattikzset{VC-/.style = {\comnpatname stroke varcap}}
\compattikzset{Ty-/.style = {\comnpatname stroke thyristor}}
\compattikzset{Tr-/.style = {\comnpatname empty triac}}%no stroke triac!

% % % % % %
% % End of Diodes
% % % % % %


\compattikzset{memristor/.style =  {\circuitikzbasekey, /tikz/to path=\pgf@circ@memristor@path}}
\compattikzset{closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}}
\compattikzset{opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ospst@path, l=#1}}
\compattikzset{switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@spst@path, l=#1}}
\compattikzset{push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
\compattikzset{toggle switch/.style =  {\circuitikzbasekey, /tikz/to path=\pgf@circ@toggleswitch@path}}

\compattikzset{ammeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ammeter@path}}
\compattikzset{voltmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@voltmeter@path}}
\compattikzset{ohmmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ohmmeter@path}}

% short forms
\compattikzset{esource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@esource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true,  v=#1}}
\compattikzset{pvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true,  v=#1}}
\compattikzset{dcvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
\compattikzset{dcisource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcisource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}

\compattikzset{ioosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is current=true,/tikz/to path=\pgf@circ@oosource@path}}
\compattikzset{voosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is voltage=true,/tikz/to path=\pgf@circ@oosource@path}}

\compattikzset{vsource/.style = {\comnpatname voltage source = #1}}
\compattikzset{isource/.style = {\comnpatname current source = #1}}
\compattikzset{cisource/.style = {\comnpatname controlled current source = #1}}
\compattikzset{cvsource/.style = {\comnpatname controlled voltage source = #1}}
\compattikzset{vsourcesin/.style = {\comnpatname sinusoidal voltage source = #1}}
\compattikzset{vsourcesquare/.style = {\comnpatname square voltage source = #1}}
\compattikzset{vsourcetri/.style = {triangle voltage source = #1}}
\compattikzset{isourcesin/.style = {\comnpatname sinusoidal current source = #1}}
\compattikzset{cisourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
\compattikzset{cvsourcesin/.style = {\comnpatname controlled sinusoidal  voltage source = #1}}

\compattikzset{controlled vsource/.style = {\comnpatname controlled voltage source = #1}}
\compattikzset{controlled isource/.style = {\comnpatname controlled current source = #1}}
\compattikzset{controlled vsourcesin/.style = {\comnpatname controlled sinusoidal  voltage source = #1}}
\compattikzset{controlled isourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}

\compattikzset{R/.style= {\comnpatname resistor = #1}}
%\ifpgf@circuit@compat\else\compattikzset{R/.style= {resistor = #1}}\fi
\compattikzset{vR/.style= {\comnpatname variable resistor = #1}}
\compattikzset{phR/.style= {\comnpatname photoresistor = #1}}
\compattikzset{thR/.style= {\comnpatname thermistor = #1}}
\compattikzset{thRp/.style= {\comnpatname thermistor ptc= #1}}
\compattikzset{thRn/.style= {\comnpatname thermistor ntc= #1}}
\compattikzset{pR/.style= {\comnpatname potentiometer = #1}}
\compattikzset{C/.style = {\comnpatname capacitor = #1}}
\compattikzset{eC/.style = {\comnpatname ecapacitor = #1}}
\compattikzset{pC/.style = {\comnpatname polar capacitor = #1}}
\compattikzset{vC/.style = {\comnpatname variable capacitor = #1}}
\compattikzset{PZ/.style = {\comnpatname piezoelectric = #1}}
\compattikzset{L/.style = {\comnpatname inductor = #1}}
\compattikzset{vL/.style = {\comnpatname variable inductor = #1}}
\compattikzset{V/.style = {\comnpatname voltage source = #1}}
\compattikzset{cV/.style = {\comnpatname controlled voltage source = #1}}
\compattikzset{sV/.style = {\comnpatname sinusoidal voltage source = #1}}
\compattikzset{sqV/.style = {\comnpatname square voltage source = #1}}
\compattikzset{tV/.style = {\comnpatname triangle voltage source = #1}}
\compattikzset{csV/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
\def\pgf@temp#1{ 
	\compattikzset{V#1/.style = {\comnpatname voltage source, v#1=##1} } 
	\compattikzset{cV#1/.style = {\comnpatname controlled  voltage source, v#1=##1} } 
	\compattikzset{sV#1/.style = {\comnpatname sinusoidal  voltage source, v#1=##1} } 
	\compattikzset{csV#1/.style = {\comnpatname controlled sinusoidal voltage source, v#1=##1} } 
}
\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<} 
\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_} 
\compattikzset{I/.style = {\comnpatname current source = #1}}
\compattikzset{cI/.style = {\comnpatname controlled current source = #1}}
\compattikzset{sI/.style = {\comnpatname sinusoidal current source = #1}}
\compattikzset{csI/.style = {\comnpatname controlled sinusoidal current source = #1}}
\def\pgf@temp#1{ 
	\compattikzset{I#1/.style = {\comnpatname current source, i#1=##1} } 
	\compattikzset{cI#1/.style = {\comnpatname controlled current source, i#1=##1} } 
	\compattikzset{sI#1/.style = {\comnpatname sinusoidal current source, i#1=##1} } 
	\compattikzset{csI#1/.style = {\comnpatname controlled sinusoidal current source, i#1=##1} } 
}
\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
\pgf@temp{>_} \pgf@temp{<_} \pgf@temp{>^} \pgf@temp{<^}
\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}



\compattikzset{Mr/.style = {\comnpatname memristor}}

\compattikzset{cspst/.style = {\comnpatname closing switch = #1}}
\compattikzset{ospst/.style = {\comnpatname opening switch = #1}}
\compattikzset{spst/.style = {\comnpatname switch = #1}}

\compattikzset{afuse/.style = {\comnpatname asymmetric fuse=#1}}

\compattikzset{vdd/.style = {\comnpatname vcc = #1}}
\compattikzset{vss/.style = {\comnpatname vee = #1}}

\def\inheritlogicport#1#2{
	\pgfdeclareshape{#2 port}{
		\inheritsavedanchors[from=#1 #2 port]
		\inheritbackgroundpath[from=#1 #2 port]
		\inheritanchor[from=#1 #2 port]{in}
		\inheritanchor[from=#1 #2 port]{in 1}
		\inheritanchor[from=#1 #2 port]{in 2}
		\inheritanchor[from=#1 #2 port]{out}
		\inheritanchor[from=#1 #2 port]{center}
		\inheritanchor[from=#1 #2 port]{left}
	}
}

\ifpgf@circuit@europeanlogicport
	\inheritlogicport{european}{and}
	\inheritlogicport{european}{or}
	\inheritlogicport{european}{xor}
	\inheritlogicport{european}{not}
	\inheritlogicport{european}{nand}
	\inheritlogicport{european}{nor}
	\inheritlogicport{european}{xnor}
\else
	\inheritlogicport{american}{and}
	\inheritlogicport{american}{or}
	\inheritlogicport{american}{xor}
	\inheritlogicport{american}{not}
	\inheritlogicport{american}{nand}
	\inheritlogicport{american}{nor}
	\inheritlogicport{american}{xnor}
\fi

% Transistor like bipoles

\def\pgf@circ@trans@path#1#2{
	\pgfextra{
		\edef\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/name}}
		\def\pgf@circ@temp{#2}
		\ifx\pgf@temp\pgf@circ@temp % if it has not a name
			\pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
			\ctikzset{bipole/name = trans\pgf@circ@rand} % create it
		\fi
	}
	\ifpgf@circuit@bipole@inverted
		(\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}end) {}
		(\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}start) {} 	
	\else
		(\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}start) {}
		(\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}end) {} 
	\fi
	\pgfextra{
		\pgf@circ@slope{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
					   {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
		\pgfmathadd{\pgfmathresult}{-90}
		\edef\pgf@circ@direction{\pgfmathresult}
	}
	($(\tikztostart) ! .5 ! (\tikztotarget)$) 
		node[#1, /tikz/rotate=\pgf@circ@direction, xscale=\ctikzvalof{mirror value}]
			(\ctikzvalof{bipole/name}) {} node {\ctikzvalof{bipole/label/name}}
		node[#1, /tikz/rotate=\pgf@circ@direction, xscale=\ctikzvalof{mirror value}]
			(\ctikzvalof{bipole/name}) {} node {\ctikzvalof{bipole/value/name}}
		\ifcsname pgf@anchor@#1@pathstart\endcsname%if special path-anchors are defined, use them!
			(\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.pathstart)
			(\ctikzvalof{bipole/name}.pathend)  -- (\ctikzvalof{bipole/name}end.center)
		\else
			(\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.left)
			(\ctikzvalof{bipole/name}.right)  -- (\ctikzvalof{bipole/name}end.center)
		\fi
	\pgfextra{
		\pgfcircresetpath
	}  
	(\tikztotarget) 	\tikztonodes  % e si continua
}


\def\pgf@circ@definetranspath#1{
	\compattikzset{T#1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@trans@path{#1}{}, l=##1}}
}

\pgf@circ@definetranspath{elmech}
\pgf@circ@definetranspath{nmos}
\pgf@circ@definetranspath{pmos}
\pgf@circ@definetranspath{npn}
\pgf@circ@definetranspath{pnp}
\pgf@circ@definetranspath{nfet}
\pgf@circ@definetranspath{nigfete}
\pgf@circ@definetranspath{nigfetd}
\pgf@circ@definetranspath{nigfetebulk}
\pgf@circ@definetranspath{pfet}
\pgf@circ@definetranspath{pigfete}
\pgf@circ@definetranspath{pigfetd}
\pgf@circ@definetranspath{pigfetebulk}
\pgf@circ@definetranspath{njfet}
\pgf@circ@definetranspath{pjfet}
\pgf@circ@definetranspath{pigbt}
\pgf@circ@definetranspath{nigbt}
\pgf@circ@definetranspath{Lpigbt}
\pgf@circ@definetranspath{Lnigbt}