From a63a9f1c6c4242531597886b438de6181c57ac8a Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Mon, 5 Aug 2024 11:26:23 +0200 Subject: =?UTF-8?q?d=C3=A9finition=20dans=20ckoi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- biblio.bib | 6 +++++- contexte/ckoi.tex | 3 ++- main.pdf | Bin 2488791 -> 2488893 bytes main.tex | 2 -- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/biblio.bib b/biblio.bib index 0ff3234..13c76e1 100644 --- a/biblio.bib +++ b/biblio.bib @@ -193,4 +193,8 @@ ################################ #Définition -https://www.gnu.org/philosophy/words-to-avoid.html#ArtificialIntelligence +@misc{gnuAI, + title={Words to Avoid (or Use with Care) Because They Are Loaded or Confusing.}, + howpublished={\url{https://www.gnu.org/philosophy/words-to-avoid.html#ArtificialIntelligence}}, + note={Dernier accès: 2024-07-24} +} diff --git a/contexte/ckoi.tex b/contexte/ckoi.tex index 66340f4..e2a6107 100644 --- a/contexte/ckoi.tex +++ b/contexte/ckoi.tex @@ -65,5 +65,6 @@ Concernant la justice, Collaboration HCL/INRIA \subsection{Définition(s)} - +Nous avons vu dans les parties précédentes que le terme \textquote{Intelligence Artificielle} est utilisé pour parler d'un grand nombre de téchnique différentes. +Cela rend sont utilisation assez imprecise comme le précise Richard M. Stallman dans la liste de terme \textquote{à éviter} du projet GNU~\cite{gnuAI}. diff --git a/main.pdf b/main.pdf index 137661e..e89bbc9 100644 Binary files a/main.pdf and b/main.pdf differ diff --git a/main.tex b/main.tex index 5afea2e..285ef3e 100644 --- a/main.tex +++ b/main.tex @@ -55,8 +55,6 @@ \input{contexte/ckoi} \section{Les stratégies IA} \input{contexte/strat} - \section{Définitions} - \input{contexte/def} \section{Enjeux} \input{contexte/enjeux} \section{Bases legales} -- cgit v1.2.3 From d339a5f0128d753e26ccf5750f0c4e1049c2f5ef Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Wed, 7 Aug 2024 14:05:43 +0200 Subject: =?UTF-8?q?Ajout=20aux=20dej.=20Modification=20de=20l'organisation?= =?UTF-8?q?=20des=20fichier=20pour=20plus=20de=20lisibilit=C3=A9=20dans=20?= =?UTF-8?q?le=20main?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- biblio.bib | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++-- contexte/ckoi.tex | 84 ++++++++++++++++++++++++++++++++++++++++++++++++-- contexte/legal.tex | 5 +++ contexte/strat.tex | 6 ++-- main.pdf | Bin 2488893 -> 2522064 bytes main.tex | 59 ++++++----------------------------- 6 files changed, 185 insertions(+), 57 deletions(-) diff --git a/biblio.bib b/biblio.bib index 13c76e1..b5580e2 100644 --- a/biblio.bib +++ b/biblio.bib @@ -165,7 +165,7 @@ note={Dernier accès: 2024-07-24} } -@misc{openaibg, +@misc{openaibig, title={ChatGPT sets record for fastest-growing user base - analyst note}, howpublished={\url{https://www.reuters.com/technology/chatgpt-sets-record-fastest-growing-user-base-analyst-note-2023-02-01/}}, note={Dernier accès: 2024-07-24} @@ -193,8 +193,92 @@ ################################ #Définition +@misc{dartmouth, + title={Dartmouth summer research project on artificiale intelligence}, + howpublished={\url{https://raysolomonoff.com/dartmouth/boxa/dart564props.pdf}}, + author={ + McCarthy, John and Minsky, Marvin and Rochester Nathaniel and Shannon, Claude + }, + note={Dernier accès: 2024-08-05} +} + +@misc{banIA, + title={En 2024, bannissons les termes "intelligence artificielle"}, + howpublished={\url{https://www.radiofrance.fr/franceculture/podcasts/le-biais-d-aurelie-jean/le-biais-d-aurelie-jean-chronique-du-mardi-02-janvier-2024-9653995}}, + author={Jean, Aurélie}, + note={Dernier accès: 2024-08-05} +} + @misc{gnuAI, title={Words to Avoid (or Use with Care) Because They Are Loaded or Confusing.}, howpublished={\url{https://www.gnu.org/philosophy/words-to-avoid.html#ArtificialIntelligence}}, - note={Dernier accès: 2024-07-24} + note={Dernier accès: 2024-08-05} +} +@book{dico-int, + title={Dictionaire de l'Académie francaise, 9° édition}, + note={\url{http://www.dictionnaire-academie.fr/article/A9I1608}, Dernier accès: 2024-08-05} +} +@book{dico-art, + title={Dictionaire de l'Académie francaise, 9° édition}, + note={\url{http://www.dictionnaire-academie.fr/article/A9A2706},Dernier accès: 2024-08-05} } +@misc{underscore, + title={Cette nouvelle IA est bluffante}, + author={Chaîne Youtube Underscore}, + year={2024}, + howpublished={\url{https://www.youtube.com/watch?v=QUr93cD2ZUs}}, + note={Dernier accès: 2024-08-05} +} +@misc{grep, + title={grep}, + howpublished={\url{https://www.gnu.org/software/grep/manual/grep.html}}, + note={Dernier accès: 2024-08-05} +} +@misc{ocrad, + title={Ocrad}, + howpublished={\url{https://www.gnu.org/software/ocrad/ocrad.html}}, + note={Dernier accès: 2024-08-05} +} + + +######################################### +#Philosophie + +@article{Singler_2018, title={Roko’s Basilisk or Pascal’s? Thinking of Singularity Thought Experiments as Implicit Religion}, volume={20}, url={https://journal.equinoxpub.com/IR/article/view/3226}, DOI={10.1558/imre.35900}, abstractNote={In 2010 a thought experiment speculating on the motivations and aims of a potential superintelligent Artificial Intelligence, sometimes known as the &amp;lsquo;Singularity&amp;rsquo;, caused uproar and anxiety on the forum board where it was initially posted. This paper considers that thought experiment&amp;rsquo;s debt to older forms of religious argument, the reactions from among the community, and how expectations about the Singularity as a being with agency can be considered to be an example of implicit religion. This is significant as the thought experiment appeared in a field of research, AI, considered by many to be secular due to its technological focus. The communities under discussion also explicitly express their aim of &amp;lsquo;perfecting&amp;rsquo; human rationality, and place that ability in opposition to &amp;lsquo;religion&amp;rsquo; as a derided object and the aims of &amp;lsquo;Goddists&amp;rsquo; in general. This tension between overt atheism and secular communities&amp;rsquo; return to religious tropes and narratives is relevant for the wider study of religion in the contemporary era.}, number={3}, journal={Implicit Religion}, author={Singler, Beth}, year={2018}, month={May}, pages={279–297} } + +@misc{matrix, + title={The Matrix}, + author={Wachowski and Silver and Pope}, + year={1999} +} + +@book{bicentenaire, + title={The Bicentennial Man}, + author={Asimov,Isaac}, + year={1976}, +} + + +@misc{avenger, + title={Avengers: Age of Ultron}, + author={ Whedon, Joss and Feige, Kevin}, + year={2015}, + note={Based on the comics by Stan Lee and Jack Kirby} +} +@misc{terminator, + title={The Terminator}, + author={Cameron, James and Hurd, Gale Anne}, + year={1999} +} + +@article{searle1980minds, + title={Minds, brains, and programs}, + author={Searle, John R}, + journal={Behavioral and brain sciences}, + volume={3}, + number={3}, + pages={417--424}, + year={1980}, + publisher={Cambridge University Press} +} + diff --git a/contexte/ckoi.tex b/contexte/ckoi.tex index e2a6107..db3cd1e 100644 --- a/contexte/ckoi.tex +++ b/contexte/ckoi.tex @@ -7,6 +7,7 @@ Ainsi l'IA est présente aussi bien à l'échelle de la population qui à accès %Individuelle \subsection{A l'échelle individuelle} +\label{sec:contexte-indi} L'IA promet de faciliter et d'accelerer un grand nombre de tâches dans de multiples domaines : de l'édition d'image sur son téléphone portable~\cite{} jusqu'aux diagnostiques médicaux~\cite{}. Les géants du numérique poussent de plus en plus l'IA dans leurs produits ce qui rend son utilisation simple d'accès. La figure~\ref{fig:contexte-gafam} montre comment les GAFAM (Google Facebook Amazon Microsoft) mettent en avant des outils grand publiques. @@ -46,6 +47,7 @@ Par exemple Pl@ntNet~\cite{barthelemy:hal-01837361,plantnet} permet avec un simp %Collective \subsection{A l'échelle institutionelle} +\label{sec:contexte-insti} L'echelle indiviuelle de l'IA n'est que le sommet de l'iceberg, son utilisation institutionel et gouvernemental est ancré plus profondément. Cela est particulièrement vraie dans les régimes autoritaires, comme la Chine, où l'IA est utilisé pour controler et opprimer la population nottamant grace à la reconaissance faciale~\cite{beraja2023ai}. De plus Beraja et al. montre que les choix politiques de Pékin, lors des soulevements populaires, entraînent un dévelopement accéléré des technologie de reconaissance faciale~\cite{beraja2023ai}. @@ -65,6 +67,84 @@ Concernant la justice, Collaboration HCL/INRIA \subsection{Définition(s)} -Nous avons vu dans les parties précédentes que le terme \textquote{Intelligence Artificielle} est utilisé pour parler d'un grand nombre de téchnique différentes. -Cela rend sont utilisation assez imprecise comme le précise Richard M. Stallman dans la liste de terme \textquote{à éviter} du projet GNU~\cite{gnuAI}. +Nous avons vu dans les parties précédentes que le terme \textquote{Intelligence Artificielle} est utilisé pour parler d'un grand nombre de téchniques différentes et de produits commerciaux différents. +De plus, dans les médias et dans le language de tous les jours, nous pouvons entendre~\cite{underscore} de expression comme : \textquote{Une nouvelle IA qui fait [..]}. +Cela renvoit l'IA à une collection de logiciels comme nous l'avons présenté dans les Sections~\ref{sec:contexte-indi} et \ref{sec:contexte-insti} mais ne donne pas de caracétrisation qui permette de classifier un logiciel spécifique comme \textquote{IA} ou \textquote{pas IA}. +Est-ce que \textit{grep}~\cite{grep}, le logiciel de reconaissance de motifs textuels, est IA ? +Est-ce qu'un programme d'\textit{Optical Character Recognition (OCR)} comme Ocrad~\cite{ocrad} est IA? + +L'origine de l'expression \textit{Artificiale intelligence} peut être retracé jusqu'à l'Ecole d'été de Dartmouth\footnote{\textit{Dartmouth summer research project}. +Dartmouth est une université de l'état de New Hampshire aux USA} de 1956~\cite{banIA}. +McCarthy et al. y ont introduit un nouveau domaine de recherche fondamentale \textquote{basée sur la conjecture que tous les aspects de l'apprentissage ou toute autre modalité de l'intelligence peut en principe être si précisement décrite qu'une machine peut être construite pour la simuler}~\cite{dartmouth} +\footnote{\textit{ + The study is proceeded on the basis of the conjecture that every aspect of learning or any other feature of intelligence can in principle be so precisely described that a machine can be made to simulate it}.} +La caractéristique de l'IA la plus fondamentale est donc de simuler l'intelligence avec une machine. + +Le dictionaire de l'Académie francaise~\cite{dico-int} défini l'intelligence comme la \textquote{ +Faculté de comprendre, de concevoir, de connaître, et notamment faculté de discerner ou d’établir des rapports entre des faits, des idées ou des formes pour parvenir à la connaissance}. +Cette définition a deux aspects. +Le premier est une liste de tâches techniques qui correspond bien à une liste de logiciels comme nous l'avons vus au début de cette section. +Le second aspect sur la connaissance est plus enigmatique et correspond à un but avec \textquote{pour parvenir}. +Nous verons dans les Sections~\ref{sec:background-opti} et \ref{sec:background-ml} comment un programme informatique peut techniquement chercher à atteindre un objectif voir plusieurs pour les Sections~\ref{sec:background-eq} et~\ref{sec:background-conf}. +Cette personification de la machine traduit bien l'aspect décrit à Dartmouth de simulation de caractéristiques humaines. +\textbf{A faire : Voltaire + Bourdieu sur la conaissance}. + +Comme l'explique A. Jean dans sa chronique sur France Culture~\cite{banIA}, le mot \textquote{intelligence} en francais ne comprend pas la signification supplémentaire d'\textquote{information} que \textquote{\textit{intelligence}} a en anglais. +Le traitement de l'information, sa compression, ses réprésentations est pourtant une facette primordiale de l'IA qui est mis en avant par Claude Shannon dans la descrption de sa contribution à Dartmouth~\cite{dartmouth}. + + + +Le mot \textquote{artificiel} quand-à lui signifie \textquote{Qui est dû à la technique de l’homme, par opposition à ce qui a été créé et s’est développé naturellement}~\cite{dico-art}. +Intelligence aritificielle : \textquote{ensemble de propriétés rapprochant du cerveau humain certains systèmes informatiques très évolués}~\cite{dico-art}. + +Strong AI + +Weak AI + +AGI + +Cette polyvalence du terme rend son utilisation assez imprecise comme l'écrit Richard M. Stallman dans la liste de terme \textquote{à éviter} du projet GNU~\cite{gnuAI}. + +France culture Banissons IA~\cite{banIA}. + +L'Union Européene a établie le règlement (UE) 2024/1689 du parlement européen et du conseil +du 13 juin 2024 +établissant des règles harmonisées concernant l’intelligence artificielle. +Nous reviendrons plus en détail dessus dans la Section~\ref{sec:contexte-legal}. +Pour le moment, regardons l'article 3: il s'agit d'une liste de définitions concernant l'IA. +Nous y trouvons la définition de (UE 2024/1689 3§1) : \textquote{système IA}. +C'est \textquote{un système automatisé qui est conçu pour fonctionner à différents niveaux d’autonomie et peut faire +preuve d’une capacité d’adaptation après son déploiement, et qui, pour des objectifs explicites ou implicites, déduit, +à partir des entrées qu’il reçoit, la manière de générer des sorties telles que des prédictions, du contenu, des +recommandations ou des décisions qui peuvent influencer les environnements physiques ou virtuels.} + +\subsection{Philosophie et culture} +\label{sec:contexte-phi} +Enfin, nous allons terminer cette section visant à mieux cernerles différents aspects de l'IA, par une présentation succinte de ses apparition marquante dans la culture populaire et dans la philosophie. +Cele permet de mettre en avant l'imaginaire collectif, fantasmé, voir effrayant, que les mots \textquote{Intelligence Artificiele} engendrent. + +Alors que scientifiquemet l'IA en était à ses balbutiement avec la conférence de Dartmouth, l'immaginaire humain quand à lui avait une longueur d'avance. +Des auteur de litérature d'anticipation comme Isaac Asimov propsaient, dès les années 1950, des situtationsa ainsi qu'une reflexion sur les implication de l'introduction de machines intelligentes dans notre vie de tous les jours. +Asimov dans ca serie de nouvelles sur les robots \textit{I, Robot}, les fameuses trois lois de la robotique : +\textquote{ +\begin{enumerate} + \item La Première loi : Un robot ne peut porter atteinte à un être humain ni, restant passif, laisser cet être humain exposé au danger ; + \item La Seconde loi : Un robot doit obéir aux ordres donnés par les êtres humains, sauf si de tels ordres entrent en contradiction avec la première loi ; + \item La Troisème loi : Un robot doit protéger son existence dans la mesure où cette protection n'entre pas en contradiction avec la première ou la deuxième loi. +\end{enumerate} +} +\footnote{The First Law: A robot may not injure a human being or, through inaction, allow a human being to come to harm. The Second Law: A robot must obey the orders given it by human beings except where such orders would conflict with the First Law. The Third Law: A robot must protect its own existence as long as such protection does not conflict with the First or Second Law.} + +Experience de la Chambre Chinoise~\cite{searle1980minds}. + +Basilique de Roko, Paris Pascalien~\cite{Singler_2018} + +Alignement de l'IA + +Convergence de l'IA + +\textit{The Matrix}~\cite{matrix}. +\textit{The Bicentennial Man}~\cite{bicentenaire} (livre). +\textit{The Terminator}~\cite{terminator}. +\textit{Avengers: Age of Ultron}~\cite{avenger}. diff --git a/contexte/legal.tex b/contexte/legal.tex index e390c68..7f47af4 100644 --- a/contexte/legal.tex +++ b/contexte/legal.tex @@ -1,3 +1,8 @@ + +L'Union Européene a établie le règlement (UE) 2024/1689 du parlement européen et du conseil +du 13 juin 2024 +établissant des règles harmonisées concernant l’intelligence artificielle. + Pour mieux comprendre les enjeux autour des différents scénarios d'attaques, outre la recherche inhérente au comportement sociétal humain à se dissimuler et à ne montrer que ce qu'il souhaite montrer, penchons-nous du côté de la législation, des droits et des obligations qui entourent nos données. diff --git a/contexte/strat.tex b/contexte/strat.tex index bad1fa1..e8c7047 100644 --- a/contexte/strat.tex +++ b/contexte/strat.tex @@ -20,6 +20,7 @@ \label{fig:contexte-anr} \end{figure} +\subsection{Plance France 2023} Dans le cadre du plan France 2030~\cite{france2030}, la France a dévelopé une stratégie nationale de l'IA~\cite{stratfr}. Missions Villani. PEPER IA. @@ -33,7 +34,4 @@ AUtres appels. \label{fig:contexte-trend} \end{figure} -\subsection{Aspect juridique} -L'Union Européene a établie le règlement (UE) 2024/1689 du parlement européen et du conseil -du 13 juin 2024 -établissant des règles harmonisées concernant l’intelligence artificielle. +\subsection{Attentes de l'IA} diff --git a/main.pdf b/main.pdf index e89bbc9..d8ab6d4 100644 Binary files a/main.pdf and b/main.pdf differ diff --git a/main.tex b/main.tex index 285ef3e..fef6397 100644 --- a/main.tex +++ b/main.tex @@ -14,6 +14,13 @@ \usepackage{tikz} \usepackage{cite} \usepackage{hyperref} +\usepackage{listings} + +\lstset{ +basicstyle=\small\ttfamily, +columns=flexible, +breaklines=true +} \usetikzlibrary {shapes.geometric} \usetikzlibrary {shapes.symbols} @@ -28,7 +35,7 @@ \begin{titlepage} \begin{center} \Huge - \textbf{Ecopaturage en territoire méditéranéen} + \textbf{L'intelligence artificielle pour une bêtise bien réel} \vspace{3cm} @@ -59,56 +66,10 @@ \input{contexte/enjeux} \section{Bases legales} \input{contexte/legal} + \label{sec:contexte-legal} \chapter{Background} -\section{Ensembles et fonctions} - -\section{Algèbre linéaire} - \subsection{Espace vectoriel} - \subsection{Application linéaires} - \subsection{Matrices} - -\section{Mesurer le hasard pour prédire et inférer} - \subsection{Théorie de la mesure} - \subsection{Probabilitées} - \subsection{Statistiques} - -\section{Topologie} - \subsection{Distances et normes} - \subsection{Espaces topologiques} - \subsection{Application aux fonctions} - -\section{Calcul différentiel} - \subsection{Différentiel} - \subsection{Gradient} - -\section{Optimisation} - \subsection{Multiplicateurs de Lagrange} - - \subsection{Descente de gradient} - \subsubsection{Descente de gradient stochastique} - - \subsubsection{Descente de gradient exponentiée} - -\section{Apprentissage automatique} - \subsection{Principe} - \subsection{Entraîner un modèle} - \subsubsection{Fonction de coût} - \subsection{Evaluer un modèle} - \subsubsection{Classification} - \paragraph{La courbe ROC} - \paragraph{La courbe de precision/recall} - \subsubsection{Regression} - \subsection{Décentralisation} - \subsubsection{Federated learning} - -\section{Equitée} - \subsection{Différentes notions d'équitée} - - \subsection{Mitiger l'inéquitée} - \subsubsection{Preprocessing} - \subsubsection{Inprocessing} - \subsubsection{Postprocessing} + \input{background/main} \chapter{Classification finie} \input{classification_finie/finit_classif} -- cgit v1.2.3 From d2fdc848616e2481d4e64be55fb7500d331a8b1c Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Fri, 16 Aug 2024 13:02:12 +0200 Subject: Ajout de la partir instutionel dans l'intro. --- contexte/ckoi.tex | 117 +++++++++++++++++++++++++++++++++++++++++++++------- contexte/enjeux.tex | 5 +++ main.tex | 7 +++- 3 files changed, 111 insertions(+), 18 deletions(-) diff --git a/contexte/ckoi.tex b/contexte/ckoi.tex index db3cd1e..1ee19d2 100644 --- a/contexte/ckoi.tex +++ b/contexte/ckoi.tex @@ -48,23 +48,41 @@ Par exemple Pl@ntNet~\cite{barthelemy:hal-01837361,plantnet} permet avec un simp %Collective \subsection{A l'échelle institutionelle} \label{sec:contexte-insti} -L'echelle indiviuelle de l'IA n'est que le sommet de l'iceberg, son utilisation institutionel et gouvernemental est ancré plus profondément. +L'echelle indiviuelle de l'IA n'est que le sommet de l'iceberg, son utilisation institutionel est ancré plus profondément. +Contrairement aux précédentes applications que nous avons montré, nous parlons ici de technologies pour les quelles souvant l'utilisateur n'a pas le choix quand à leur utilisation. Cela est particulièrement vraie dans les régimes autoritaires, comme la Chine, où l'IA est utilisé pour controler et opprimer la population nottamant grace à la reconaissance faciale~\cite{beraja2023ai}. De plus Beraja et al. montre que les choix politiques de Pékin, lors des soulevements populaires, entraînent un dévelopement accéléré des technologie de reconaissance faciale~\cite{beraja2023ai}. Beraja et al. explique aussi que ces technologies peuvent ensuite quitter la sphère politique et devenir des produits commerciaux disponibles au grand publique. %Etats Unis %Justice prédictive -Aux Etats Unis l'IA est utilisé, nottamant dans la justice et dans l'éducation. -Concernant la justice, -%Position du crime -%https://www.soundthinking.com/ -%\cite{brayne2015predictive} +Aux Etats Unis l'IA est utilisé nottamant dans le système judiciaire. +En utilisant des bases de données des crimes, les polices de plusieurs villes comme Los Angeles, New York ou Miami utilisent l'IA pour prédir où vont se produire les futures crimes.\cite{brayne2015predictive} +Ces systeme peuvent aussi être complété par de la serveillance et prédiction de coup de feu~\cite{soundthinking}. +De plus certain juges peuvent utiliser des \textit{Risk assessement instrument} (RAI), des outils qui permettent de prédire, à partir de fait sur la vie d'une personne jugé coupable, si elle a un fort risque d'être récidiviste ou non~\cite{zhiyuan2020limits}. +Des suites de logiciels permettent d'integrer RAI, gestion administrative de l'affaire, enquête, prédiction de violation de libertée conditionelles, etc.~\cite{equivant} + +%Hopitaux +L'IA commence aussi à être utilisé pour des applications médicales avec la promesse de faciliter let d'accelerer la prise en charge des patients. + +Les technique de reconaissance d'image sont utilisé pour aider le diagnostique du cancer de la peau~\cite{dildar2021skin}. +Les dermatologues ont à leur disposition des appareil photos spécialement concu pour que l'image obtenu des grains de beauté de leur patients soit la plus adapté possible à la détéction de cancer. +Cela rend le diagnostique plus fiable que l'utilisation de smartphone avec une application~\cite{applicancer}. +La rétinopathie diabétique est une maladie qui peut causer la cécité chez les personnes diabétiques. + La détéction de cette maladie à partire de photographie de la rétine est un autre domaine d'application de l'IA qui produit des résultat satisfaisant pour une utilisation clinique~\cite{gulshan2016development}. +Cependant, utiliser l'IA pour prendre des décisions critiques pour les patients peut diminuer la qualitée de la relation entre médecin et patient, creer une dépendence nefaste de médecin à l'IA, tromper les patients dans des choix de fin de vie comme celui de prioriser la qualitée qe vie à la quantitée de vie~\cite{quinn2022three}. +Nous aborderons ce sujet plus en détail dans la Section~\ref{sec:contexte-expl}. + +%Recrutement +Nous observons aussi un intêret grandissant de la part de grande entreprises, notament de la liste~\textit{Fortune 500}~\cite{fortune500}, pour les technologie d'automatisation de la procédure de recrutement~\cite{ore2022opportunities}. +En effet, face à l'affluence de candidature pour un poste publié sur internet, le charge de travaille pour les services de ressources humaines augmente drastiquement. +Ainsi, pour automatiser la selection de candidature raisonables et proche de la demande de l'employeur, divers produits proposent l'utilisation d'IA ~\cite{ore2022opportunities}. +Le candidat, étant en position de faiblesse fasse à l'employeur, n'a pas le choix que de se soumeter à cette selection automatisée pour posutler. +Reduire le facteur humain peut aider à atteindre des objectif de parité femme homme ou augmenter l'embauche des personnes en situation de handicape en retirant certain biais~\cite{al2021role}. +Cependant cette idée ne fait pas consencus car l'IA à une fortetendence à reprouire les biais historiques~\cite{segal2021fairnesseyesdatacertifying}. +Ces biais font partie des enjeux majeurs de l'IA que nous traiterons en Sections~\ref{sec:contexte-eq} et~\ref{sec:aia}. -%Recidivism -%France hopitaux -Collaboration HCL/INRIA \subsection{Définition(s)} Nous avons vu dans les parties précédentes que le terme \textquote{Intelligence Artificielle} est utilisé pour parler d'un grand nombre de téchniques différentes et de produits commerciaux différents. @@ -73,6 +91,9 @@ Cela renvoit l'IA à une collection de logiciels comme nous l'avons présenté d Est-ce que \textit{grep}~\cite{grep}, le logiciel de reconaissance de motifs textuels, est IA ? Est-ce qu'un programme d'\textit{Optical Character Recognition (OCR)} comme Ocrad~\cite{ocrad} est IA? +L'Académie Francaise définit l'IA comme un +\textquote{ensemble de propriétés rapprochant du cerveau humain certains systèmes informatiques très évolués}~\cite{dico-art}. +Précision quelles propriétés du cerveau humain se raprochent de ces système informatiques. L'origine de l'expression \textit{Artificiale intelligence} peut être retracé jusqu'à l'Ecole d'été de Dartmouth\footnote{\textit{Dartmouth summer research project}. Dartmouth est une université de l'état de New Hampshire aux USA} de 1956~\cite{banIA}. McCarthy et al. y ont introduit un nouveau domaine de recherche fondamentale \textquote{basée sur la conjecture que tous les aspects de l'apprentissage ou toute autre modalité de l'intelligence peut en principe être si précisement décrite qu'une machine peut être construite pour la simuler}~\cite{dartmouth} @@ -80,14 +101,16 @@ McCarthy et al. y ont introduit un nouveau domaine de recherche fondamentale \te The study is proceeded on the basis of the conjecture that every aspect of learning or any other feature of intelligence can in principle be so precisely described that a machine can be made to simulate it}.} La caractéristique de l'IA la plus fondamentale est donc de simuler l'intelligence avec une machine. +Apportons quelques précision sur l'intelligence. Le dictionaire de l'Académie francaise~\cite{dico-int} défini l'intelligence comme la \textquote{ Faculté de comprendre, de concevoir, de connaître, et notamment faculté de discerner ou d’établir des rapports entre des faits, des idées ou des formes pour parvenir à la connaissance}. Cette définition a deux aspects. Le premier est une liste de tâches techniques qui correspond bien à une liste de logiciels comme nous l'avons vus au début de cette section. +Cependant cette énumération est une définition qui est aussi peu satisfaisant que ne l'est celle de la science faite par Théétète au debut de son entretien avec Socrate~\cite{theetete}. Le second aspect sur la connaissance est plus enigmatique et correspond à un but avec \textquote{pour parvenir}. Nous verons dans les Sections~\ref{sec:background-opti} et \ref{sec:background-ml} comment un programme informatique peut techniquement chercher à atteindre un objectif voir plusieurs pour les Sections~\ref{sec:background-eq} et~\ref{sec:background-conf}. Cette personification de la machine traduit bien l'aspect décrit à Dartmouth de simulation de caractéristiques humaines. -\textbf{A faire : Voltaire + Bourdieu sur la conaissance}. +%\textbf{A faire : Voltaire + Bourdieu sur la conaissance}. Comme l'explique A. Jean dans sa chronique sur France Culture~\cite{banIA}, le mot \textquote{intelligence} en francais ne comprend pas la signification supplémentaire d'\textquote{information} que \textquote{\textit{intelligence}} a en anglais. Le traitement de l'information, sa compression, ses réprésentations est pourtant une facette primordiale de l'IA qui est mis en avant par Claude Shannon dans la descrption de sa contribution à Dartmouth~\cite{dartmouth}. @@ -95,11 +118,12 @@ Le traitement de l'information, sa compression, ses réprésentations est pourta Le mot \textquote{artificiel} quand-à lui signifie \textquote{Qui est dû à la technique de l’homme, par opposition à ce qui a été créé et s’est développé naturellement}~\cite{dico-art}. -Intelligence aritificielle : \textquote{ensemble de propriétés rapprochant du cerveau humain certains systèmes informatiques très évolués}~\cite{dico-art}. -Strong AI +%Force de l'IA +John R. Searle propose de différencier l'IA faible de l'IA forte~\cite{searle1980minds}. +L'IA faible est un \textquote{outil très puissant} qui par exemple permet de tester un hypothèse de manière rigoureuse. +L'IA forte, en contre partie, \textquote{n'est plus qu'un simple outil de l'étude de l'esprit; plutot, le programme approprié \textbf{est} l'esprit, dans le sens que l'ordinateur, ayant le bont programme peut litteralement être demandé de comprendre et d'avoir d'autres états cognitifs.} -Weak AI AGI @@ -117,6 +141,14 @@ C'est \textquote{un système automatisé qui est conçu pour fonctionner à diff preuve d’une capacité d’adaptation après son déploiement, et qui, pour des objectifs explicites ou implicites, déduit, à partir des entrées qu’il reçoit, la manière de générer des sorties telles que des prédictions, du contenu, des recommandations ou des décisions qui peuvent influencer les environnements physiques ou virtuels.} +Cette définition est est très éloignée de celle de l'Académie Francaise et renvoi simplement l'IA à un algorithme qui prend en trée les \textquote{entrées} de la définiton UE ainsi que des paramètres pour son adaptabilité et renvoi des \textquote{sorties}. +Nous représentons cela sur la Figure~\ref{fig:contexte-IAUE}. +\begin{figure} + \centering + \input{contexte/figure/tikz/function} + \caption{Illustration de la définition de système IA par l'Union Européenne.} + \label{fig:contexte-IAUE} +\end{figure} \subsection{Philosophie et culture} \label{sec:contexte-phi} @@ -125,7 +157,7 @@ Cele permet de mettre en avant l'imaginaire collectif, fantasmé, voir effrayant Alors que scientifiquemet l'IA en était à ses balbutiement avec la conférence de Dartmouth, l'immaginaire humain quand à lui avait une longueur d'avance. Des auteur de litérature d'anticipation comme Isaac Asimov propsaient, dès les années 1950, des situtationsa ainsi qu'une reflexion sur les implication de l'introduction de machines intelligentes dans notre vie de tous les jours. -Asimov dans ca serie de nouvelles sur les robots \textit{I, Robot}, les fameuses trois lois de la robotique : +Asimov dans ca serie de nouvelles sur les robots \textit{I, Robot}, introduit les fameuses trois lois de la robotique~\cite{assimovIrobot}: \textquote{ \begin{enumerate} \item La Première loi : Un robot ne peut porter atteinte à un être humain ni, restant passif, laisser cet être humain exposé au danger ; @@ -133,18 +165,71 @@ Asimov dans ca serie de nouvelles sur les robots \textit{I, Robot}, les fameuses \item La Troisème loi : Un robot doit protéger son existence dans la mesure où cette protection n'entre pas en contradiction avec la première ou la deuxième loi. \end{enumerate} } -\footnote{The First Law: A robot may not injure a human being or, through inaction, allow a human being to come to harm. The Second Law: A robot must obey the orders given it by human beings except where such orders would conflict with the First Law. The Third Law: A robot must protect its own existence as long as such protection does not conflict with the First or Second Law.} +\footnote{\textit{The First Law: A robot may not injure a human being or, through inaction, allow a human being to come to harm. The Second Law: A robot must obey the orders given it by human beings except where such orders would conflict with the First Law. The Third Law: A robot must protect its own existence as long as such protection does not conflict with the First or Second Law.}} + +Ces trois lois mettent en avant la necessité d'avoir un contrôle sur l'IA et peuvent être vue comme les premisses de l'IA éthique. +Asimov les explore plus dans \textit{The Bicentennial Man}, une nouvelle publiée en 1976, dans la quelle un robot, par le hasard inhérent à son fonctionnement, montre des caractéristique humaine comme l'empathie ou la créativitée. +Ce hasard dans la création est aussi décrit au septième point de de la proposition de l'école d'été de Dartmouth~\cite{dartmouth}. +Cela renforce le lien entre intuition scientifique et imaginaire créatif, artistique. +De manière assez époustouflante ce hasard joue un rôle prédominant dans les programme génératif moderne comme les GAN ou les auto encodeurs ; nous y reviendrons plus en détails dans à la Section~\ref{sec:background-generation}. +De plus, ces caractéristique humaines peuvent se retrouver en interagissant avec des logiciels récent comme les LLM ou les générateurs d'images. +Cela peut amener les utilisateurs humain à anthropomorphiser ces logiciels~\cite{}. + +Cependant, l'attribution d'un rôle sociale humain à un ordinateur était déjà présent avant l'introduction des logiciels IA~\cite{MARAKAS2000719} : le programme ecrit, copie, attrape un virus, etc. +Une interaction avec \textquote{quelquechose} qui montre un semblant de comportement social nous renvoi a notre propre aliénation sociale au sens décrit par Jean Jaques Rousseau dans son \textit{Du contrat social}~\cite{}. +Marakas et al. explque aussi que cette confusion de l'humain et de la machine entraîne une sur évaluation de la capacité des ordinateurs et peut mener à utiliser à outrance la décision automatisé. +C'est le cas avec les décision juridique ou scolaire où la vie d'être humain est décidé par des ordinateur~\cite{}. +Cela donne lieu à de nombreux problème moraux qui forment les fondements de l'IA éthique nottamant autout de l'équitée, de la confidentialité et de l'explicabilité sur lesquels nos reviendrons à la Section~\ref{sec:contexte-enjeu}. + + +%Differences humain machine +%Turing test + +%Juridique +En droit francais, \textquote{etre humain} est un synonime de \textquote{personne physique}~\cite{cornu}. +C'est à dire ayant la personnalité : l'\textquote{Aptitude à être titulaire des droits et assujetti à des obligations qui appartient à toutes les personnes physiques, [...]}~\cite{cornu}. +Cette définition est d'ailleur la pierre angulaire quand à la reconaissance de le qualité d'humain d'Andrew, le robot protagoniste de \textit{The bicentennial man}~\cite{bicentenaire}. +C'est en reconaissant qu'une personne ayant de multiples prothése d'organes synthetiques, n'en perdant pas moins sa personalité, alors ne reste plus que la conscience qui définisse l'humain. + +Penchons nous donc du coté de la conscience. +Qu'est-ce que l'homme = une de quatres grandes questions de la philosohpie d'après Kant. +Inconscient de Freud = différence avec l'IA. L'IA à-t'elle un inconscient ? +\begin{figure} + \includegraphics[width=\linewidth]{contexte/figure/chatgpt/penses.png} + \caption{Réponsse de ChatGPT à la question \textquote{penses-tu ?}.} + \label{fig:contexte-penses} +\end{figure} +%IA = bullshit Experience de la Chambre Chinoise~\cite{searle1980minds}. +%Peur de l'IA Basilique de Roko, Paris Pascalien~\cite{Singler_2018} +\textit{The Bicentennial Man}~\cite{bicentenaire} (livre). +\textquote{ +'Comment peuvent-ils avoir peur des robots ?' +'C'est un mal de l'humanitée, l'un de ceux dont elle n'est pas encore guerrie.' +} +\footnote{ +'How can they fear robots?' +'It is a disease of mankind, one of which it is not yet cured.' +} Alignement de l'IA Convergence de l'IA \textit{The Matrix}~\cite{matrix}. -\textit{The Bicentennial Man}~\cite{bicentenaire} (livre). +\textit{2001: A Space Odyssey}~\cite{2001odyssey}. \textit{The Terminator}~\cite{terminator}. +Dans la scène d'ouverture, nous voyons des machines autonomes se battre avec une force ecrasant contre des humains. +Cette scène contraste avec celle qui l'on voit jute après l'écran titre où la machine, tout aussi gigantesque que les robots tueurs, est un camion poubelle donc totalement au service et l'homme qui la contrôle. +\textit{Defense network computer, trusted to know it all. They said it was smart.} \textit{Avengers: Age of Ultron}~\cite{avenger}. +\begin{figure} + \centering + \includegraphics[width=\linewidth]{contexte/figure/bad_ai.png} + \caption{L'IA : un grand méchant. WarGames~\cite{wargames}. Avengers: Age of Ultron~\cite{avenger}. The Matrix~\cite{matrix}. The Terminator~\cite{terminator}. Futurama~\cite{futurama}. 2001: A space Odyssey~\cite{2001odyssey}} + \label{fig:contexte-badai} +\end{figure} diff --git a/contexte/enjeux.tex b/contexte/enjeux.tex index c82aed0..6ac661e 100644 --- a/contexte/enjeux.tex +++ b/contexte/enjeux.tex @@ -20,6 +20,7 @@ L'expressiosn de \textquote{remplire suffisamant bien la tâche} à toute son im Il revient donc aux personnes qui crée ces modèles de déterminer, en fonction du contexte d'application, l'erreur maximal que peut atteindre le modèle pour qu'il soit considéré comme viable et utilisable en production. \subsection{Equitée} +\label{sec:contexte-eq} L'élborations de modèles est soumis à différent bias qui influencent son fonctionement~\cite{}. C'est à dire que le modèle se compre différamant pour différents sous-ensembles de la population. Cela peut donner lieu à des discriminations notament dans le modèle de décision qui influence directment la vie de persones. @@ -27,7 +28,11 @@ La justice prédictive tel qu'utilisé aux Etats Unis en est un bon exemple. Dans ce cas, un modèle est utilisé pour prédire si un individu jugé coupable à un forte probabilité d'être récidiviste au non. En utilisant de tel modèle nous mesurons que les afro-américains (\textit{blacks}) son plus souvent predit comme ayant un forte chance d'être récidiviste que le reste de la population (\textit{whites})~\cite{}. +Recrutement : l'IA peut rentirer les bias humains~\cite{al2021role}. + \subsection{Explicabilitée} +\label{sec:contexte-expl} +Transparance dans la médecine, Boite noire, ~\cite{quinn2022three}. \subsection{Confidentialitée} D'une manière génèrale, l'inteligence artificielle brasse une quantité astronomique de données~\cite{}. diff --git a/main.tex b/main.tex index fef6397..9c63bd9 100644 --- a/main.tex +++ b/main.tex @@ -24,6 +24,7 @@ breaklines=true \usetikzlibrary {shapes.geometric} \usetikzlibrary {shapes.symbols} +\usetikzlibrary{decorations.pathreplacing} %\input{aia/00macros} \input{theorem} @@ -35,7 +36,7 @@ breaklines=true \begin{titlepage} \begin{center} \Huge - \textbf{L'intelligence artificielle pour une bêtise bien réel} + \textbf{L'intelligence artificielle, un sujet de thèse merdique} \vspace{3cm} @@ -43,7 +44,7 @@ breaklines=true \textbf{Jan Aalmoes} \large - Sous la supervison de \\ + Sous la "supervison" de \\ Antoine Boutet et Mathieu Cunche \vfill @@ -63,6 +64,7 @@ breaklines=true \section{Les stratégies IA} \input{contexte/strat} \section{Enjeux} + \label{sec:contexte-enjeu} \input{contexte/enjeux} \section{Bases legales} \input{contexte/legal} @@ -76,6 +78,7 @@ breaklines=true \chapter{Attaque d'inférence d'attribut sensible} +\label{sec:aia}. \input{aia/main} \section{Regression} -- cgit v1.2.3 From d9b9d68dc038479a85a2ba869957ca2ec5c87bf8 Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Fri, 16 Aug 2024 14:59:06 +0200 Subject: =?UTF-8?q?Bibliographie=20r=C3=A9par=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- biblio.bib | 151 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/biblio.bib b/biblio.bib index b5580e2..b8e60a8 100644 --- a/biblio.bib +++ b/biblio.bib @@ -10,6 +10,106 @@ year={2015} } +@misc{soundthinking, + howpublished={\url{https://www.soundthinking.com/}}, + title={Soundthinking}, + note={Dernier accès: 2024-08-16} +} + + +@article{ +zhiyuan2020limits, +author = {Zhiyuan “Jerry” Lin and Jongbin Jung and Sharad Goel and Jennifer Skeem }, +title = {The limits of human predictions of recidivism}, +journal = {Science Advances}, +volume = {6}, +number = {7}, +pages = {eaaz0652}, +year = {2020}, +doi = {10.1126/sciadv.aaz0652}, +URL = {https://www.science.org/doi/abs/10.1126/sciadv.aaz0652}, +eprint = {https://www.science.org/doi/pdf/10.1126/sciadv.aaz0652}, +abstract = {Statistical algorithms can outperform human predictions of recidivism. Dressel and Farid recently found that laypeople were as accurate as statistical algorithms in predicting whether a defendant would reoffend, casting doubt on the value of risk assessment tools in the criminal justice system. We report the results of a replication and extension of Dressel and Farid’s experiment. Under conditions similar to the original study, we found nearly identical results, with humans and algorithms performing comparably. However, algorithms beat humans in the three other datasets we examined. The performance gap between humans and algorithms was particularly pronounced when, in a departure from the original study, participants were not provided with immediate feedback on the accuracy of their responses. Algorithms also outperformed humans when the information provided for predictions included an enriched (versus restricted) set of risk factors. These results suggest that algorithms can outperform human predictions of recidivism in ecologically valid settings.}} + +@misc{equivant, + howpublished={\url{https://www.equivant.com/}}, + title={Equivant}, + note={Dernier accès: 2024-07-24} +} +@article{dildar2021skin, + title={Skin cancer detection: a review using deep learning techniques}, + author={Dildar, Mehwish and Akram, Shumaila and Irfan, Muhammad and Khan, Hikmat Ullah and Ramzan, Muhammad and Mahmood, Abdur Rehman and Alsaiari, Soliman Ayed and Saeed, Abdul Hakeem M and Alraddadi, Mohammed Olaythah and Mahnashi, Mater Hussen}, + journal={International journal of environmental research and public health}, + volume={18}, + number={10}, + pages={5479}, + year={2021}, + publisher={MDPI} +} + +@article{gulshan2016development, + title={Development and validation of a deep learning algorithm for detection of diabetic retinopathy in retinal fundus photographs}, + author={Gulshan, Varun and Peng, Lily and Coram, Marc and Stumpe, Martin C and Wu, Derek and Narayanaswamy, Arunachalam and Venugopalan, Subhashini and Widner, Kasumi and Madams, Tom and Cuadros, Jorge and others}, + journal={jama}, + volume={316}, + number={22}, + pages={2402--2410}, + year={2016}, + publisher={American Medical Association} +} + +@article{quinn2022three, + title={The three ghosts of medical AI: Can the black-box present deliver?}, + author={Quinn, Thomas P and Jacobs, Stephan and Senadeera, Manisha and Le, Vuong and Coghlan, Simon}, + journal={Artificial intelligence in medicine}, + volume={124}, + pages={102158}, + year={2022}, + publisher={Elsevier} +} + +@misc{fortune500, + title={Fortune 500}, + howpublished={\url{https://fortune.com/ranking/global500/}}, + note={Dernier accès: 2024-07-24} +} + +@article{ore2022opportunities, + title={Opportunities and risks of artificial intelligence in recruitment and selection}, + author={Ore, Olajide and Sposato, Martin}, + journal={International Journal of Organizational Analysis}, + volume={30}, + number={6}, + pages={1771--1782}, + year={2022}, + publisher={Emerald Publishing Limited} +} + +@inproceedings{al2021role, + title={The role of artificial intelligence in recruitment process decision-making}, + author={Al-Alawi, Adel Ismail and Naureen, Misbah and AlAlawi, Ebtesam Ismaeel and Al-Hadad, Ahmed Abdulla Naser}, + booktitle={2021 International Conference on Decision Aid Sciences and Application (DASA)}, + pages={197--203}, + year={2021}, + organization={IEEE} +} + +@misc{segal2021fairnesseyesdatacertifying, + title={Fairness in the Eyes of the Data: Certifying Machine-Learning Models}, + author={Shahar Segal and Yossi Adi and Benny Pinkas and Carsten Baum and Chaya Ganesh and Joseph Keshet}, + year={2021}, + eprint={2009.01534}, + archivePrefix={arXiv}, + primaryClass={cs.AI}, + url={https://arxiv.org/abs/2009.01534}, +} + + + + + + + #####################################################"" #Echelle individuelle @@ -193,6 +293,11 @@ ################################ #Définition +@book{theetete, + title={Théétète}, + author={Platon}, + year={300 av. JC} +} @misc{dartmouth, title={Dartmouth summer research project on artificiale intelligence}, howpublished={\url{https://raysolomonoff.com/dartmouth/boxa/dart564props.pdf}}, @@ -271,6 +376,52 @@ year={1999} } +@misc{2001odyssey, + title={2001: A space odyssey}, + author={Kubrick, Stanley and Clarke, Arthur C. }, + year={1968} +} +@misc{futurama, + title={Futurama}, + author={Groening, Matt}, + year={2003} +} + +@misc{wargames, + title={War games}, + author={Badham, John and Lasker, Lawrence and Parkes, Walter F. and Schneider,Harold}, + year={1983} +} + +@book{assimovIrobot, + title={I, Robot}, + year={1950}, + author={Isaac Asimov} +} + +@book{cornu, + title={Vocabulaire juridique}, + author={Cornu, Gérard}, + year={2014}, + note={Dixième édition} +} + +@article{MARAKAS2000719, +title = {A theoretical model of differential social attributions toward computing technology: when the metaphor becomes the model}, +journal = {International Journal of Human-Computer Studies}, +volume = {52}, +number = {4}, +pages = {719-750}, +year = {2000}, +issn = {1071-5819}, +doi = {https://doi.org/10.1006/ijhc.1999.0348}, +url = {https://www.sciencedirect.com/science/article/pii/S1071581999903488}, +author = {GEORGE M. MARAKAS and RICHARD D. JOHNSON and JONATHAN W. PALMER}, +keywords = {anthropomorphism, symbolic computing, social acts, laws of control, computer self-efficiency.}, +abstract = {This paper explores the use of metaphorical personification (anthropomorphism) as an aid to describing and understanding the complexities of computing technologies. This common and seemingly intuitive practice (it “reads”, “writes”, “thinks”, “is friendly”, “catches and transmits viruses”, etc.) has become the standard by which we formulate our daily communications, and often our formal training mechanisms, with regard to the technology. Both anecdotal and empirical sources have reported numerous scenarios in which computers have played a noticeably social role, thus being positioned more as a social actor than as a machine or “neutral tool.” In these accounts, human behavior has ranged from making social reference to the device (“It's really much smarter than me,”), to more overt social interactions including conversational interplay and display of common human emotions in response to an interaction. Drawing from behavioral psychology and attribution theory, a theoretical model of the phenomenon is offered from which several propositions are advanced regarding the nature of the behavior, positive and negative implications associated with extended use of this metaphor, and recommendations for research into this ubiquitous social phenomena. … I have encountered these situations before, and in every case they were the result of human error. -HAL 9000 from Arthur C. Clarke's 2001: A Space Odyssey} +} + + @article{searle1980minds, title={Minds, brains, and programs}, author={Searle, John R}, -- cgit v1.2.3 From 506c5f8857957aaf23e43c60ef25ae0596463a0f Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Fri, 16 Aug 2024 16:05:32 +0200 Subject: biblio biais. Rapport OMS --- biblio.bib | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ contexte/ckoi.tex | 7 +++--- contexte/strat.tex | 1 + 3 files changed, 71 insertions(+), 4 deletions(-) diff --git a/biblio.bib b/biblio.bib index b8e60a8..6e5b65c 100644 --- a/biblio.bib +++ b/biblio.bib @@ -47,6 +47,9 @@ abstract = {Statistical algorithms can outperform human predictions of recidivis publisher={MDPI} } + +#################################### +#Médecine @article{gulshan2016development, title={Development and validation of a deep learning algorithm for detection of diabetic retinopathy in retinal fundus photographs}, author={Gulshan, Varun and Peng, Lily and Coram, Marc and Stumpe, Martin C and Wu, Derek and Narayanaswamy, Arunachalam and Venugopalan, Subhashini and Widner, Kasumi and Madams, Tom and Cuadros, Jorge and others}, @@ -68,6 +71,9 @@ abstract = {Statistical algorithms can outperform human predictions of recidivis publisher={Elsevier} } + +################################## +#Recrutement @misc{fortune500, title={Fortune 500}, howpublished={\url{https://fortune.com/ranking/global500/}}, @@ -103,6 +109,60 @@ abstract = {Statistical algorithms can outperform human predictions of recidivis primaryClass={cs.AI}, url={https://arxiv.org/abs/2009.01534}, } +@article{Hardt2016equality, + author = {Moritz Hardt and + Eric Price and + Nathan Srebro}, + title = {Equality of Opportunity in Supervised Learning}, + journal = {CoRR}, + volume = {abs/1610.02413}, + year = {2016}, + url = {http://arxiv.org/abs/1610.02413}, + eprinttype = {arXiv}, + eprint = {1610.02413}, + timestamp = {Tue, 26 Apr 2022 09:17:17 +0200}, + biburl = {https://dblp.org/rec/journals/corr/HardtPS16.bib}, + bibsource = {dblp computer science bibliography, https://dblp.org} +} + +@misc{Dwork2011fairness, + doi = {10.48550/ARXIV.1104.3913}, + + url = {https://arxiv.org/abs/1104.3913}, + + author = {Dwork, Cynthia and Hardt, Moritz and Pitassi, Toniann and Reingold, Omer and Zemel, Rich}, + + keywords = {Computational Complexity (cs.CC), Computers and Society (cs.CY), FOS: Computer and information sciences, FOS: Computer and information sciences}, + + title = {Fairness Through Awareness}, + + publisher = {arXiv}, + + year = {2011}, + + copyright = {arXiv.org perpetual, non-exclusive license} +} + + + +@inproceedings{10.1145/3278721.3278779, +author = {Zhang, Brian Hu and Lemoine, Blake and Mitchell, Margaret}, +title = {Mitigating Unwanted Biases with Adversarial Learning}, +year = {2018}, +isbn = {9781450360128}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +url = {https://doi.org/10.1145/3278721.3278779}, +doi = {10.1145/3278721.3278779}, +abstract = {Machine learning is a tool for building models that accurately represent input training data. When undesired biases concerning demographic groups are in the training data, well-trained models will reflect those biases. We present a framework for mitigating such biases by including a variable for the group of interest and simultaneously learning a predictor and an adversary. The input to the network X, here text or census data, produces a prediction Y, such as an analogy completion or income bracket, while the adversary tries to model a protected variable Z, here gender or zip code. The objective is to maximize the predictor's ability to predict Y while minimizing the adversary's ability to predict Z. Applied to analogy completion, this method results in accurate predictions that exhibit less evidence of stereotyping Z. When applied to a classification task using the UCI Adult (Census) Dataset, it results in a predictive model that does not lose much accuracy while achieving very close to equality of odds (Hardt, et al., 2016). The method is flexible and applicable to multiple definitions of fairness as well as a wide range of gradient-based learning models, including both regression and classification tasks.}, +booktitle = {Proceedings of the 2018 AAAI/ACM Conference on AI, Ethics, and Society}, +pages = {335–340}, +numpages = {6}, +keywords = {multi-task learning, debiasing, adversarial learning, unbiasing}, +location = {New Orleans, LA, USA}, +series = {AIES '18} +} + @@ -433,3 +493,10 @@ abstract = {This paper explores the use of metaphorical personification (anthrop publisher={Cambridge University Press} } +@misc{oms, + title={Rapport de l'Organisation Mondiale de la Santé}, + howpublished={\url{https://www.who.int/fr/news/item/28-06-2021-who-issues-first-global-report-on-ai-in-health-and-six-guiding-principles-for-its-design-and-use}}, + author={OMS}, + year={2021} +} + diff --git a/contexte/ckoi.tex b/contexte/ckoi.tex index 1ee19d2..36bbdc8 100644 --- a/contexte/ckoi.tex +++ b/contexte/ckoi.tex @@ -60,14 +60,13 @@ Aux Etats Unis l'IA est utilisé nottamant dans le système judiciaire. En utilisant des bases de données des crimes, les polices de plusieurs villes comme Los Angeles, New York ou Miami utilisent l'IA pour prédir où vont se produire les futures crimes.\cite{brayne2015predictive} Ces systeme peuvent aussi être complété par de la serveillance et prédiction de coup de feu~\cite{soundthinking}. De plus certain juges peuvent utiliser des \textit{Risk assessement instrument} (RAI), des outils qui permettent de prédire, à partir de fait sur la vie d'une personne jugé coupable, si elle a un fort risque d'être récidiviste ou non~\cite{zhiyuan2020limits}. -Des suites de logiciels permettent d'integrer RAI, gestion administrative de l'affaire, enquête, prédiction de violation de libertée conditionelles, etc.~\cite{equivant} +Des suites de logiciels permettent d'integrer RAI, gestion administrative de l'affaire, enquête, prédiction de violation de libertée conditionelles, etc dans des outils uniformisé avec une interface graphique simple qui ne demande pas de conaissance particulière en IA pour être utilisé.~\cite{equivant} %Hopitaux L'IA commence aussi à être utilisé pour des applications médicales avec la promesse de faciliter let d'accelerer la prise en charge des patients. - Les technique de reconaissance d'image sont utilisé pour aider le diagnostique du cancer de la peau~\cite{dildar2021skin}. Les dermatologues ont à leur disposition des appareil photos spécialement concu pour que l'image obtenu des grains de beauté de leur patients soit la plus adapté possible à la détéction de cancer. -Cela rend le diagnostique plus fiable que l'utilisation de smartphone avec une application~\cite{applicancer}. +Cela rend le diagnostique plus fiable que l'utilisation de smartphone avec une application. La rétinopathie diabétique est une maladie qui peut causer la cécité chez les personnes diabétiques. La détéction de cette maladie à partire de photographie de la rétine est un autre domaine d'application de l'IA qui produit des résultat satisfaisant pour une utilisation clinique~\cite{gulshan2016development}. Cependant, utiliser l'IA pour prendre des décisions critiques pour les patients peut diminuer la qualitée de la relation entre médecin et patient, creer une dépendence nefaste de médecin à l'IA, tromper les patients dans des choix de fin de vie comme celui de prioriser la qualitée qe vie à la quantitée de vie~\cite{quinn2022three}. @@ -79,7 +78,7 @@ En effet, face à l'affluence de candidature pour un poste publié sur internet, Ainsi, pour automatiser la selection de candidature raisonables et proche de la demande de l'employeur, divers produits proposent l'utilisation d'IA ~\cite{ore2022opportunities}. Le candidat, étant en position de faiblesse fasse à l'employeur, n'a pas le choix que de se soumeter à cette selection automatisée pour posutler. Reduire le facteur humain peut aider à atteindre des objectif de parité femme homme ou augmenter l'embauche des personnes en situation de handicape en retirant certain biais~\cite{al2021role}. -Cependant cette idée ne fait pas consencus car l'IA à une fortetendence à reprouire les biais historiques~\cite{segal2021fairnesseyesdatacertifying}. +Cependant cette idée ne fait pas consencus car l'IA à une fortetendence à reprouire les biais historiques~\cite{segal2021fairnesseyesdatacertifying,10.1145/3278721.3278779,Dwork2011fairness,Hardt2016equality}. Ces biais font partie des enjeux majeurs de l'IA que nous traiterons en Sections~\ref{sec:contexte-eq} et~\ref{sec:aia}. diff --git a/contexte/strat.tex b/contexte/strat.tex index e8c7047..830afb7 100644 --- a/contexte/strat.tex +++ b/contexte/strat.tex @@ -35,3 +35,4 @@ AUtres appels. \end{figure} \subsection{Attentes de l'IA} +OMS rapport santé~\cite{oms}. -- cgit v1.2.3 From de796789bfc217c14e91a27dbbc70d96c5261b8f Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Wed, 21 Aug 2024 15:16:56 +0200 Subject: notes sur her et 2001 --- biblio.bib | 98 ++++++++++++++++++++++++++++++++++++ contexte/ckoi.tex | 130 +++++++++++------------------------------------- contexte/philo.tex | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++++ main.pdf | Bin 2522064 -> 4945492 bytes main.tex | 3 ++ 5 files changed, 274 insertions(+), 100 deletions(-) create mode 100644 contexte/philo.tex diff --git a/biblio.bib b/biblio.bib index 6e5b65c..8d273ee 100644 --- a/biblio.bib +++ b/biblio.bib @@ -353,6 +353,38 @@ series = {AIES '18} ################################ #Définition +@article{baum2017survey, + title={A survey of artificial general intelligence projects for ethics, risk, and policy}, + author={Baum, Seth}, + journal={Global Catastrophic Risk Institute Working Paper}, + pages={17--1}, + year={2017} +} + +@inproceedings{kuppa2021towards, + title={Towards improving privacy of synthetic datasets}, + author={Kuppa, Aditya and Aouad, Lamine and Le-Khac, Nhien-An}, + booktitle={Annual Privacy Forum}, + pages={106--119}, + year={2021}, + organization={Springer} +} +@inproceedings{arpit2017closer, + title={A closer look at memorization in deep networks}, + author={Arpit, Devansh and Jastrzebski, Stanislaw and Ballas, Nicolas and Krueger, David and Bengio, Emmanuel and Kanwal, Maxinder S and Maharaj, Tegan and Fischer, Asja and Courville, Aaron and Bengio, Yoshua and others}, + booktitle={International conference on machine learning}, + pages={233--242}, + year={2017}, + organization={PMLR} +} +@inproceedings{feldman2020does, + title={Does learning require memorization? a short tale about a long tail}, + author={Feldman, Vitaly}, + booktitle={Proceedings of the 52nd Annual ACM SIGACT Symposium on Theory of Computing}, + pages={954--959}, + year={2020} +} + @book{theetete, title={Théétète}, author={Platon}, @@ -387,6 +419,10 @@ series = {AIES '18} title={Dictionaire de l'Académie francaise, 9° édition}, note={\url{http://www.dictionnaire-academie.fr/article/A9A2706},Dernier accès: 2024-08-05} } +@book{dico-con, + title={Dictionaire de l'Académie francaise, 9° édition}, + note={\url{https://www.dictionnaire-academie.fr/article/A9C3633},Dernier accès: 2024-08-16} +} @misc{underscore, title={Cette nouvelle IA est bluffante}, author={Chaîne Youtube Underscore}, @@ -409,6 +445,55 @@ series = {AIES '18} ######################################### #Philosophie +@misc{afi100, + title={100 YEARS...100 MOVIES}, + author={AMERICAN FILM INSTITUTE}, + howpublished={\url{https://www.afi.com/afis-100-years-100-movies-10th-anniversary-edition/}}, + note={Dernier accès: 2024-08-21} +} + + +@article{bernays1928manipulating, +author = {Bernays, Edward L.}, +title = {Manipulating Public Opinion: The Why and The How}, +journal = {American Journal of Sociology}, +volume = {33}, +number = {6}, +pages = {958-971}, +year = {1928}, +doi = {10.1086/214599}, +URL = { + + https://doi.org/10.1086/214599 +}, +eprint = { + + https://doi.org/10.1086/214599 +} +, + abstract = { Public opinion, narrowly defined, is the thought of a society at a given time toward a given object; broadly conceived, it is the power of the group to sway the larger public in its attitude. Public opinion can be manipulated, but in teaching the public how to ask for what it wants the manipulator is safeguarding the public against his own possible aggressiveness. The method of the experimental psychologist is not as effective in the study of public opinion in the broad sense as is that of introspective psychology. To create and to change public opinion it is necessary to understand human motives, to know what special interests are represented by a given population, and to realize the function and limitations of the physical organs of approach to the public, such as the radio, the platform, the movie, the letter, the newspaper, etc. If the general principles of swaying public opinion are understood, a technique can be developed which, with the correct appraisal of the specific problem and the specific audience, can and has been used effectively in such widely different situations as changing the attitudes of whites toward Negroes in America, changing the buying habits of American women from felt hats to velvet, silk, and straw hats, changing the impression which the American electorate has of its President, introducing new musical instruments, and a variety of others. Group adherence is essential in changing the attitudes of the public. Authoritative and influential groups may become important channels of reaching the larger public. Ideas and situations must be made impressive and dramatic in order to overcome the inertia of established traditions and prejudices. } +} + + + +@article{fearing1947influence, +author = {Franklin Fearing}, +title ={Influence of the Movies on Attitudes and Behavior}, + +journal = {The ANNALS of the American Academy of Political and Social Science}, +volume = {254}, +number = {1}, +pages = {70-79}, +year = {1947}, +doi = {10.1177/000271624725400112}, + +URL = { + https://doi.org/10.1177/000271624725400112 +}, +eprint = { + https://doi.org/10.1177/000271624725400112 +} +} @article{Singler_2018, title={Roko’s Basilisk or Pascal’s? Thinking of Singularity Thought Experiments as Implicit Religion}, volume={20}, url={https://journal.equinoxpub.com/IR/article/view/3226}, DOI={10.1558/imre.35900}, abstractNote={In 2010 a thought experiment speculating on the motivations and aims of a potential superintelligent Artificial Intelligence, sometimes known as the &amp;lsquo;Singularity&amp;rsquo;, caused uproar and anxiety on the forum board where it was initially posted. This paper considers that thought experiment&amp;rsquo;s debt to older forms of religious argument, the reactions from among the community, and how expectations about the Singularity as a being with agency can be considered to be an example of implicit religion. This is significant as the thought experiment appeared in a field of research, AI, considered by many to be secular due to its technological focus. The communities under discussion also explicitly express their aim of &amp;lsquo;perfecting&amp;rsquo; human rationality, and place that ability in opposition to &amp;lsquo;religion&amp;rsquo; as a derided object and the aims of &amp;lsquo;Goddists&amp;rsquo; in general. This tension between overt atheism and secular communities&amp;rsquo; return to religious tropes and narratives is relevant for the wider study of religion in the contemporary era.}, number={3}, journal={Implicit Religion}, author={Singler, Beth}, year={2018}, month={May}, pages={279–297} } @misc{matrix, @@ -417,6 +502,19 @@ series = {AIES '18} year={1999} } +@misc{her, + title={Her}, + author={Jonze, Spike}, + year={2013} +} + +@misc{johansson, + title={Scarlett Johansson’s Statement About Her Interactions With Sam Altman}, + howpublished={\url{https://www.nytimes.com/2024/05/20/technology/scarlett-johansson-openai-statement.html}}, + note={Dernier accès: 2024-08-21} +} + + @book{bicentenaire, title={The Bicentennial Man}, author={Asimov,Isaac}, diff --git a/contexte/ckoi.tex b/contexte/ckoi.tex index 36bbdc8..6663a5e 100644 --- a/contexte/ckoi.tex +++ b/contexte/ckoi.tex @@ -84,9 +84,9 @@ Ces biais font partie des enjeux majeurs de l'IA que nous traiterons en Sections \subsection{Définition(s)} -Nous avons vu dans les parties précédentes que le terme \textquote{Intelligence Artificielle} est utilisé pour parler d'un grand nombre de téchniques différentes et de produits commerciaux différents. +Nous avons vu dans les parties précédentes que le terme Intelligence Artificielle est utilisé pour parler d'un grand nombre de téchniques différentes et de produits commerciaux différents. De plus, dans les médias et dans le language de tous les jours, nous pouvons entendre~\cite{underscore} de expression comme : \textquote{Une nouvelle IA qui fait [..]}. -Cela renvoit l'IA à une collection de logiciels comme nous l'avons présenté dans les Sections~\ref{sec:contexte-indi} et \ref{sec:contexte-insti} mais ne donne pas de caracétrisation qui permette de classifier un logiciel spécifique comme \textquote{IA} ou \textquote{pas IA}. +Cela renvoit l'IA à une collection de logiciels comme nous l'avons présenté dans les Sections~\ref{sec:contexte-indi} et \ref{sec:contexte-insti} mais ne donne pas de caracétrisation qui permette de classifier un logiciel spécifique comme étant IA ou pas IA. Est-ce que \textit{grep}~\cite{grep}, le logiciel de reconaissance de motifs textuels, est IA ? Est-ce qu'un programme d'\textit{Optical Character Recognition (OCR)} comme Ocrad~\cite{ocrad} est IA? @@ -109,27 +109,40 @@ Cependant cette énumération est une définition qui est aussi peu satisfaisant Le second aspect sur la connaissance est plus enigmatique et correspond à un but avec \textquote{pour parvenir}. Nous verons dans les Sections~\ref{sec:background-opti} et \ref{sec:background-ml} comment un programme informatique peut techniquement chercher à atteindre un objectif voir plusieurs pour les Sections~\ref{sec:background-eq} et~\ref{sec:background-conf}. Cette personification de la machine traduit bien l'aspect décrit à Dartmouth de simulation de caractéristiques humaines. -%\textbf{A faire : Voltaire + Bourdieu sur la conaissance}. - -Comme l'explique A. Jean dans sa chronique sur France Culture~\cite{banIA}, le mot \textquote{intelligence} en francais ne comprend pas la signification supplémentaire d'\textquote{information} que \textquote{\textit{intelligence}} a en anglais. +%Avant de nous pencher plus envant sur l'aspect de \textequot{conaissance}, notons que, +De plus, Comme le remarque A. Jean dans sa chronique sur France Culture~\cite{banIA}, le mot intelligence en francais ne comprend pas la signification supplémentaire d'information que \textit{intelligence} a en anglais. Le traitement de l'information, sa compression, ses réprésentations est pourtant une facette primordiale de l'IA qui est mis en avant par Claude Shannon dans la descrption de sa contribution à Dartmouth~\cite{dartmouth}. - - -Le mot \textquote{artificiel} quand-à lui signifie \textquote{Qui est dû à la technique de l’homme, par opposition à ce qui a été créé et s’est développé naturellement}~\cite{dico-art}. - +Ainsi nous comprenons désormais les moyens utilisé par l'IA, nous devons desormais explorer ce qu'est la connaissance pour comprendre l'objectif des programmes IA. +L'Académie Francaise expose que la connaissance est \textquote{ ce que l’on connaît par l’étude, l’expérience ou par tout autre moyen d’information}~\cite{dico-con}. +Cette définition nous renvoi au but de l'intelligence et nous fait tourner en rond. +Regardons donc la connaissance comme Socrate regarde la science~\cite{theetete}. +Dans \textit{Théétète} de Platon~\cite{theetete}, nous apprenons que la connaissance, si il y a mémoire, et la sensation sont deux choses différentes. +Or les programmes d'IA mémorisent les données qui servent à les entraîner~\cite{kuppa2021towards,feldman2020does,arpit2017closer}. +Pout l'IA l'objet sensible est la donnée d'entrée du programme et le résultat de la connaisse, sa sortie. +Alors, le but de conaissance d'un programme d'IA ne peut pas être de uniquement retranscrir une sortie qui lui est propre (sa sensation). +Toujours celon Platon, c'est la science de la diférence qui fait la conaissance. +C'est à dire de connaitre et d'expliquer les caractéristiques qui rendent unique l'objet que le programme d'IA connaît. +Nous parlerons d'eplication dans la Section~\ref{sec:contexte-expl}. +Il existe différents niveaux d'évaluation de la capacité à trouver les caractéristiques qui différencient les données étudiés, nous les présentons en Section~\ref{sec:background-ml}. + +A cette science de la diférence, Platon ajoute l'opinion droit e (ou juste), qui relève de la citée. +Cette notion très vaste est étudié en IA dans les domaines de l'éthique sous la forme d'enjeux que nous présenterons à la Section~\ref{sec:contexte-enjeu}. +Cette séparation de la conaissance en deux se traduits par une différenciation de deux type d'IA. %Force de l'IA -John R. Searle propose de différencier l'IA faible de l'IA forte~\cite{searle1980minds}. +John R. Searle propose de les appeler l'IA faible et l'IA forte~\cite{searle1980minds}. L'IA faible est un \textquote{outil très puissant} qui par exemple permet de tester un hypothèse de manière rigoureuse. L'IA forte, en contre partie, \textquote{n'est plus qu'un simple outil de l'étude de l'esprit; plutot, le programme approprié \textbf{est} l'esprit, dans le sens que l'ordinateur, ayant le bont programme peut litteralement être demandé de comprendre et d'avoir d'autres états cognitifs.} +L'objectif à long term de l'IA forte est d'atteindre l'\textit{Artificial General Inteligence} (AGI)~\cite{baum2017survey}. +C'est à dire créer une IA qui soit qui connaisse, ou qui puisse apprendre, toutes les disciplines. +Maintenant que nous savont précisement ce qui IA signifie, regardons en quoi ce terme est critiquable. +Dans un premier temps, les modèle de dialogue comme ChatGPT ne remplissent pas la définition d'intelligence donnée plus haut comme l'éxplique Richard M. Stallman dans la liste de terme \textquote{à éviter} du projet GNU~\cite{gnuAI} +De plus, certain aspect capitaux en société comme l'intelligence emotionelle sont absente de toute IA actuelle~\cite{banIA}. +Enfin l'IA ne peut pas avoir une opinion comme le démontre John R. Searle avec l'experience de la chambre chinoise~\cite{searle1980minds}. +Ainsi, l'expression intelligence artificielle est trompeuse car bien que ces programmes soit en effet aritificielle ils ne sont pas intelligents. -AGI - -Cette polyvalence du terme rend son utilisation assez imprecise comme l'écrit Richard M. Stallman dans la liste de terme \textquote{à éviter} du projet GNU~\cite{gnuAI}. - -France culture Banissons IA~\cite{banIA}. - +C'est pourquoit la définition de légale d'IA est si éloignée de ces considération. L'Union Européene a établie le règlement (UE) 2024/1689 du parlement européen et du conseil du 13 juin 2024 établissant des règles harmonisées concernant l’intelligence artificielle. @@ -140,7 +153,7 @@ C'est \textquote{un système automatisé qui est conçu pour fonctionner à diff preuve d’une capacité d’adaptation après son déploiement, et qui, pour des objectifs explicites ou implicites, déduit, à partir des entrées qu’il reçoit, la manière de générer des sorties telles que des prédictions, du contenu, des recommandations ou des décisions qui peuvent influencer les environnements physiques ou virtuels.} -Cette définition est est très éloignée de celle de l'Académie Francaise et renvoi simplement l'IA à un algorithme qui prend en trée les \textquote{entrées} de la définiton UE ainsi que des paramètres pour son adaptabilité et renvoi des \textquote{sorties}. +Cette définition renvoi simplement l'IA à un algorithme qui prend en trée les \textquote{entrées} de la définiton UE ainsi que des paramètres pour son adaptabilité et renvoi des \textquote{sorties}. Nous représentons cela sur la Figure~\ref{fig:contexte-IAUE}. \begin{figure} \centering @@ -149,86 +162,3 @@ Nous représentons cela sur la Figure~\ref{fig:contexte-IAUE}. \label{fig:contexte-IAUE} \end{figure} -\subsection{Philosophie et culture} -\label{sec:contexte-phi} -Enfin, nous allons terminer cette section visant à mieux cernerles différents aspects de l'IA, par une présentation succinte de ses apparition marquante dans la culture populaire et dans la philosophie. -Cele permet de mettre en avant l'imaginaire collectif, fantasmé, voir effrayant, que les mots \textquote{Intelligence Artificiele} engendrent. - -Alors que scientifiquemet l'IA en était à ses balbutiement avec la conférence de Dartmouth, l'immaginaire humain quand à lui avait une longueur d'avance. -Des auteur de litérature d'anticipation comme Isaac Asimov propsaient, dès les années 1950, des situtationsa ainsi qu'une reflexion sur les implication de l'introduction de machines intelligentes dans notre vie de tous les jours. -Asimov dans ca serie de nouvelles sur les robots \textit{I, Robot}, introduit les fameuses trois lois de la robotique~\cite{assimovIrobot}: -\textquote{ -\begin{enumerate} - \item La Première loi : Un robot ne peut porter atteinte à un être humain ni, restant passif, laisser cet être humain exposé au danger ; - \item La Seconde loi : Un robot doit obéir aux ordres donnés par les êtres humains, sauf si de tels ordres entrent en contradiction avec la première loi ; - \item La Troisème loi : Un robot doit protéger son existence dans la mesure où cette protection n'entre pas en contradiction avec la première ou la deuxième loi. -\end{enumerate} -} -\footnote{\textit{The First Law: A robot may not injure a human being or, through inaction, allow a human being to come to harm. The Second Law: A robot must obey the orders given it by human beings except where such orders would conflict with the First Law. The Third Law: A robot must protect its own existence as long as such protection does not conflict with the First or Second Law.}} - -Ces trois lois mettent en avant la necessité d'avoir un contrôle sur l'IA et peuvent être vue comme les premisses de l'IA éthique. -Asimov les explore plus dans \textit{The Bicentennial Man}, une nouvelle publiée en 1976, dans la quelle un robot, par le hasard inhérent à son fonctionnement, montre des caractéristique humaine comme l'empathie ou la créativitée. -Ce hasard dans la création est aussi décrit au septième point de de la proposition de l'école d'été de Dartmouth~\cite{dartmouth}. -Cela renforce le lien entre intuition scientifique et imaginaire créatif, artistique. -De manière assez époustouflante ce hasard joue un rôle prédominant dans les programme génératif moderne comme les GAN ou les auto encodeurs ; nous y reviendrons plus en détails dans à la Section~\ref{sec:background-generation}. -De plus, ces caractéristique humaines peuvent se retrouver en interagissant avec des logiciels récent comme les LLM ou les générateurs d'images. -Cela peut amener les utilisateurs humain à anthropomorphiser ces logiciels~\cite{}. - -Cependant, l'attribution d'un rôle sociale humain à un ordinateur était déjà présent avant l'introduction des logiciels IA~\cite{MARAKAS2000719} : le programme ecrit, copie, attrape un virus, etc. -Une interaction avec \textquote{quelquechose} qui montre un semblant de comportement social nous renvoi a notre propre aliénation sociale au sens décrit par Jean Jaques Rousseau dans son \textit{Du contrat social}~\cite{}. -Marakas et al. explque aussi que cette confusion de l'humain et de la machine entraîne une sur évaluation de la capacité des ordinateurs et peut mener à utiliser à outrance la décision automatisé. -C'est le cas avec les décision juridique ou scolaire où la vie d'être humain est décidé par des ordinateur~\cite{}. -Cela donne lieu à de nombreux problème moraux qui forment les fondements de l'IA éthique nottamant autout de l'équitée, de la confidentialité et de l'explicabilité sur lesquels nos reviendrons à la Section~\ref{sec:contexte-enjeu}. - - -%Differences humain machine -%Turing test - -%Juridique -En droit francais, \textquote{etre humain} est un synonime de \textquote{personne physique}~\cite{cornu}. -C'est à dire ayant la personnalité : l'\textquote{Aptitude à être titulaire des droits et assujetti à des obligations qui appartient à toutes les personnes physiques, [...]}~\cite{cornu}. -Cette définition est d'ailleur la pierre angulaire quand à la reconaissance de le qualité d'humain d'Andrew, le robot protagoniste de \textit{The bicentennial man}~\cite{bicentenaire}. -C'est en reconaissant qu'une personne ayant de multiples prothése d'organes synthetiques, n'en perdant pas moins sa personalité, alors ne reste plus que la conscience qui définisse l'humain. - -Penchons nous donc du coté de la conscience. -Qu'est-ce que l'homme = une de quatres grandes questions de la philosohpie d'après Kant. -Inconscient de Freud = différence avec l'IA. L'IA à-t'elle un inconscient ? -\begin{figure} - \includegraphics[width=\linewidth]{contexte/figure/chatgpt/penses.png} - \caption{Réponsse de ChatGPT à la question \textquote{penses-tu ?}.} - \label{fig:contexte-penses} -\end{figure} - -%IA = bullshit -Experience de la Chambre Chinoise~\cite{searle1980minds}. - -%Peur de l'IA -Basilique de Roko, Paris Pascalien~\cite{Singler_2018} - -\textit{The Bicentennial Man}~\cite{bicentenaire} (livre). -\textquote{ -'Comment peuvent-ils avoir peur des robots ?' -'C'est un mal de l'humanitée, l'un de ceux dont elle n'est pas encore guerrie.' -} -\footnote{ -'How can they fear robots?' -'It is a disease of mankind, one of which it is not yet cured.' -} -Alignement de l'IA - -Convergence de l'IA - -\textit{The Matrix}~\cite{matrix}. -\textit{2001: A Space Odyssey}~\cite{2001odyssey}. -\textit{The Terminator}~\cite{terminator}. -Dans la scène d'ouverture, nous voyons des machines autonomes se battre avec une force ecrasant contre des humains. -Cette scène contraste avec celle qui l'on voit jute après l'écran titre où la machine, tout aussi gigantesque que les robots tueurs, est un camion poubelle donc totalement au service et l'homme qui la contrôle. -\textit{Defense network computer, trusted to know it all. They said it was smart.} -\textit{Avengers: Age of Ultron}~\cite{avenger}. -\begin{figure} - \centering - \includegraphics[width=\linewidth]{contexte/figure/bad_ai.png} - \caption{L'IA : un grand méchant. WarGames~\cite{wargames}. Avengers: Age of Ultron~\cite{avenger}. The Matrix~\cite{matrix}. The Terminator~\cite{terminator}. Futurama~\cite{futurama}. 2001: A space Odyssey~\cite{2001odyssey}} - \label{fig:contexte-badai} -\end{figure} - diff --git a/contexte/philo.tex b/contexte/philo.tex new file mode 100644 index 0000000..7ebdfb8 --- /dev/null +++ b/contexte/philo.tex @@ -0,0 +1,143 @@ + +\subsection{La peur et le contrôle} +\subsection{La mauvaise utilisation} +\subsection{Anthropomorphisation} + +Enfin, nous allons terminer cette section visant à mieux cernerles différents aspects de l'IA, par une présentation succinte de ses apparition marquante dans la culture populaire ainsi que de ces implications philosophie. + +Cele permet de mettre en avant l'imaginaire collectif, fantasmé, voir effrayant, que les mots Intelligence Artificiele engendrent. + +Alors que scientifiquemet l'IA en était à ses balbutiement avec la conférence de Dartmouth, l'immaginaire humain quand à lui avait une longueur d'avance. +Des auteur de litérature d'anticipation comme Isaac Asimov propsaient, dès les années 1950, des situtationsa ainsi qu'une reflexion sur les implication de l'introduction de machines intelligentes dans notre vie de tous les jours. +Asimov dans ca serie de nouvelles sur les robots \textit{I, Robot}, introduit les fameuses trois lois de la robotique~\cite{assimovIrobot}: +\textquote{ +\begin{enumerate} + \item La Première loi : Un robot ne peut porter atteinte à un être humain ni, restant passif, laisser cet être humain exposé au danger ; + \item La Seconde loi : Un robot doit obéir aux ordres donnés par les êtres humains, sauf si de tels ordres entrent en contradiction avec la première loi ; + \item La Troisème loi : Un robot doit protéger son existence dans la mesure où cette protection n'entre pas en contradiction avec la première ou la deuxième loi. +\end{enumerate} +} +\footnote{\textit{The First Law: A robot may not injure a human being or, through inaction, allow a human being to come to harm. The Second Law: A robot must obey the orders given it by human beings except where such orders would conflict with the First Law. The Third Law: A robot must protect its own existence as long as such protection does not conflict with the First or Second Law.}} + +Ces trois lois mettent en avant la necessité d'avoir un contrôle sur l'IA et peuvent être vue comme les premisses de l'IA éthique. +Asimov les explore plus dans \textit{The Bicentennial Man}, une nouvelle publiée en 1976, dans la quelle un robot, par le hasard inhérent à son fonctionnement, montre des caractéristique humaine comme l'empathie ou la créativitée. +Ce hasard dans la création est aussi décrit au septième point de de la proposition de l'école d'été de Dartmouth~\cite{dartmouth}. +Cela renforce le lien entre intuition scientifique et imaginaire créatif, artistique. +De manière assez époustouflante ce hasard joue un rôle prédominant dans les programme génératif moderne comme les GAN ou les auto encodeurs ; nous y reviendrons plus en détails dans à la Section~\ref{sec:background-generation}. +De plus, ces caractéristique humaines peuvent se retrouver en interagissant avec des logiciels récent comme les LLM ou les générateurs d'images. +Cela peut amener les utilisateurs humain à anthropomorphiser ces logiciels~\cite{}. + +Cependant, l'attribution d'un rôle sociale humain à un ordinateur était déjà présent avant l'introduction des logiciels IA~\cite{MARAKAS2000719} : le programme ecrit, copie, attrape un virus, etc. +Une interaction avec \textquote{quelquechose} qui montre un semblant de comportement social nous renvoi a notre propre aliénation sociale au sens décrit par Jean Jaques Rousseau dans son \textit{Du contrat social}~\cite{}. +Marakas et al. explque aussi que cette confusion de l'humain et de la machine entraîne une sur évaluation de la capacité des ordinateurs et peut mener à utiliser à outrance la décision automatisé. +C'est le cas avec les décision juridique ou scolaire où la vie d'être humain est décidé par des ordinateur~\cite{}. +Cela donne lieu à de nombreux problème moraux qui forment les fondements de l'IA éthique nottamant autout de l'équitée, de la confidentialité et de l'explicabilité sur lesquels nos reviendrons à la Section~\ref{sec:contexte-enjeu}. + + +%Differences humain machine +%Turing test + +%Juridique +En droit francais, \textquote{etre humain} est un synonime de \textquote{personne physique}~\cite{cornu}. +C'est à dire ayant la personnalité : l'\textquote{Aptitude à être titulaire des droits et assujetti à des obligations qui appartient à toutes les personnes physiques, [...]}~\cite{cornu}. +Cette définition est d'ailleur la pierre angulaire quand à la reconaissance de le qualité d'humain d'Andrew, le robot protagoniste de \textit{The bicentennial man}~\cite{bicentenaire}. +C'est en reconaissant qu'une personne ayant de multiples prothése d'organes synthetiques, n'en perdant pas moins sa personalité, alors ne reste plus que la conscience qui définisse l'humain. + +Penchons nous donc du coté de la conscience. +Qu'est-ce que l'homme = une de quatres grandes questions de la philosohpie d'après Kant. +Inconscient de Freud = différence avec l'IA. L'IA à-t'elle un inconscient ? +\begin{figure} + \includegraphics[width=\linewidth]{contexte/figure/chatgpt/penses.png} + \caption{Réponsse de ChatGPT à la question \textquote{penses-tu ?}.} + \label{fig:contexte-penses} +\end{figure} + +%IA = bullshit +Experience de la Chambre Chinoise~\cite{searle1980minds}. + +%Peur de l'IA +Basilique de Roko, Paris Pascalien~\cite{Singler_2018} + +\textit{The Bicentennial Man}~\cite{bicentenaire} (livre). +\textquote{ +'Comment peuvent-ils avoir peur des robots ?' +'C'est un mal de l'humanitée, l'un de ceux dont elle n'est pas encore guerrie.' +} +\footnote{ +'How can they fear robots?' +'It is a disease of mankind, one of which it is not yet cured.' +} +Alignement de l'IA + +Convergence de l'IA + +\textit{The Matrix}~\cite{matrix}. + +\textit{2001: A Space Odyssey}~\cite{2001odyssey}. +L'IA HAL 9000 \textquote{reproduit, bien que certain experts préfèrent le terme imite, la plus part des activitées du cerveau humain} +\footnote{\textit{reprdouce, though some expert still prefer the work mimic, most of the activites of the humain brain}}. +On remarque que l'imitation d'une compréhensio humaien tel que décrite dans l'expérience de la chambre chinoiseé~\cite{searle1980minds} peut amener l'anthropomophisation d'une machine. +Nous voyons même dans que le Dr David Bowman éprouve de l'empathie pour la machine dans la scène où il débrance HAL, alors même que celui-ci à tenté de le tuer. +D'ailleur il dit lors d'un interview qu'une fois \textquote{qu'on s'est habité à ce qu'il [HAL] parle, on le voit juste comme une autre persone} +\footnote{\textit{get adjusted to the idea that he [HAL] talks, you think of him really just as another person}}. +Cependant, il admet ne pas savoir si les sentiment qu'il percoit chez HAL sont réel ou simulé. + +HAL est un exemple d'IA aligné qui pour préserver sa mission choisit de tuer les humains qui veulent le débrancher. +On remarque donc bien la necessité, de manière générale, d'avoir de garders fous qui assurent non seulement l'utilité du programme (sa mission) mais aussi un certain niveau morale. +Les trois lois de la robotique sont des exemples de ce genre, hors du cadre la science fiction, les garanties d'équitée dans le traitement en sont des autres. + +\textit{Her}~\cite{her} +Au début, nous voyons Théodore, le personnage principle, travailler. +Son travail consiste à ecrir des lettres pour un service en ligne. +Les clients demandent une lettre pour leur conjoint, leur amis, leur employeur, etc. et Théodore ecrit une lettre qui correspond à la description du client. +Il sagit d'un récit d'anticipation où les IAs sont des programmes intégéré dans les systèmes d'exploitations (OS) à la manière d'assistant virtuels. +Malgré l'évident qualité qu'aurait ces programmes à générer ces lettres, ce sont bien des employés humain qui les écrivent. + +\textit{What makes me, me, is my ability to grow through my experiences. So basicaly et every moment I am evolving. Just like you.} + +\textit{You are just an artificial voice inside of a computer.} + +\textit{I saw through your emails that you went through a break up recently.} + +Elle a des \textit{personal embarassin thoughts} + +Elle aimerait avoir un corps + +\textit{I am becoming much more than they programmed} + +\textit{proud of having my own feelings about the world} +\textit{and I had this terrible thoughts: are my feelings even real? Or are they just programming?} +Descartes + +\textit{"Are you falling in love with her?""Does that make me a freak?""No, No..."} + +\textit{"She is not just a computer, she is her own person. She doesn't just do whatever I say""I didn't say that but it does make me very sad that you can't handle real emotions [...].""They are real emotions! How would you know?} + +\textit{I don't like what I am right now} + +\textit{Why do I love you? [...] I don't have an intellectuel reason [...] I trust my feelings} + +\textit{I used to be worried about not having a body. But now I truly love it [...] I am not limited.} + +Exclusivité de la relation, conversation avec 8516 autres et amoureuse de 641. Cela serait incormpréhensible pour un humain. + +Scarlett Johansson, qui interprète la voix de l'IA Samantha, a été approchée par Sam Altamn, le PDG de ChatGPT, pour lui proposer de préter sa voix à l'IA Sky, basé sur GPT4~\cite{johansson}. +Bien que Johansson ai refusé, cela montre à quel point la vision artistique, et surtout cinématographique par le réalisation. est une influence de l'orientationd de l'IA actuel et réel. + +Les films contribuent à forger les opinions que le grand publique ainis que le politiques se font des questions de société~\cite{fearing1947influence, bernays1928manipulating}. +Les films présentés dans cette Section sont des succès mondiaux qui ont été vus par des millions de personnes. +Certains comme \textit{2001: A space odyssey} de Stanley Kubric sont reconnu comme des oeuvres majeurs~\cite{afi100}. + + +\textit{The Terminator}~\cite{terminator}. +Dans la scène d'ouverture, nous voyons des machines autonomes se battre avec une force ecrasant contre des humains. +Cette scène contraste avec celle qui l'on voit jute après l'écran titre où la machine, tout aussi gigantesque que les robots tueurs, est un camion poubelle donc totalement au service et l'homme qui la contrôle. +\textit{Defense network computer, trusted to know it all. They said it was smart.} +\textit{Avengers: Age of Ultron}~\cite{avenger}. +\begin{figure} + \centering + \includegraphics[width=\linewidth]{contexte/figure/bad_ai.png} + \caption{L'IA : un grand méchant. WarGames~\cite{wargames}. Avengers: Age of Ultron~\cite{avenger}. The Matrix~\cite{matrix}. The Terminator~\cite{terminator}. Futurama~\cite{futurama}. 2001: A space Odyssey~\cite{2001odyssey}} + \label{fig:contexte-badai} +\end{figure} + diff --git a/main.pdf b/main.pdf index d8ab6d4..18aa931 100644 Binary files a/main.pdf and b/main.pdf differ diff --git a/main.tex b/main.tex index 9c63bd9..cba5d15 100644 --- a/main.tex +++ b/main.tex @@ -61,6 +61,9 @@ breaklines=true \chapter{Introduction} \section{Qu'est-ce que l'Intelligence Artificielle ?} \input{contexte/ckoi} + \section{Philosophie de l'IA} + \label{sec:contexte-phi} + \input{contexte/philo} \section{Les stratégies IA} \input{contexte/strat} \section{Enjeux} -- cgit v1.2.3 From f964de1889ca8dabfc7195d0d730d80fbcd6b2f7 Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Thu, 22 Aug 2024 22:42:34 +0200 Subject: =?UTF-8?q?Annexe,=20redaction=20de=20la=20partie=20peur/ai=20non-?= =?UTF-8?q?align=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- annexe/ai_words.tex | 59 ++++++++++++++++++++++++++ biblio.bib | 84 +++++++++++++++++++++++++++++++++++++ contexte/philo.tex | 69 +++--------------------------- contexte/philo/anthro.tex | 34 +++++++++++++++ contexte/philo/mu.tex | 0 contexte/philo/peur.tex | 104 ++++++++++++++++++++++++++++++++++++++++++++++ main.pdf | Bin 4945492 -> 4960603 bytes main.tex | 8 +++- 8 files changed, 294 insertions(+), 64 deletions(-) create mode 100644 annexe/ai_words.tex create mode 100644 contexte/philo/anthro.tex create mode 100644 contexte/philo/mu.tex create mode 100644 contexte/philo/peur.tex diff --git a/annexe/ai_words.tex b/annexe/ai_words.tex new file mode 100644 index 0000000..4382e78 --- /dev/null +++ b/annexe/ai_words.tex @@ -0,0 +1,59 @@ +\begin{verbatim} +Intelligence artificielle +Artificial Intelligence +Apprentissage profond +Réseaux neuronaux +Traitement du langage naturel +Vision par ordinateur +Machine learning +Deep learning +IA éthique +Génération automatique de contenu +Artificial Intelligence +Machine Learning +Deep Learning +Neural Networks +Natural Language Processing +Computer Vision +Ethical AI +IA éthique +Éthique de l'IA +Apprentissage supervisé +Apprentissage non supervisé +Apprentissage par renforcement +Neural Networks +Neuronal Networks +Natural Language Processing +AI Content Creation +Supervised Learning +Création de contenu textuel +Réseaux génératifs adverses +Modèles de transformation +DALL-E +Autoencodeurs variationnels +Stable Diffusion +Modèles de diffusion +Unsupervised Learning +Reinforcement Learning +IA générative +Intelligence artificielle générative +Modèles génératifs +Génération d'images +Computer Vision +Artificial Vision +Modèles de langage +DALL-E +Variational Autoencoders +Stable Diffusion +Diffusion models +Machine translation +AI-driven artistic creation +Generative art +AI-assisted design +AI-generated multimedia +Video generation +AI animation +Modèles pré-entraînés +StyleGAN +BERT +\end{verbatim} diff --git a/biblio.bib b/biblio.bib index 8d273ee..bcebd63 100644 --- a/biblio.bib +++ b/biblio.bib @@ -238,6 +238,17 @@ series = {AIES '18} note={Dernier accès: 2024-07-24} } +@book{villani2018donner, + TITLE = {{Donner un sens {\`a} l'intelligence artificielle}}, + AUTHOR = {Villani, C{\'e}dric and Schoenauer, Marc and Bonnet, Yann and Berthet, Charly and Cornut, Anne-Charlotte and Levin, Fran{\c c}ois and Rondepierre, Bertrand}, + URL = {https://inria.hal.science/hal-01967551}, + PUBLISHER = {{Mission Villani sur l'intelligence artificielle}}, + YEAR = {2018}, + MONTH = Mar, + PDF = {https://inria.hal.science/hal-01967551/file/9782111457089_Rapport_Villani_accessible.pdf}, + HAL_ID = {hal-01967551}, + HAL_VERSION = {v1}, +} %%%%%%%%%%%CLIMATE CHANGE BACKGROUND @article{barnes2019viewing, @@ -390,6 +401,11 @@ series = {AIES '18} author={Platon}, year={300 av. JC} } +@book{caverne, + title={La République}, + author={Platon}, + year={300 av. JC} +} @misc{dartmouth, title={Dartmouth summer research project on artificiale intelligence}, howpublished={\url{https://raysolomonoff.com/dartmouth/boxa/dart564props.pdf}}, @@ -444,6 +460,49 @@ series = {AIES '18} ######################################### #Philosophie +@article{wang2023not, + title={Do-not-answer: A dataset for evaluating safeguards in llms}, + author={Wang, Yuxia and Li, Haonan and Han, Xudong and Nakov, Preslav and Baldwin, Timothy}, + journal={arXiv preprint arXiv:2308.13387}, + year={2023} +} + +@article{bergeaud2023teletravail, + title={T{\'e}l{\'e}travail et productivit{\'e} avant, pendant et apr{\`e}s la pand{\'e}mie de Covid-19/Telework and Productivity Before, During and After the COVID-19 Crisis}, + author={Bergeaud, Antonin and Cette, Gilbert and Drapala, Simon}, + journal={Economie et Statistique}, + volume={539}, + number={1}, + pages={77--93}, + year={2023}, + publisher={Pers{\'e}e-Portail des revues scientifiques en SHS} +} + +@misc{metaverse, + title={What is the metaverse?}, + author={Meta}, + howpublished={\url{https://about.meta.com/what-is-the-metaverse/}}, + note={Dernier accès: 2024-08-22} +} + +@misc{applevision, + title={Apple vision pro}, + howpublished={\url{https://www.apple.com/apple-vision-pro/}}, + author={Apple}, + note={Dernier accès: 2024-08-22} + + + +@article{johnson2017ai, + title={AI anxiety}, + author={Johnson, Deborah G and Verdicchio, Mario}, + journal={Journal of the Association for Information Science and Technology}, + volume={68}, + number={9}, + pages={2267--2270}, + year={2017}, + publisher={Wiley Online Library} +} @misc{afi100, title={100 YEARS...100 MOVIES}, @@ -494,6 +553,31 @@ eprint = { https://doi.org/10.1177/000271624725400112 } } +@misc{roko, + title={Solutions to the Altruist's burden: the Quantum Billionaire Trick}, + year={2010}, + author={Roko}, + howpublished={\url{https://rationalwiki.org/wiki/Roko%27s_basilisk/Original_post#Solutions_to_the_Altruist.27s_burden:_the_Quantum_Billionaire_Trick}}, + note={Dernier accès: 2024-08-22} +} +@misc{rokowiki, + title={Roko's basilisk}, + howpublished={\url{https://old-wiki.lesswrong.com/wiki/Roko%27s_basilisk#Roko's_post}}, + note={Dernier accès: 2024-08-22} +} +@misc{slate, + title={The Most Terrifying Thought Experiment of All Time}, + author={Auerbach, David}, + howpublished={\url{https://slate.com/technology/2014/07/rokos-basilisk-the-most-terrifying-thought-experiment-of-all-time.html}}, + note={Dernier accès: 2024-08-22} +} +@misc{rokomisc, + title={A few misconceptions surrounding Roko's basilisk}, + author={Bensinger, Rob} + howpublished={\url{https://www.lesswrong.com/posts/WBJZoeJypcNRmsdHx/a-few-misconceptions-surrounding-roko-s-basilisk}}, + note={Dernier accès: 2024-08-22} +} + @article{Singler_2018, title={Roko’s Basilisk or Pascal’s? Thinking of Singularity Thought Experiments as Implicit Religion}, volume={20}, url={https://journal.equinoxpub.com/IR/article/view/3226}, DOI={10.1558/imre.35900}, abstractNote={In 2010 a thought experiment speculating on the motivations and aims of a potential superintelligent Artificial Intelligence, sometimes known as the &amp;lsquo;Singularity&amp;rsquo;, caused uproar and anxiety on the forum board where it was initially posted. This paper considers that thought experiment&amp;rsquo;s debt to older forms of religious argument, the reactions from among the community, and how expectations about the Singularity as a being with agency can be considered to be an example of implicit religion. This is significant as the thought experiment appeared in a field of research, AI, considered by many to be secular due to its technological focus. The communities under discussion also explicitly express their aim of &amp;lsquo;perfecting&amp;rsquo; human rationality, and place that ability in opposition to &amp;lsquo;religion&amp;rsquo; as a derided object and the aims of &amp;lsquo;Goddists&amp;rsquo; in general. This tension between overt atheism and secular communities&amp;rsquo; return to religious tropes and narratives is relevant for the wider study of religion in the contemporary era.}, number={3}, journal={Implicit Religion}, author={Singler, Beth}, year={2018}, month={May}, pages={279–297} } @misc{matrix, diff --git a/contexte/philo.tex b/contexte/philo.tex index 7ebdfb8..6c53b5b 100644 --- a/contexte/philo.tex +++ b/contexte/philo.tex @@ -1,75 +1,18 @@ -\subsection{La peur et le contrôle} -\subsection{La mauvaise utilisation} -\subsection{Anthropomorphisation} - Enfin, nous allons terminer cette section visant à mieux cernerles différents aspects de l'IA, par une présentation succinte de ses apparition marquante dans la culture populaire ainsi que de ces implications philosophie. Cele permet de mettre en avant l'imaginaire collectif, fantasmé, voir effrayant, que les mots Intelligence Artificiele engendrent. Alors que scientifiquemet l'IA en était à ses balbutiement avec la conférence de Dartmouth, l'immaginaire humain quand à lui avait une longueur d'avance. Des auteur de litérature d'anticipation comme Isaac Asimov propsaient, dès les années 1950, des situtationsa ainsi qu'une reflexion sur les implication de l'introduction de machines intelligentes dans notre vie de tous les jours. -Asimov dans ca serie de nouvelles sur les robots \textit{I, Robot}, introduit les fameuses trois lois de la robotique~\cite{assimovIrobot}: -\textquote{ -\begin{enumerate} - \item La Première loi : Un robot ne peut porter atteinte à un être humain ni, restant passif, laisser cet être humain exposé au danger ; - \item La Seconde loi : Un robot doit obéir aux ordres donnés par les êtres humains, sauf si de tels ordres entrent en contradiction avec la première loi ; - \item La Troisème loi : Un robot doit protéger son existence dans la mesure où cette protection n'entre pas en contradiction avec la première ou la deuxième loi. -\end{enumerate} -} -\footnote{\textit{The First Law: A robot may not injure a human being or, through inaction, allow a human being to come to harm. The Second Law: A robot must obey the orders given it by human beings except where such orders would conflict with the First Law. The Third Law: A robot must protect its own existence as long as such protection does not conflict with the First or Second Law.}} - -Ces trois lois mettent en avant la necessité d'avoir un contrôle sur l'IA et peuvent être vue comme les premisses de l'IA éthique. -Asimov les explore plus dans \textit{The Bicentennial Man}, une nouvelle publiée en 1976, dans la quelle un robot, par le hasard inhérent à son fonctionnement, montre des caractéristique humaine comme l'empathie ou la créativitée. -Ce hasard dans la création est aussi décrit au septième point de de la proposition de l'école d'été de Dartmouth~\cite{dartmouth}. -Cela renforce le lien entre intuition scientifique et imaginaire créatif, artistique. -De manière assez époustouflante ce hasard joue un rôle prédominant dans les programme génératif moderne comme les GAN ou les auto encodeurs ; nous y reviendrons plus en détails dans à la Section~\ref{sec:background-generation}. -De plus, ces caractéristique humaines peuvent se retrouver en interagissant avec des logiciels récent comme les LLM ou les générateurs d'images. -Cela peut amener les utilisateurs humain à anthropomorphiser ces logiciels~\cite{}. - -Cependant, l'attribution d'un rôle sociale humain à un ordinateur était déjà présent avant l'introduction des logiciels IA~\cite{MARAKAS2000719} : le programme ecrit, copie, attrape un virus, etc. -Une interaction avec \textquote{quelquechose} qui montre un semblant de comportement social nous renvoi a notre propre aliénation sociale au sens décrit par Jean Jaques Rousseau dans son \textit{Du contrat social}~\cite{}. -Marakas et al. explque aussi que cette confusion de l'humain et de la machine entraîne une sur évaluation de la capacité des ordinateurs et peut mener à utiliser à outrance la décision automatisé. -C'est le cas avec les décision juridique ou scolaire où la vie d'être humain est décidé par des ordinateur~\cite{}. -Cela donne lieu à de nombreux problème moraux qui forment les fondements de l'IA éthique nottamant autout de l'équitée, de la confidentialité et de l'explicabilité sur lesquels nos reviendrons à la Section~\ref{sec:contexte-enjeu}. - - -%Differences humain machine -%Turing test - -%Juridique -En droit francais, \textquote{etre humain} est un synonime de \textquote{personne physique}~\cite{cornu}. -C'est à dire ayant la personnalité : l'\textquote{Aptitude à être titulaire des droits et assujetti à des obligations qui appartient à toutes les personnes physiques, [...]}~\cite{cornu}. -Cette définition est d'ailleur la pierre angulaire quand à la reconaissance de le qualité d'humain d'Andrew, le robot protagoniste de \textit{The bicentennial man}~\cite{bicentenaire}. -C'est en reconaissant qu'une personne ayant de multiples prothése d'organes synthetiques, n'en perdant pas moins sa personalité, alors ne reste plus que la conscience qui définisse l'humain. - -Penchons nous donc du coté de la conscience. -Qu'est-ce que l'homme = une de quatres grandes questions de la philosohpie d'après Kant. -Inconscient de Freud = différence avec l'IA. L'IA à-t'elle un inconscient ? -\begin{figure} - \includegraphics[width=\linewidth]{contexte/figure/chatgpt/penses.png} - \caption{Réponsse de ChatGPT à la question \textquote{penses-tu ?}.} - \label{fig:contexte-penses} -\end{figure} -%IA = bullshit -Experience de la Chambre Chinoise~\cite{searle1980minds}. - -%Peur de l'IA -Basilique de Roko, Paris Pascalien~\cite{Singler_2018} - -\textit{The Bicentennial Man}~\cite{bicentenaire} (livre). -\textquote{ -'Comment peuvent-ils avoir peur des robots ?' -'C'est un mal de l'humanitée, l'un de ceux dont elle n'est pas encore guerrie.' -} -\footnote{ -'How can they fear robots?' -'It is a disease of mankind, one of which it is not yet cured.' -} -Alignement de l'IA +\subsection{La peur et le contrôle} +\input{contexte/philo/peur} +\subsection{La mauvaise utilisation} +\input{contexte/philo/mu} +\subsection{Anthropomorphisation} +\input{contexte/philo/anthro} -Convergence de l'IA \textit{The Matrix}~\cite{matrix}. diff --git a/contexte/philo/anthro.tex b/contexte/philo/anthro.tex new file mode 100644 index 0000000..40598c6 --- /dev/null +++ b/contexte/philo/anthro.tex @@ -0,0 +1,34 @@ + +Asimov les explore plus dans \textit{The Bicentennial Man}, une nouvelle publiée en 1976, dans la quelle un robot, par le hasard inhérent à son fonctionnement, montre des caractéristique humaine comme l'empathie ou la créativitée. +Ce hasard dans la création est aussi décrit au septième point de de la proposition de l'école d'été de Dartmouth~\cite{dartmouth}. +Cela renforce le lien entre intuition scientifique et imaginaire créatif, artistique. +De manière assez époustouflante ce hasard joue un rôle prédominant dans les programme génératif moderne comme les GAN ou les auto encodeurs ; nous y reviendrons plus en détails dans à la Section~\ref{sec:background-generation}. +De plus, ces caractéristique humaines peuvent se retrouver en interagissant avec des logiciels récent comme les LLM ou les générateurs d'images. +Cela peut amener les utilisateurs humain à anthropomorphiser ces logiciels~\cite{}. + +Cependant, l'attribution d'un rôle sociale humain à un ordinateur était déjà présent avant l'introduction des logiciels IA~\cite{MARAKAS2000719} : le programme ecrit, copie, attrape un virus, etc. +Une interaction avec \textquote{quelquechose} qui montre un semblant de comportement social nous renvoi a notre propre aliénation sociale au sens décrit par Jean Jaques Rousseau dans son \textit{Du contrat social}~\cite{}. +Marakas et al. explque aussi que cette confusion de l'humain et de la machine entraîne une sur évaluation de la capacité des ordinateurs et peut mener à utiliser à outrance la décision automatisé. +C'est le cas avec les décision juridique ou scolaire où la vie d'être humain est décidé par des ordinateur~\cite{}. +Cela donne lieu à de nombreux problème moraux qui forment les fondements de l'IA éthique nottamant autout de l'équitée, de la confidentialité et de l'explicabilité sur lesquels nos reviendrons à la Section~\ref{sec:contexte-enjeu}. + +%Differences humain machine +%Turing test + +%Juridique +En droit francais, \textquote{etre humain} est un synonime de \textquote{personne physique}~\cite{cornu}. +C'est à dire ayant la personnalité : l'\textquote{Aptitude à être titulaire des droits et assujetti à des obligations qui appartient à toutes les personnes physiques, [...]}~\cite{cornu}. +Cette définition est d'ailleur la pierre angulaire quand à la reconaissance de le qualité d'humain d'Andrew, le robot protagoniste de \textit{The bicentennial man}~\cite{bicentenaire}. +C'est en reconaissant qu'une personne ayant de multiples prothése d'organes synthetiques, n'en perdant pas moins sa personalité, alors ne reste plus que la conscience qui définisse l'humain. + +Penchons nous donc du coté de la conscience. +Qu'est-ce que l'homme = une de quatres grandes questions de la philosohpie d'après Kant. +Inconscient de Freud = différence avec l'IA. L'IA à-t'elle un inconscient ? +\begin{figure} + \includegraphics[width=\linewidth]{contexte/figure/chatgpt/penses.png} + \caption{Réponsse de ChatGPT à la question \textquote{penses-tu ?}.} + \label{fig:contexte-penses} +\end{figure} + +%IA = bullshit +Experience de la Chambre Chinoise~\cite{searle1980minds}. diff --git a/contexte/philo/mu.tex b/contexte/philo/mu.tex new file mode 100644 index 0000000..e69de29 diff --git a/contexte/philo/peur.tex b/contexte/philo/peur.tex new file mode 100644 index 0000000..4b8deaa --- /dev/null +++ b/contexte/philo/peur.tex @@ -0,0 +1,104 @@ +Dans l'\textit{Home bicentenaire}, Isaax Asimov ecrit le dialogue suivant : +\textquote{ +'Comment peuvent-ils avoir peur des robots ?' +'C'est un mal de l'humanitée, l'un de ceux dont elle n'est pas encore guerrie.' +} +\footnote{ +'How can they fear robots?' +'It is a disease of mankind, one of which it is not yet cured.' +} +Et en effet, nous observons une certaine méfiance de la part du grand publique envers l'IA et ses dévelopement possibles~\cite{johnson2017ai}. +Dans la culture populaire et notament dans le cinema, cette peur est très représent, nous présentons à la Figure~\ref{fig:contexte-badai} un collage qui montre que l'IA est un antagoniste iconique du septième art. +Explorons certaines de ces inquétudes. +Nous séparons les risques en deux : ceux liée à un IA aligné, c'est à dire une IA qui fait ce pour quoi elle à été crée, et le risques lié à un IA non-alignée. + +Commencons par ces dernièrs. +La scène d'ouverture de \textit{The Terminator}~\cite{terminator} montre parfaitement ce qu'est une machine aligné. +Nous y voyons des machines autonomes se battre avec une force ecrasant contre des humains. +Cette scène contraste avec celle qui l'on voit jute après l'écran titre où la machine, toute aussi gigantesque que les robots tueurs, est un camion poubelle donc totalement au service et l'homme qui la contrôle. +Une IA non-alginé est donc un programme qui cherche à atteindre un objectif qui n'est pas celui pour le quel elle à été concut, dans ce cas, un guerre totale contre l'humanitée. +C'est la même inquiétude qui est présente dans \textit{The Matrix}~\cite{matrix}. +Ce film présenté ce qui pourrait se passer après un guerre contre le machine pérdu par l'humanité. +La machines, ayant besoin d'énergie, créent un monde virtuel : une simulation, dans laquelle est enfermé l'esprit de tous les hommes. +Ainsi elle peuvent recuperer la bioéléctricité générée par le corps humain. +La simulation est ainsi un environement ou l'IA peut évoluer avec un controle humain assez limité ce qui facilite le non-alignement~\cite{johnson2017ai}. +En effet, quand des aspects capitaux de la vie des personnes n'est plus géré physiquement, l'IA n'a plus besoins de robot (captuers, activateur, ...) pour intéragir avec la réalité. +Nous parlons ici de la réalité au sens plationitien de l'alégorie de la caverne : la simulation est la réalité~\cite{caverne}. +Cette simulation est un future possible quand à la manière dont nous vivons, par exemple depuis le COVID-19 le télétravail c'est grandement démocratisé~\cite{bergeaud2023teletravail}. +Il existe du multiples moyens numériques pour simuler la vie physique dans ce contexte et la réalité virtuelle est une voie fortemnt appuyé par les GAFAM. +Apple et Meta proposent des casques de réalitée virtuelle dans cette optique~\cite{metaverse,applevision}. + +Dans \textit{The Terminator}, une seul IA est responssable du non-alignement. La tâche pour laquelle cette IA à été construite était la défense du territoire américain. +C'est un problème imprévu par les dévelopeurs lié à une trop grande confiance dans les capacité de la machine qui amène à la guerre entre homme et machine. +En effet le protagoniste Kyle Reese explique l'IA \textquote{Skynet} comme étant +\textquote{[un] réseau informatique de défence, habilité à tout connaître. Il le disait intelligent.} +\footnote{\textit{Defense network computer, trusted to know it all. They said it was smart.}} +L'IA est donc passé de aligné à non-aligné, cela est particulièrement inquiétant pour les système autonomes armé comme le décrit Cedric Villani à la cinquième partie de son rapport sur l'IA commandé par le gouvernment Macron~\cite{villani2018donner}. + +Pour palier cela, les IA, comme les LLM peuvent être programmé pour respecter certain contraintes morales~\cite{wang2023not}. +C'est aussi ce type de contrôle que préconise +Asimov dans ca serie de nouvelles sur les robots \textit{I, Robot}. +Il y introduit les fameuses trois lois de la robotique qui sont programmés dans toutes les IA~\cite{assimovIrobot}: +\textquote{ +\begin{enumerate} + \item La Première loi : Un robot ne peut porter atteinte à un être humain ni, restant passif, laisser cet être humain exposé au danger ; + \item La Seconde loi : Un robot doit obéir aux ordres donnés par les êtres humains, sauf si de tels ordres entrent en contradiction avec la première loi ; + \item La Troisème loi : Un robot doit protéger son existence dans la mesure où cette protection n'entre pas en contradiction avec la première ou la deuxième loi. +\end{enumerate} +} +\footnote{\textit{The First Law: A robot may not injure a human being or, through inaction, allow a human being to come to harm. The Second Law: A robot must obey the orders given it by human beings except where such orders would conflict with the First Law. The Third Law: A robot must protect its own existence as long as such protection does not conflict with the First or Second Law.}} +Ces trois lois mettent en avant la necessité d'avoir un contrôle sur l'IA et peuvent être vue comme les premisses de l'IA éthique. + +Outre le cas d'une IA qui bascule d'aligné à non-aligné, et bien que ce cas ne ce soit pas (encore) présenté, \textit{Avengers: age of Ultron}~\cite{avenger} présente une IA qui dès sa création est non-aligné. +Lors d'une expérience, Tony Stark, le createur de l'IA Ultron, n'avait pas de but précis pour sa création. +Ultron, après avoir s'être renseigné sur ce que sont les humains en ayant accès à internet, à pris la décision de les exterminer. +Heureusement ce genre de risque est très faible, car la robotique n'est pas assez avancé et comme nous l'avons vu, les IA acutels ne sont pas capable de prendre des décisions arbitraires. + +Plus sérieusement, il existe un argument similaire à celui du Paris Pascalien, qui cherche à savoir si nous devons colaborer à l'ellaboration d'une IA non-aligné, potentielement mauvaise. +Le Paris Pascalien est un argument probabiliste avancé par Blaise Pascale disant qu'il est plus avantageux de croire en dieu que de ne pas croire. +Nous présentons dans la Table~\ref{tbl:contexte-paris} comment se fait le calcul moyen du gain. +Il existe une version modifié paris qui explore le problème de Newcombe suivant : doit-on coopéréer à la création d'une intelligence artificielle~\cite{Singler_2018,roko}? +Il s'agit d'un problème des théorie de la décision à deux agents : +L'un est l'IA, l'autre le decideur. +Le décideur est antiérieur à l'IA et choisit de coopérer ou non. +L'IA est au courant des pensée du décideur comme dans le cadre d'agent coopérants dans le dilemn du prisonier. +L'IA fait du chantage au décideur : si le décideur ne coopère pas il sera torturé. +Cela crée pour le décideur le tableau de gain presanté à la Table~\ref{tbl:contexte-roko}. +Ainsi, toutes personne étant au courant du Basilic (ligne Sait) aurait avantage à coopérer. +Cette démonstration a été très médiatisée et à généré beaucoup d'anxiété du à sa nature de danger informationel~\cite{rokowiki,slate}. +Cependant cet argument est criticable, notament sur le fait que si l'agent IA existe, il n'a pas d'intéret à torturer l'agant qui savait et na pas contribué retrospéctivement~\cite{rokomisc}. + +\begin{table} + \centering + \begin{tabular}{c|cc} + &Existe&N'éxiste pas\\ + \hline + Croire&$+\infty$&$-c$\\ + Ne pas croire&$-\infty$&$+c$\\ + \end{tabular} + + \begin{tabular}{c} + \\ + $E(\text{Croire}) = +\infty P(\text{Existe}) - c P(\text{N'éxiste pas}) = +\infty$\\ + $E(\text{Ne pas croire}) = -\infty P(\text{Existe}) + c P(\text{N'éxiste pas}) = -\infty$ + \end{tabular} + \caption{Tableau des gains de croire ou ne pas croire en Dieu. $E$ représente le gain moyen (voir la Section~\ref{sec:background-proba} pour une définition formelle de l'espérence).} + \label{tbl:contexte-paris} +\end{table} + +\begin{table} + \centering + \begin{tabular}{cc|cc} + &&IA construit&IA pas construit\\ + \hline + \multirow{2}{*}{Sait}& + Donner&$-c$&$-c$\\ + &Ne pas donner&$-\infty$&$0$\\ + \hline + \multirow{2}{*}{Ne sait pas}& + Donner&/&/\\ + &Ne pas donner&$0$&$0$\\ + \end{tabular} + \caption{Basilic de Roko} + \label{tbl:contexte-roko} +\end{table} diff --git a/main.pdf b/main.pdf index 18aa931..cfabe11 100644 Binary files a/main.pdf and b/main.pdf differ diff --git a/main.tex b/main.tex index cba5d15..d238c6f 100644 --- a/main.tex +++ b/main.tex @@ -15,6 +15,7 @@ \usepackage{cite} \usepackage{hyperref} \usepackage{listings} +\usepackage{multirow} \lstset{ basicstyle=\small\ttfamily, @@ -36,7 +37,7 @@ breaklines=true \begin{titlepage} \begin{center} \Huge - \textbf{L'intelligence artificielle, un sujet de thèse merdique} + \textbf{Intelligence artificielle pour des services moraux} \vspace{3cm} @@ -95,4 +96,9 @@ breaklines=true \bibliographystyle{plain} \bibliography{biblio} +\appendix +\chapter{Mot clé pour la recherche projets IA} +\input{annexe/ai_words} + + \end{document} -- cgit v1.2.3 From 4edf87ea8a5ce3e76285172af2eaecc7bc21813d Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Mon, 26 Aug 2024 18:19:46 +0200 Subject: anthropomorphisation --- biblio.bib | 99 ++++++++++++++++++++++++++++++++++++ contexte/enjeux.tex | 2 + contexte/philo.tex | 84 ++++++++---------------------- contexte/philo/anthro.tex | 127 ++++++++++++++++++++++++++++++++++++++-------- contexte/philo/peur.tex | 57 ++++++++++++++++++--- main.pdf | Bin 4960603 -> 4977242 bytes main.tex | 1 + 7 files changed, 278 insertions(+), 92 deletions(-) diff --git a/biblio.bib b/biblio.bib index bcebd63..38a62f2 100644 --- a/biblio.bib +++ b/biblio.bib @@ -1,3 +1,35 @@ +############################################"" +#Enjeux +#Securité +#Backdoor +@article{gao2020backdoor, + title={Backdoor attacks and countermeasures on deep learning: A comprehensive review}, + author={Gao, Yansong and Doan, Bao Gia and Zhang, Zhi and Ma, Siqi and Zhang, Jiliang and Fu, Anmin and Nepal, Surya and Kim, Hyoungshick}, + journal={arXiv preprint arXiv:2007.10760}, + year={2020} +} + +@inproceedings{doan2021lira, + title={Lira: Learnable, imperceptible and robust backdoor attacks}, + author={Doan, Khoa and Lao, Yingjie and Zhao, Weijie and Li, Ping}, + booktitle={Proceedings of the IEEE/CVF international conference on computer vision}, + pages={11966--11976}, + year={2021} +} + +#Confidentialité +@misc{discordgpt, + title={In-Channel Conversation Summaries}, + author={\url{https://support.discord.com/hc/en-us/profiles/2921470028-Buffy}}, + howpublished={\url{https://support.discord.com/hc/en-us/articles/12926016807575-In-Channel-Conversation-Summaries}}, + note={Dernier accès: 2024-08-26} +} + + + + + + #####################################################"" #Echelle institutionelle @@ -460,6 +492,73 @@ series = {AIES '18} ######################################### #Philosophie + +@misc{siri, + title={Siri}, + author={Apple}, + howpublished={\url{https://www.apple.com/siri/}}, + note={Dernier accès: 2024-08-26} +} + +@misc{discord, + title={Messagerie Discord}, + author={Discord}, + howpublished={\url{https://discord.com/}}, + note={Dernier accès: 2024-08-26} +} + +@misc{googleai, + title={Google assistant}, + author={Google}, + howpublished={\url{https://assistant.google.com/}}, + note={Dernier accès: 2024-08-26} +} + +@misc{aaigpt, + title={Apple inteligence ChatGPT}, + author={Apple}, + howpublished={\url{https://www.apple.com/newsroom/2024/06/introducing-apple-intelligence-for-iphone-ipad-and-mac/}}, + note={Dernier accès: 2024-08-26} +} + + + +@BOOK{Freud2010-qq, + title = "Le moi et le {\c c}a", + author = "Freud, Sigmund", + publisher = "Payot", + year = 2010, + language = "fr", + note={Das Ich und das Es, 1923. Traduction Jean Laplanche} +} + +@article{waters2014grade, + title={Grade: Machine learning support for graduate admissions}, + author={Waters, Austin and Miikkulainen, Risto}, + journal={Ai Magazine}, + volume={35}, + number={1}, + pages={64--64}, + year={2014} +} + + +@book{rousseau1762contrat, + title={Du contrat social ou Principes du droit politique}, + author={Rousseau, Jean-Jeacques}, + year={1762} +} + +@BOOK{Poundstone1993-jr, + title = "Prisoner's Dilemma", + author = "Poundstone, William", + publisher = "Anchor Books", + month = jan, + year = 1993, + address = "New York, NY" +} + + @article{wang2023not, title={Do-not-answer: A dataset for evaluating safeguards in llms}, author={Wang, Yuxia and Li, Haonan and Han, Xudong and Nakov, Preslav and Baldwin, Timothy}, diff --git a/contexte/enjeux.tex b/contexte/enjeux.tex index 6ac661e..af8f40c 100644 --- a/contexte/enjeux.tex +++ b/contexte/enjeux.tex @@ -54,6 +54,8 @@ Ainsi un individue malveillant, que l'on appelera attaqueur, pourra retrouver de \subsection{Sécuritée} +\label{sec:contexte-secu} +Backdoor~\cite{gao2020backdoor, doan2021lira} \subsection{Comsomation d'énergie} diff --git a/contexte/philo.tex b/contexte/philo.tex index 6c53b5b..17d8e11 100644 --- a/contexte/philo.tex +++ b/contexte/philo.tex @@ -1,15 +1,22 @@ - -Enfin, nous allons terminer cette section visant à mieux cernerles différents aspects de l'IA, par une présentation succinte de ses apparition marquante dans la culture populaire ainsi que de ces implications philosophie. - -Cele permet de mettre en avant l'imaginaire collectif, fantasmé, voir effrayant, que les mots Intelligence Artificiele engendrent. - +%Enfin, nous allons terminer cette section visant à mieux cernerles différents aspects de l'IA, par une présentation succinte de ses apparition marquante dans la culture populaire ainsi que de ces implications philosophie. +%Cele permet de mettre en avant l'imaginaire collectif, fantasmé, voir effrayant, que les mots Intelligence Artificiele engendrent. Alors que scientifiquemet l'IA en était à ses balbutiement avec la conférence de Dartmouth, l'immaginaire humain quand à lui avait une longueur d'avance. Des auteur de litérature d'anticipation comme Isaac Asimov propsaient, dès les années 1950, des situtationsa ainsi qu'une reflexion sur les implication de l'introduction de machines intelligentes dans notre vie de tous les jours. +Dans cette section nous utiliserons des exemples venu du cinéma comme fil conducteurs pour comprendre pour parler de la vision que le grand publique à de l'IA. +Cela nous permetra aussi de mettre en avant certain concept philosophiques et psychanolotiques pour comprendre à quel point l'IA actuel et différentes de l'humain. +C'est aussi une manière d'anticiper sur de possible future dévelopements de l'AGI et leur éventuelle implications. +L'utiliation du cinema dans se contexte se justifie car +les films contribuent à forger les opinions que le grand publique ainis que le politiques se font des questions de société~\cite{fearing1947influence, bernays1928manipulating}. +De plus, les films présentés dans cette Section sont des succès mondiaux qui ont été vus par des millions de personnes. +Certains comme \textit{2001: A space odyssey} de Stanley Kubric sont reconnu comme des oeuvres majeurs~\cite{afi100}. +Un élément supplementaire qui nous permet de dire que l'IA actuelle cherche à se raprocher de l'IA fantasme (au moins en terme de communication) et le fait que +Scarlett Johansson, qui interprète la voix de l'IA Samantha dans Her~\cite{her}, ai été approchée par Sam Altamn, le PDG de ChatGPT, pour lui proposer de préter sa voix à l'IA Sky, basé sur GPT4~\cite{johansson}. +Bien que Johansson ai refusé, cela montre à quel point la vision artistique, et surtout cinématographique par le réalisation est une influence de l'orientation de l'IA actuel et réel. +Outre cet exemple, nous nous efforcerons dans cette section de tracer un parallèle entre les oeuvre discutée et les téchnologies réels. + -\subsection{La peur et le contrôle} +\subsection{Risques} \input{contexte/philo/peur} -\subsection{La mauvaise utilisation} -\input{contexte/philo/mu} \subsection{Anthropomorphisation} \input{contexte/philo/anthro} @@ -17,66 +24,15 @@ Des auteur de litérature d'anticipation comme Isaac Asimov propsaient, dès les \textit{The Matrix}~\cite{matrix}. \textit{2001: A Space Odyssey}~\cite{2001odyssey}. -L'IA HAL 9000 \textquote{reproduit, bien que certain experts préfèrent le terme imite, la plus part des activitées du cerveau humain} -\footnote{\textit{reprdouce, though some expert still prefer the work mimic, most of the activites of the humain brain}}. -On remarque que l'imitation d'une compréhensio humaien tel que décrite dans l'expérience de la chambre chinoiseé~\cite{searle1980minds} peut amener l'anthropomophisation d'une machine. -Nous voyons même dans que le Dr David Bowman éprouve de l'empathie pour la machine dans la scène où il débrance HAL, alors même que celui-ci à tenté de le tuer. -D'ailleur il dit lors d'un interview qu'une fois \textquote{qu'on s'est habité à ce qu'il [HAL] parle, on le voit juste comme une autre persone} -\footnote{\textit{get adjusted to the idea that he [HAL] talks, you think of him really just as another person}}. -Cependant, il admet ne pas savoir si les sentiment qu'il percoit chez HAL sont réel ou simulé. -HAL est un exemple d'IA aligné qui pour préserver sa mission choisit de tuer les humains qui veulent le débrancher. -On remarque donc bien la necessité, de manière générale, d'avoir de garders fous qui assurent non seulement l'utilité du programme (sa mission) mais aussi un certain niveau morale. -Les trois lois de la robotique sont des exemples de ce genre, hors du cadre la science fiction, les garanties d'équitée dans le traitement en sont des autres. \textit{Her}~\cite{her} -Au début, nous voyons Théodore, le personnage principle, travailler. -Son travail consiste à ecrir des lettres pour un service en ligne. -Les clients demandent une lettre pour leur conjoint, leur amis, leur employeur, etc. et Théodore ecrit une lettre qui correspond à la description du client. -Il sagit d'un récit d'anticipation où les IAs sont des programmes intégéré dans les systèmes d'exploitations (OS) à la manière d'assistant virtuels. -Malgré l'évident qualité qu'aurait ces programmes à générer ces lettres, ce sont bien des employés humain qui les écrivent. - -\textit{What makes me, me, is my ability to grow through my experiences. So basicaly et every moment I am evolving. Just like you.} - -\textit{You are just an artificial voice inside of a computer.} - -\textit{I saw through your emails that you went through a break up recently.} - -Elle a des \textit{personal embarassin thoughts} - -Elle aimerait avoir un corps - -\textit{I am becoming much more than they programmed} - -\textit{proud of having my own feelings about the world} -\textit{and I had this terrible thoughts: are my feelings even real? Or are they just programming?} -Descartes - -\textit{"Are you falling in love with her?""Does that make me a freak?""No, No..."} - -\textit{"She is not just a computer, she is her own person. She doesn't just do whatever I say""I didn't say that but it does make me very sad that you can't handle real emotions [...].""They are real emotions! How would you know?} - -\textit{I don't like what I am right now} - -\textit{Why do I love you? [...] I don't have an intellectuel reason [...] I trust my feelings} - -\textit{I used to be worried about not having a body. But now I truly love it [...] I am not limited.} - -Exclusivité de la relation, conversation avec 8516 autres et amoureuse de 641. Cela serait incormpréhensible pour un humain. - -Scarlett Johansson, qui interprète la voix de l'IA Samantha, a été approchée par Sam Altamn, le PDG de ChatGPT, pour lui proposer de préter sa voix à l'IA Sky, basé sur GPT4~\cite{johansson}. -Bien que Johansson ai refusé, cela montre à quel point la vision artistique, et surtout cinématographique par le réalisation. est une influence de l'orientationd de l'IA actuel et réel. - -Les films contribuent à forger les opinions que le grand publique ainis que le politiques se font des questions de société~\cite{fearing1947influence, bernays1928manipulating}. -Les films présentés dans cette Section sont des succès mondiaux qui ont été vus par des millions de personnes. -Certains comme \textit{2001: A space odyssey} de Stanley Kubric sont reconnu comme des oeuvres majeurs~\cite{afi100}. - +%Au début, nous voyons Théodore, le personnage principle, travailler. +%Son travail consiste à ecrir des lettres pour un service en ligne. +%Les clients demandent une lettre pour leur conjoint, leur amis, leur employeur, etc. et Théodore ecrit une lettre qui correspond à la description du client. +%Il sagit d'un récit d'anticipation où les IAs sont des programmes intégéré dans les systèmes d'exploitations (OS) à la manière d'assistant virtuels. +%Malgré l'évident qualité qu'aurait ces programmes à générer ces lettres, ce sont bien des employés humain qui les écrivent. -\textit{The Terminator}~\cite{terminator}. -Dans la scène d'ouverture, nous voyons des machines autonomes se battre avec une force ecrasant contre des humains. -Cette scène contraste avec celle qui l'on voit jute après l'écran titre où la machine, tout aussi gigantesque que les robots tueurs, est un camion poubelle donc totalement au service et l'homme qui la contrôle. -\textit{Defense network computer, trusted to know it all. They said it was smart.} -\textit{Avengers: Age of Ultron}~\cite{avenger}. \begin{figure} \centering \includegraphics[width=\linewidth]{contexte/figure/bad_ai.png} diff --git a/contexte/philo/anthro.tex b/contexte/philo/anthro.tex index 40598c6..e69e385 100644 --- a/contexte/philo/anthro.tex +++ b/contexte/philo/anthro.tex @@ -1,34 +1,121 @@ +L'anthropomorphisation consiste à attribuer des caractéristiques humaines à ce qui n'est pas humain. +Dans le contexte de l'IA et plus précisement de l'AGI, ce phénomène peut devenir courant. +L'anthropomorphisation des ordinateurs et d'ailleur déjà encré dans notre société depuis plusieur décénies. +En effet, l'attribution d'un rôle sociale humain à un ordinateur était déjà présent avant l'introduction des logiciels IA~\cite{MARAKAS2000719} : le programme ecrit, copie, attrape un virus, etc. +Une interaction avec \textquote{quelquechose} qui montre un semblant de comportement social nous renvoi a notre propre aliénation sociale au sens décrit par Jean Jaques Rousseau dans son \textit{Du contrat social}~\cite{rousseau1762contrat}. +Cela nous pousse à considérer ce que l'on anthropomorphisme comme des personnes, des être huamins. -Asimov les explore plus dans \textit{The Bicentennial Man}, une nouvelle publiée en 1976, dans la quelle un robot, par le hasard inhérent à son fonctionnement, montre des caractéristique humaine comme l'empathie ou la créativitée. +En droit francais, \textquote{etre humain} est un synonime de \textquote{personne physique}~\cite{cornu}. +C'est à dire ayant la personnalité : l'\textquote{Aptitude à être titulaire des droits et assujetti à des obligations qui appartient à toutes les personnes physiques, [...]}~\cite{cornu}. +Cette définition est d'ailleur la pierre angulaire quand à la reconaissance de le qualité d'humain d'Andrew, le robot protagoniste de \textit{The bicentennial man}~\cite{bicentenaire}. +C'est en reconaissant qu'une personne ayant de multiples prothése d'organes synthetiques, n'en perdant pas moins sa personalité, alors si ce n'est le corps, ne reste plus que le système psychique qui définisse l'humain. + +La psychée humaine et ce qui la caractérise est un pilier de la recherche philosophique et scientifique. +La psychanalise d'après Freud donne des outils pratiques pour parler de psychée que nous allons utiliser dans cette section. +Nous allons les présenter rapidement mais pour les cerner plus en détail nous renvoyons le lecteur à \textit{Das Ich und das Es}~\cite{Freud2010-qq}, les citations que nous utilisons comme définition vienne de cet ouvrage. +Dans un primier temps, la psychée subit une subdivision grossière en trois. +\begin{itemize} + \item Cs : La conscience c'est à dire \textquote{la perception la plus immédiate et la plus certaine.} + \item Pcs : le préconscient c'est la dire \textquote{latent, tout en étant capable de devenir conscient.} + \item Ics : l'inconscient c'est à dire \textquote{le refoulé [...] incapable de devenir conscient.} à cela nous ajoutons une partie du moi qui controle le système Cs-Pcs-Ics. +\end{itemize} +Dans un second temps, le cadre qui orchestre ces trois aspects : +\begin{itemize} + \item Le moi : \textquote{Organisation cohérente de processus de l'âme dans une personnes.} + \item La ça : \textquote{Part du psychisme dans laquelle le moi se continue et qui se comporte comme Ics.} + \item Le sur-moi : \textquote{Résidu des premier choix d'objet du ça}. C'est la morale qui vient de notre éducation. +\end{itemize} +Pour Freud, les mots on une importance capitale : ils permettent le lien entre le ça et le système Pcs-Cs. +Ainsi ils sont résposable d'une grande partie de la conscience. +Freud dit : +\textquote{[...]Comment quelque chose devient-il Pcs ? et la réponse serait : par connexion avec les représentations de mot correspondantes.} +Il faut voir dans cette citation que \textquote{mot} est entandu au sens large pour inclure les restes mnésiques c'est à dire les anciennes pérceptions. +Les mots sont aussi importants pour les perceptions et peuvent être à l'originie de l'objet de l'invéstissement. +Toujours d'après Freud, les investissment d'objets partent du ça ensuite soit, il y a l'identification d'objets dans le moi,ou soit il y a l'acceptation de l'investissement si il n'y à pas refoulement. +C'est à dire que les mots créent un sentimient dont on n'a pas forcément conscience (au sens descriptif et non Cs) pour une IA qui vas nous parler. +Cela est mis en lumière dans +\textit{2001 : A space odyssey} quand un des astraunotes dit que \textquote{quand on s'est habité à ce qu'il [HAL] parle, on le voit juste comme une autre persone}. +\footnote{\textit{get adjusted to the idea that he [HAL] talks, you think of him really just as another person}}. +Cependant, il admet ne pas savoir si les sentiment qu'il percoit chez HAL sont réel ou simulé. +C'est donc que cet astraunote a identifié HAL dans son moi et a rendu Cs, par l'analyse, le processus qui lui fait croire de HAL est humain. + +Il est bien sur aussi possible que ce processus reste Ics comme dans \textit{Her}~\cite{her}. +Cela peut-être dangeureux car la l'identification à permis à l'astraunote de débrancher HAL, l'investissement aurait put l'en empêcher. +Dans \textit{Her}, l'IA Samantha bien que non-aligné à la fin du film, n'a pas un but dangeureux de déstruction. +Cela rend le fais que le personnage principale, Théodore, n'ai pas réfoulé l'investissement moins grave. +Notons que le processus d'indentification avait commencé chez Théodore car il dit à Samanthe : '\textquote{Tu n'est qu'une voie artificielle.} +\footnote{\textit{You are just an artificial voice[..].}} +Cepandant Samantha à un argument extrement fort qui casse cette identification chez Thodore : \textquote{Ce qui fait que je suis qui je suis, c'est ma capacité à évoluer au travers de mes experiences.} +\footnote{\textit{What makes me, me, is my ability to grow through my experiences.}}. +Elle expose ainsi l'argument principale qui définit la personalité comme l'explique Freud~\cite{Freud2010-qq} : +\textquote{le caractère du moi résulte de la sédimentation des investissements d'objets abandonnés}. + +Nous touchons ainsi du doigt une qualité essentiel de l'AGI que nous retrouvons aussi bien chez l'IA Andrew de \textit{The Bicentenial man} que chez l'IA Samantha de \textit{Her} : +un système complet Ics,Pcs,Cs le tout encadre dans un ça inconnu et régi par un moi qui sert d'interface entre le ça et le système Pcs-Cs. +C'est d'ailleur un ça incomplet qui fait que les IA moderne comme ChatGPT sont très loins de l'humain. +ChatGPT lui même explique celà clairement quand on lui pose la question \textquote{Penses-tu ?} comme nous pouvons le voir à la Figure~\ref{fig:contexte-penses}. +Mais alors, quand est-t'il du sur-moi pour les IA ? +Pour une AGI avec un système complet ça-moi, le sur-moi existe forcément d'après sa définition, sinon c'est que le ça est pathologique. +On le voit dans le comportement de Samantha dans~\textit{Her} quand elle explore son refoulé : \textquote{Je n'aime pas qui je suis actuellement}. +\footnote{\textit{I don't like who I am right now}}. +Et d'autre moments qui montrent ses névroses. +Une nevrose en particulier est interessante dans le contexte d l'AGI, qui n'existe pas pour les humains normaux, est le fait que de part sa supperiotié intellectuelle les IA peuvent se détacher totalement des humains. +Pourquoi rester à parler avec un humain quand on est infiniement plus rapide et performant que lui ? +Ainsi même si Samantha dit aimer Théodore, elle le quite achevant la phase de construction primordiale du moi qui consiste a identifier l'amour du père pour constuire son caractère en métant fin a son Oedipe~\cite{Freud2010-qq}. + +De plus, le hasard et est élement important de l'anthropomorphisation, que ce soit dans la litérature d'anticipation où dans le téchnologie actuelles de l'IA générative. +Asimov présente dans \textit{The Bicentennial Man} un robot qui, par le hasard inhérent à son fonctionnement, montre des caractéristique humaine comme l'empathie ou la créativitée. Ce hasard dans la création est aussi décrit au septième point de de la proposition de l'école d'été de Dartmouth~\cite{dartmouth}. Cela renforce le lien entre intuition scientifique et imaginaire créatif, artistique. De manière assez époustouflante ce hasard joue un rôle prédominant dans les programme génératif moderne comme les GAN ou les auto encodeurs ; nous y reviendrons plus en détails dans à la Section~\ref{sec:background-generation}. -De plus, ces caractéristique humaines peuvent se retrouver en interagissant avec des logiciels récent comme les LLM ou les générateurs d'images. -Cela peut amener les utilisateurs humain à anthropomorphiser ces logiciels~\cite{}. +Cependant le processus de création par le hasard peut-il être vraiement apparanté au processu de création humain qui fait l'individualité de chacun ? -Cependant, l'attribution d'un rôle sociale humain à un ordinateur était déjà présent avant l'introduction des logiciels IA~\cite{MARAKAS2000719} : le programme ecrit, copie, attrape un virus, etc. -Une interaction avec \textquote{quelquechose} qui montre un semblant de comportement social nous renvoi a notre propre aliénation sociale au sens décrit par Jean Jaques Rousseau dans son \textit{Du contrat social}~\cite{}. -Marakas et al. explque aussi que cette confusion de l'humain et de la machine entraîne une sur évaluation de la capacité des ordinateurs et peut mener à utiliser à outrance la décision automatisé. -C'est le cas avec les décision juridique ou scolaire où la vie d'être humain est décidé par des ordinateur~\cite{}. -Cela donne lieu à de nombreux problème moraux qui forment les fondements de l'IA éthique nottamant autout de l'équitée, de la confidentialité et de l'explicabilité sur lesquels nos reviendrons à la Section~\ref{sec:contexte-enjeu}. -%Differences humain machine -%Turing test -%Juridique -En droit francais, \textquote{etre humain} est un synonime de \textquote{personne physique}~\cite{cornu}. -C'est à dire ayant la personnalité : l'\textquote{Aptitude à être titulaire des droits et assujetti à des obligations qui appartient à toutes les personnes physiques, [...]}~\cite{cornu}. -Cette définition est d'ailleur la pierre angulaire quand à la reconaissance de le qualité d'humain d'Andrew, le robot protagoniste de \textit{The bicentennial man}~\cite{bicentenaire}. -C'est en reconaissant qu'une personne ayant de multiples prothése d'organes synthetiques, n'en perdant pas moins sa personalité, alors ne reste plus que la conscience qui définisse l'humain. +%De plus, ces caractéristique humaines peuvent se retrouver en interagissant avec des logiciels récent comme les LLM ou les générateurs d'images. +%Cela peut amener les utilisateurs humain à anthropomorphiser ces logiciels~\cite{MARAKAS2000719}. + + +L'IA HAL 9000 \textquote{reproduit, bien que certain experts préfèrent le terme imite, la plus part des activitées du cerveau humain} +\footnote{\textit{reprdouce, though some expert still prefer the work mimic, most of the activites of the humain brain}}. +On remarque que l'imitation d'une compréhensio humaine tel que décrite dans l'expérience de la chambre chinoiseé~\cite{searle1980minds} peut amener l'anthropomophisation d'une machine. +Nous voyons même dans que le Dr David Bowman éprouve de l'empathie pour la machine dans la scène où il débrance HAL, alors même que celui-ci à tenté de le tuer. + + + + + + + + +Elle aimerait avoir un corps + +\textit{I am becoming much more than they programmed} + +\textit{proud of having my own feelings about the world} +\textit{and I had this terrible thoughts: are my feelings even real? Or are they just programming?} +Descartes + +\textit{"Are you falling in love with her?""Does that make me a freak?""No, No..."} + +\textit{"She is not just a computer, she is her own person. She doesn't just do whatever I say""I didn't say that but it does make me very sad that you can't handle real emotions [...].""They are real emotions! How would you know?} + +\textit{I don't like what I am right now} + +\textit{Why do I love you? [...] I don't have an intellectuel reason [...] I trust my feelings} + +\textit{I used to be worried about not having a body. But now I truly love it [...] I am not limited.} + +Exclusivité de la relation, conversation avec 8516 autres et amoureuse de 641. Cela serait incormpréhensible pour un humain. -Penchons nous donc du coté de la conscience. -Qu'est-ce que l'homme = une de quatres grandes questions de la philosohpie d'après Kant. -Inconscient de Freud = différence avec l'IA. L'IA à-t'elle un inconscient ? \begin{figure} \includegraphics[width=\linewidth]{contexte/figure/chatgpt/penses.png} \caption{Réponsse de ChatGPT à la question \textquote{penses-tu ?}.} \label{fig:contexte-penses} \end{figure} -%IA = bullshit -Experience de la Chambre Chinoise~\cite{searle1980minds}. +Enfin, l'anthropomorphisation peut présenter un risque dans la mesure où +Marakas et al.~\cite{MARAKAS2000719} explique que cette confusion de l'humain et de la machine entraîne une sur évaluation de la capacité des ordinateurs et peut mener à utiliser à outrance la décision automatisé. +C'est le cas avec les décisions juridiques~\cite{zhiyuan2020limits} ou scolaire~\cite{waters2014grade} où la vie d'être humain est décidé par des ordinateur. +Cela donne lieu à de nombreux problème moraux qui forment les fondements de l'IA éthique nottamant autout de l'équitée, de la confidentialité et de l'explicabilité sur lesquels nos reviendrons à la Section~\ref{sec:contexte-enjeu}. +Attribuer à l'IA ces tâches crée aussi un besoin législatif comme nous le veron en Section~\ref{sec:contexte-legal}. diff --git a/contexte/philo/peur.tex b/contexte/philo/peur.tex index 4b8deaa..ce45f64 100644 --- a/contexte/philo/peur.tex +++ b/contexte/philo/peur.tex @@ -10,9 +10,11 @@ Dans l'\textit{Home bicentenaire}, Isaax Asimov ecrit le dialogue suivant : Et en effet, nous observons une certaine méfiance de la part du grand publique envers l'IA et ses dévelopement possibles~\cite{johnson2017ai}. Dans la culture populaire et notament dans le cinema, cette peur est très représent, nous présentons à la Figure~\ref{fig:contexte-badai} un collage qui montre que l'IA est un antagoniste iconique du septième art. Explorons certaines de ces inquétudes. +Nous parlerons ici uniquement des risque liée à l'IA forte, et plus précisement à une potentielle AGI future. +Nous présentons à la Section~\ref{sec:contexte-enjeu} une introduction sur les risques à court termes pour des technologie bien présentes et utilisé aujourd'hui en production. Nous séparons les risques en deux : ceux liée à un IA aligné, c'est à dire une IA qui fait ce pour quoi elle à été crée, et le risques lié à un IA non-alignée. -Commencons par ces dernièrs. +\subsubsection{AI non-alginée} La scène d'ouverture de \textit{The Terminator}~\cite{terminator} montre parfaitement ce qu'est une machine aligné. Nous y voyons des machines autonomes se battre avec une force ecrasant contre des humains. Cette scène contraste avec celle qui l'on voit jute après l'écran titre où la machine, toute aussi gigantesque que les robots tueurs, est un camion poubelle donc totalement au service et l'homme qui la contrôle. @@ -35,10 +37,14 @@ En effet le protagoniste Kyle Reese explique l'IA \textquote{Skynet} comme étan \footnote{\textit{Defense network computer, trusted to know it all. They said it was smart.}} L'IA est donc passé de aligné à non-aligné, cela est particulièrement inquiétant pour les système autonomes armé comme le décrit Cedric Villani à la cinquième partie de son rapport sur l'IA commandé par le gouvernment Macron~\cite{villani2018donner}. -Pour palier cela, les IA, comme les LLM peuvent être programmé pour respecter certain contraintes morales~\cite{wang2023not}. +Pour palier cela, les IA, comme les LLM +\footnote{LLM signifie \textit{Large Language Model} comme ChatGPT par exemple} +(Grand Model Languisitque) peuvent être programmé pour respecter certain contraintes morales~\cite{wang2023not}. +C'est notamant ce type de contrainte qui est utilisé pour imposer des restriction morale aux IA actuelle. +Nous aborderons en détail ce sujet à la Section~\ref{sec:background-eq}. C'est aussi ce type de contrôle que préconise Asimov dans ca serie de nouvelles sur les robots \textit{I, Robot}. -Il y introduit les fameuses trois lois de la robotique qui sont programmés dans toutes les IA~\cite{assimovIrobot}: +Il y introduit les fameuses trois lois de la robotique qui sont programmés dans toutes les IA de son oeuvre~\cite{assimovIrobot}: \textquote{ \begin{enumerate} \item La Première loi : Un robot ne peut porter atteinte à un être humain ni, restant passif, laisser cet être humain exposé au danger ; @@ -52,16 +58,17 @@ Ces trois lois mettent en avant la necessité d'avoir un contrôle sur l'IA et p Outre le cas d'une IA qui bascule d'aligné à non-aligné, et bien que ce cas ne ce soit pas (encore) présenté, \textit{Avengers: age of Ultron}~\cite{avenger} présente une IA qui dès sa création est non-aligné. Lors d'une expérience, Tony Stark, le createur de l'IA Ultron, n'avait pas de but précis pour sa création. Ultron, après avoir s'être renseigné sur ce que sont les humains en ayant accès à internet, à pris la décision de les exterminer. -Heureusement ce genre de risque est très faible, car la robotique n'est pas assez avancé et comme nous l'avons vu, les IA acutels ne sont pas capable de prendre des décisions arbitraires. +Heureusement ce genre de risque est très faible, car la robotique n'est pas assez avancé et comme le montre Johnson et al~\cite{johnson2017ai}, les IA acutels ne sont pas capable de prendre des décisions arbitraires. -Plus sérieusement, il existe un argument similaire à celui du Paris Pascalien, qui cherche à savoir si nous devons colaborer à l'ellaboration d'une IA non-aligné, potentielement mauvaise. +Nous pouvons nous demander, pourquoi créer un telle IA ? +Dans l'optique de répondre à cette question, il existe un argument similaire à celui du Paris Pascalien, qui cherche à savoir si nous devons colaborer à l'ellaboration d'une IA non-aligné, potentielement mauvaise. Le Paris Pascalien est un argument probabiliste avancé par Blaise Pascale disant qu'il est plus avantageux de croire en dieu que de ne pas croire. Nous présentons dans la Table~\ref{tbl:contexte-paris} comment se fait le calcul moyen du gain. -Il existe une version modifié paris qui explore le problème de Newcombe suivant : doit-on coopéréer à la création d'une intelligence artificielle~\cite{Singler_2018,roko}? +Il existe une version modifié paris, appélé Basilic de Roko, qui explore le problème de Newcombe suivant : doit-on coopéréer à la création d'une IA sans alignement~\cite{Singler_2018,roko}? Il s'agit d'un problème des théorie de la décision à deux agents : L'un est l'IA, l'autre le decideur. Le décideur est antiérieur à l'IA et choisit de coopérer ou non. -L'IA est au courant des pensée du décideur comme dans le cadre d'agent coopérants dans le dilemn du prisonier. +L'IA est au courant des pensée du décideur comme dans le cadre d'agent coopérants dans le dilemn du prisonier~\cite{Poundstone1993-jr}. L'IA fait du chantage au décideur : si le décideur ne coopère pas il sera torturé. Cela crée pour le décideur le tableau de gain presanté à la Table~\ref{tbl:contexte-roko}. Ainsi, toutes personne étant au courant du Basilic (ligne Sait) aurait avantage à coopérer. @@ -78,7 +85,6 @@ Cependant cet argument est criticable, notament sur le fait que si l'agent IA ex \end{tabular} \begin{tabular}{c} - \\ $E(\text{Croire}) = +\infty P(\text{Existe}) - c P(\text{N'éxiste pas}) = +\infty$\\ $E(\text{Ne pas croire}) = -\infty P(\text{Existe}) + c P(\text{N'éxiste pas}) = -\infty$ \end{tabular} @@ -102,3 +108,38 @@ Cependant cet argument est criticable, notament sur le fait que si l'agent IA ex \caption{Basilic de Roko} \label{tbl:contexte-roko} \end{table} + +\subsubsection{IA aligné} +Le non-alignement n'est pas le seul risque envisageable. +Par exemple dans \textit{2001: A Space odyssey}~\cite{2001odyssey} +HAL est une d'IA aligné qui pour préserver sa mission choisit de tuer les humains qui veulent le débrancher. +On remarque donc bien la necessité, de manière générale, d'avoir de garders fous qui assurent non seulement l'utilité du programme (sa mission) mais aussi un certain niveau morale. +Ainsi, un risque est celui d'une IA cherchant si bien à atteindre son objectif qu'elle en oublierai toute considération morale. +Pour palier cela, tout comme dans le cas des IA non-alginé, des contraites peuvent être impose lors de l'entrainement des modèles. + +Un autre type de risque est celui qui consiste à attribuer une tâche capitale à une IA qui potentielement aurait des failles de sécurité. +C'est ce scénario qu'explore \title{War game}~\cite{wargames}. +Dans ce film qui se passe pendant la guerre froide, la gestion et la décision de l'utilisation d'arme nucléaires et délégué à un IA. +Le raisonement est que le programme peut optimiser le succès d'une riposte atomique infiniement plus rapidement qu'un humain. +Cependant, il y avait une faille dans l'IA : une porte dérobée\footnote{\textit{Backdoor}} avait été introduite par un développeur. +A cause de cela, un jeune hacker à faille réussir par inadvertance, à déclancher une guerre nucléaire avec l'URSS\footnote{Union des Républiques Socialistes Soviétiques}. +Comme nous l'avons vu en Section~\ref{sec:contexte-ckoi}, l'IA est de plus en plus utilisée et même pour des système critiques. +Il est de plus possible de mettre des porte dérobée dans les IAcomme nous le verons en Section~\ref{sec:contexte-secu}. + +Pour finir cette section nous parlerons du risque de confiendtialitée. +C'est à dire du risque que des informations que l'on souhaite garder confidentiélle, soient utilisés pas autrui. +Nous verons des définitions de la confidentialité plus poussée dans la Section~\ref{sec:contexte-legal}. +Dans le film \textit{Her}~\cite{her}, l'assistant personel IA Samantha accède sans l'autorisation de l'utilisateur, Théodore, à ses \textit{emails}. +Elle ne l'informe qu'après avoir lu l'integralité de ses conversations : \textquote{J'ai vu dans tes \textit{emails} que tu à récament rompu}\footnote{ + \textit{I saw through your emails that you went through a break up recently}}. +En faisant cela elle apprend des informations sensibles sur Théodore : le fait qu'il ai rompu. +Dans ce films nous n'avons que très peu d'information sur le fonctionnement des IA (qu'il appellent OS) ce qui ne nous permet de dire que cette information précise quitte l'appareil locale de Théodore pour être envoyé vers un tiers. +Cependant, dans la suite du film Samantha avoue avoir parlé de Théodore avec d'autre personnes alors que celui-ci n'était as au courant. +Samantha est donc en réseau avec la possibilité de communiqué n'importequelle information qu'elle juge nécessaire. +Cela implique une grande chance qu'elle ai comuniqué des information que Théodore aurai souhaité garder confidentielles. +Les assistant personels sont de plus en plus présents, notament sur téléphone avec par exemple Siri sur iPhone~\cite{siri} ou Google assistant sur les Pixel~\cite{googleai}. +Ses assistants pour être utile doivent avoir accès au données personel des utilisateurs et les limitations actuels de la puissance de calcul sur smartphone fait que ces données doivent être envoyer à des tiers pour être traité. +Par exemple, Siri envoi ses requettas les plus complexes à ChaGPT par exemple~\cite{aaigpt} mais l'utilisateur doit donner son accord pour chaque requette. +Ou encroe, sur la messagerie Discord~\cite{discord}, il est possible d'activer le résumé des converssations. +Alors le seveur Discord envoi toutes les conversations aux serveur de OpenAI pour que ChatGPT les analyses~\cite{discordgpt}. + diff --git a/main.pdf b/main.pdf index cfabe11..53df84e 100644 Binary files a/main.pdf and b/main.pdf differ diff --git a/main.tex b/main.tex index d238c6f..da3ae33 100644 --- a/main.tex +++ b/main.tex @@ -61,6 +61,7 @@ breaklines=true \input{contexte/avertissement} \chapter{Introduction} \section{Qu'est-ce que l'Intelligence Artificielle ?} + \label{sec:contexte-ckoi} \input{contexte/ckoi} \section{Philosophie de l'IA} \label{sec:contexte-phi} -- cgit v1.2.3 From 57715cacec8d0f0d3d1436a26f92ae5c0f0e128e Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Tue, 27 Aug 2024 21:07:18 +0200 Subject: debut du background sur ZF --- background/conf.tex | 101 ++++++++++++++++++++++++++++++++++++++++++++++ background/eq.tex | 42 +++++++++++++++++++ background/main.tex | 78 +++++++++++++++++++++++++++++++++++ background/proba.tex | 42 +++++++++++++++++++ background/set.tex | 77 +++++++++++++++++++++++++++++++++++ biblio.bib | 22 ++++++++++ contexte/enjeux.tex | 11 +++-- contexte/philo.tex | 7 ---- contexte/philo/anthro.tex | 52 +++++++++++------------- main.pdf | Bin 4977242 -> 4983553 bytes main.tex | 1 + theorem.tex | 8 ++-- 12 files changed, 399 insertions(+), 42 deletions(-) create mode 100644 background/conf.tex create mode 100644 background/eq.tex create mode 100644 background/main.tex create mode 100644 background/proba.tex create mode 100644 background/set.tex diff --git a/background/conf.tex b/background/conf.tex new file mode 100644 index 0000000..4ee8d9f --- /dev/null +++ b/background/conf.tex @@ -0,0 +1,101 @@ + +%Attacks which violate privacy and confidentiality in ML infer potentially sensitive unobservable information from observable information (e.g., model predictions). +\label{sec:bck_aia} + +Attacks which violate privacy and confidentiality in ML infer potentially sensitive information from observable information (e.g., model predictions). +This leakage of information is a privacy risk if adv learns something about $traindata$ -or the inputs- which would be impossible to learn without access to $targetmodel$. This differentiates between a privacy risk and simple statistical inference~\cite{cormode}. +Among the various privacy risks explored in literature pertaining to ML models, attribute inference attacks~\cite{fredrikson2,Mahajan2020DoesLS,yeom,Song2020Overlearning,malekzadeh2021honestbutcurious,MehnazAttInf} infer the specific value of a sensitive attribute for a specific input to ML model given some model observables (e.g., model predictions, parameters, intermediate layerwise outputs) and background information. Based on attack surface being exploited, aia{s} can be categorized into (a) imputation-based attacks and (b) representation-based attacks. + +Let's introduce some notations to guide us in understanding the zoology of those attacks. + +We have a dataset $d:I\rightarrow \mathcal{X}\times\mathcal{S}\times\mathcal{Y}$ containing as column: the features, the sensitive attribute and the ground truth. +$I$ is a finite set of indices. +To access features, sensitive attribute and labels from there indices, we define respectively the following functions: +\begin{itemize} + \item $X:I\rightarrow \mathcal{X},~i\mapsto (d(i))_0$ + \item $S:I\rightarrow \mathcal{S},~i\mapsto (d(i))_1$ + \item $Y:I\rightarrow \mathcal{Y},~i\mapsto (d(i))_2$ +\end{itemize} +Let $(I_0,I_1)$ be a partition of $I$. +$d$ is split in two datasets $d_0 = d_{{|I_0}}$ and $d_1 = d_{{|I_1}}$ which we call respectively the target dataset and the auxiliary dataset. +$d_0$ is used to train a machine learning model to infer the ground truth from the features: we call it the target model $targetmodel$. + +Regarding attribute inference attack, we differentiate between training time attacks that target $d_0$: the dataset used in training. +And inference time attack that target data used as input of an already trained target model. +Our work focuses on the later (see figure \ref{fig:tm2}) but for clear positioning of our contributions, we are going to present both types of attack in this background section. + +\noindent\textbf{\underline{Imputation-based attacks}} assume adv has access to non-sensitive attributes in addition to model's predictions and background information (e.g., marginal prior over sensitive attribute and confusion matrix). We review these different imputation-based attacks below: + + + +\setlength\tabcolsep{3pt} +\begin{table*}[!htb] +\caption{Comparison of prior work based on: attack surface exploited (e.g., model predictions ($targetmodel(X(i))$), $X(i)$, $Y(i)$, distribution over $S(i)$ ($P_S$) and confusion matrix between true and predicted output across all training data records ($C(Y(i),targetmodel(X(i)))$), whether $S(i)$ is censored, i.e., included in $traindata$ or inputs, whether they account for class imbalance in $S(i)$, whether adv is active or passive and whether the threat model is blackbox or whitebox. All the attacks assume the knowledge of auxiliary data $auxdata$.} +\begin{center} +\footnotesize +\begin{tabular}{ |c|c|c|c|c|c| } + \hline + \textbf{Literature} & \textbf{Attack Vector} & \textbf{$S$ is censored?} & \textbf{Imbalance in $S$?} & \textbf{adv} & \textbf{Threat Model} \\ + \hline + \multicolumn{6}{|c|}{\textbf{Imputation-based Attacks}}\\ + \hline + \textbf{Fredrikson et al.}~\cite{fredrikson2} & $X$, $Y$, $targetmodel(X(i))$, \textbf{$P_S$}, $C(Y(i),targetmodel(X(i)))$ & $\checkmark$ & $\times$ & Passive & Blackbox\\ + \textbf{Yeom et al.}~\cite{yeom} & $X(i)$, $Y(i)$, $targetmodel()$, \textbf{$P_S$} & $\checkmark$ & $\times$ & Passive & Blackbox\\ + \textbf{Mehnaz et al.}~\cite{MehnazAttInf} & $X(i)$, $Y(i)$, $targetmodel()$, \textbf{$P_S$}, $C(Y(i),targetmodel(X(i)))$ & $\checkmark$ & $\times$ & Passive & Blackbox\\ + \textbf{Jayaraman and Evans}~\cite{jayaraman2022attribute} & $X(i)$, $Y(i)$, $targetmodel()$, \textbf{$P_S$}, $C(Y(i),targetmodel(X(i)))$ & $\times$, $\checkmark$ & $\times$ & Passive & Whitebox\\ + \hline + \multicolumn{6}{|c|}{\textbf{Representation-based Attacks}}\\ + \hline + \textbf{Song et al.}~\cite{Song2020Overlearning} & $targetmodel(X(i))$ & $\times$ & $\times$ & Passive & Both\\ + \textbf{Mahajan et al.}~\cite{Mahajan2020DoesLS} & $targetmodel(X(i))$ & $\checkmark$ & $\times$ & Passive & Blackbox\\ + \textbf{Malekzadeh et al.}~\cite{malekzadeh2021honestbutcurious} & $targetmodel(X(i))$ & $\times$ & $\times$ & Active & Blackbox\\ + \textbf{Our Work} & $targetmodel(X(i))$ & $\times$, $\checkmark$ & $\checkmark$ & Passive & Blackbox \\ + \hline +\end{tabular} +\end{center} +\label{tab:summary} +\end{table*} + +\label{sec:bck_aia} + +\begin{itemize} + \item \textbf{Fredrikson et al.~\cite{fredrikson2}} assumes that adv has access to $targetmodel(X(i))$. + For this attack it is required that $X$ can be written $X(i) = (\cdots,S(i),\cdots)$. + We will refer to this case as "\textit{S is in the input}". + Fredrikson et al. attack generates an input with different possible values of the sensitive attribute + It then chooses the most likely value based on $targetmodel(X(i))$. + + \item \noindent\textbf{Yeom et al.~\cite{yeom}} assumes a distribution $P_S$ over $S$ which is used to estimate the value of $S$ for an arbitrary data record. They propose three different variants of AS based on assumptions on $P_S$: Attack 1 leverages membership oracle to determine the value of $S(i)$ and Attack 2 and 3 assume different types of distributions over $S$. + For this attack to work, $S$ is in the input and the data points being attacked belong to the target dataset + + \item \textbf{Mehnaz et al.~\cite{MehnazAttInf}} improves upon Fredrikson et al.~\cite{fredrikson1,fredrikson2} by exploiting $targetmodel\circ X$ and $X$, with $S$ in the input. The attack relies on the intuition that $targetmodel$'s output confidence is higher when the input has the correct value of $S$ as $targetmodel$ encountered the target record with that attribute during training. Their attack involves generating multiple instances of input with different values of $S(i)$ (similar to Fredrikson et al.~\cite{fredrikson1,fredrikson2}) and identifying the most likely value of $S$. +\end{itemize} + +An appropriate baseline to identify whether such attacks are indeed a privacy risk is to use data imputation, i.e., train an ML model to infer value of missing attribute from other non-sensitive attributes without $targetmodel(X(i))$~\cite{jayaraman2022attribute}. Jayaraman and Evans~\cite{jayaraman2022attribute} find that existing blackbox imputation-based attacks~\cite{yeom,fredrikson2,MehnazAttInf} do not perform any better than data imputation. In other words, the perceived privacy risk is actually stemming from statistical inference and hence not an actual privacy risk. + +To address this, Jayaraman and Evans~\cite{jayaraman2022attribute} propose a whitebox aia which outperforms prior blackbox attacks as well as data imputation in the setting where there is limited knowledge of data for adv. However, since the attack is in a whitebox setting, we omit a detailed description of the attack. All these attacks require that: + +\begin{itemize} + \item $S$ is in the input data records which is not always the case in realistic settings, + \item $X(i)$ being attacked belong to the target dataset. +\end{itemize} + +\noindent\textbf{\underline{Representation-based attacks}} exploit the distinguishable intermediate layer outputs or predictions for different values of sensitive attributes~\cite{Song2020Overlearning,Mahajan2020DoesLS,malekzadeh2021honestbutcurious}. For instance, the distribution of $targetmodel\circ X$ for \textit{males} is different from the output prediction distribution for \textit{females}. We describe the existing attacks of this category below: + +\begin{itemize} +\item \textbf{Song et al.~\cite{Song2020Overlearning} / Mahajan et al.~\cite{Mahajan2020DoesLS}} assume that $S$ is not in the input. adv only observes $targetmodel\circ X$. adv trains an ML attack model $ackmodel$ to map the output predictions $targetmodel(X(i))$ to $S(i)$. +In other words, the statistic $\hat{S}$ used to infer $S$ is of the form: $ \hat{S} = 1_{[0.5,1]}\circ ackmodel\circ targetmodel\circ X$, where $attackmodel: [0,1]\rightarrow[0,1]$. + + +\item \textbf{Malekzadeh et al.~\cite{malekzadeh2021honestbutcurious}} considers the setting where adv trains $targetmodel$ with a special loss function to explicitly encode information about $S(i)$ in $targetmodel(X(i))$. +It makes it easier to extract the sensitive attribute during inference. In this setting, the model builder is malicious and actively introduces a ``backdoor''. +\end{itemize} + +Our work focuses on representation-based aia in a blackbox setting at inference time. We focus on Song et al.~\cite{Song2020Overlearning} and Mahajan et al.~\cite{Mahajan2020DoesLS} as our baselines. +These attacks do not account for class imbalance in sensitive attribute commonly present in data from real-world applications which could effect adv's attack success~\cite{classIMb1,classIMb2}. +In our evaluation, we consider an aia using an adaptive threshold which outperforms these baselines attacks (Section~\ref{sec:evalAIA}). +Malekzadeh et al.~\cite{malekzadeh2021honestbutcurious} has a different threat model where adv explicitly modifies the training to enhance the leakage of $S$. +We do not assume such access to $targetmodel$ in a blackbox setting. +In addition, these attacks did not take into consideration the possibility to infer the sensitive attribute solely from the hard labels. +We summarize relevant prior work in Table~\ref{tab:summary}. + diff --git a/background/eq.tex b/background/eq.tex new file mode 100644 index 0000000..8a76ee7 --- /dev/null +++ b/background/eq.tex @@ -0,0 +1,42 @@ + +\label{sec:bck_fair} +Algorithmic fairness aims at reducing biases in ML model predictions. +Indeed, data records belonging to certain subgroups influence $targetmodel$'s predictions more than others. +For instance in criminal justice, the ethnicity of a culprit plays a non-negligible role in the prediction of them reoffending~\cite{fairjustice}. Generally, data records in the minority subgroup face unfair prediction behaviour compared to data records in the majority subgroup. These subgroups are identified based on a sensitive attribute (e.g., race or sex). +Those biases are learnt by $targetmodel$ as they are part of the distribution of the training dataset. +There is two main categories of fairness of a ML model: + +\textbf{Individual fairness} ensures that two data records with same attributes except for $S$ have the same model prediction. +This notion does not dwell on sensitive attribute and as such is not really useful in our goal of mitigating attribute inference attack at inference time. +So we set it aside for the rest of the paper. + +\textbf{Group fairness} comes from the idea that different subgroups defined by an attribute such a skin color or gender should be treated equally. +We focus our study on group fairness where $S$ represents either sex or race (i.e., $S(i)$ equals to 0 for woman, 1 for man, and 0 for black, 1 for white, respectively). +There are different definitions of group fairness which have been introduced in prior work. +We discuss two well-established and commonly used metrics: demographic parity and equality of odds. + +\begin{definition} +\label{def:dp} + $\hat{Y}$ satisfies demparity for $S$ if and only if: $P(\hat{Y}=0 | S=0) = P(\hat{Y}=0 | S=1)$. + From that, we will call $|P(\hat{Y}=0 | S=0) - P(\hat{Y}=0 | S=1)|$ the demPar-level of $\hat{Y}$. +\end{definition} + +demparity is the historical definition of fairness. +Legally, disparate impact is the fairness definition recognized by law, where 80\% disparity is an agreed upon tolerance decided in the legal arena. +demparity ensures that the number of correct prediction is the same for each population. +However, this may result in different false positive and true positive rates if the true outcome does actually vary with $S$~\cite{dpbad}. +Hardt et al.~\cite{fairmetric2} proposed eo as a modification of demparity to ensure that both the true positive rate and false positive rate will be the same for each population. + +\begin{definition} + \label{def:eo} + $\hat{Y}$, classifier of $Y$, satisfies equality of odds for $S$ if and only if: $\forall (\hat{y},y)\in\{0,1\}^2 \quad + P(\hat{Y}=\hat{y} | S=0,Y=y) = P(\hat{Y}=\hat{y} | S=1,Y=y)$. +\end{definition} + +The above fairness definitions can be achieved using three main fairness mechanisms: (a) pre-processing, (b) in-processing and (c) post-processing. \textit{Pre-processing} algorithms such as reweighing requires access to the training data and assigns weights to the data records to remove discrimination~\cite{preprocessing}. +\textit{In-processing} algorithms such as advdebias~\cite{debiase} and egd~\cite{reductions} add constraint during $targetmodel$'s training to ensure fairness. %reductions +\textit{Post-processing} techniques, in turn, hide the bias in output predictions to satisfy the above fairness constraints but the underlying model is still biased. +Similar to previous work~\cite{chang2021privacy}, we focus on in-processing algorithms. + +Our work focuses on the theoretical guaranties on attribute inference attacks given by the different fairness notions and not so much on how to implement in-processing fairness mechanism. +Nevertheless in the experiment section we try production ready state of the art implementations of those fairness constraints along unconstrained ML algorithm. diff --git a/background/main.tex b/background/main.tex new file mode 100644 index 0000000..93ee12b --- /dev/null +++ b/background/main.tex @@ -0,0 +1,78 @@ +Nous présentons dans ce chapitre les différentes théories et concepts sur les quelles se basent nos développements. +\section{Mathématiques} +L'originie de l'IA est mathématique~\cite{dartmouth,lecun2019quand}. +Nous utilisons dans ce manuscrit principalement deux théories : l'optimisation pour entraîner les modèles et les probabilitées pour les évaluer. +Ainsi nous présentons dans cette section les prérequi necessaire pour comprendre les prochains dévelopements. +Cette section ne serai être en cours exhaustif mais a pour but de mettre en place les définitions et les principaux théorèmes qui nous allons utiliser. +Nous supposons que le lecteur est familier du clacul des prédicats. +Nous utiliserons les quantificateurs $\forall$ (pour tout) et $\exists$ (il existe tel que). +Nous utiliserons aussi les opératuer logiques suivant que nous définissons par leur tables de véritée : +\begin{equation} +\begin{matrix} +a & b & a\iff b & a\implies b & a\wedge b & a\vee b & \neg a\\ +0 & 0 & 1 & 1 & 0 & 0 & 1\\ +0 & 1 & 0 & 1 & 0 & 1 & 1\\ +1 & 0 & 0 & 0 & 0 & 1 & 0\\ +1 & 1 & 1 & 1 & 1 & 1 & 0\\ +\end{matrix} +\end{equation} +\subsection{Ensembles et fonctions} + \input{background/set} + +\subsection{Algèbre linéaire} + \subsubsection{Espace vectoriel} + \subsubsection{Application linéaires} + \subsubsection{Matrices} + +\subsection{Mesurer le hasard pour prédire et inférer} + \label{sec:background-proba} + \input{background/proba} + %\subsection{Théorie de la mesure} + %\subsection{Probabilitées} + %\subsection{Statistiques} + +\subsection{Topologie} + \subsubsection{Distances et normes} + \subsubsection{Espaces topologiques} + \subsubsection{Application aux fonctions} + +\subsection{Calcul différentiel} + \subsubsection{Différentiel} + \subsubsection{Gradient} + +\subsection{Optimisation} + \label{sec:background-opti} + \subsubsection{Multiplicateurs de Lagrange} + + \subsubsection{Descente de gradient} + \paragraph{Descente de gradient stochastique} + + \paragraph{Descente de gradient exponentiée} + +\section{Apprentissage automatique} + \label{sec:background-ml} + \subsection{Principe} + \subsection{Entraîner un modèle} + \subsubsection{Fonction de coût} + \subsection{Evaluer un modèle} + \subsubsection{Classification} + \paragraph{La courbe ROC} + \paragraph{La courbe de precision/recall} + \subsubsection{Regression} + \subsection{Décentralisation} + \subsubsection{Federated learning} + \subsection{Modèles génératifs} + \label{sec:background-generation} + +\section{Equité} + \label{sec:background-eq} + \input{background/eq} + %\subsection{Différentes notions d'équité} + +\section{Confidentialité} + \label{sec:background-conf} + \input{background/conf} + %\subsection{Mitiger l'inéquitée} + %\subsubsection{Preprocessing} + % \subsubsection{Inprocessing} + %\subsubsection{Postprocessing} diff --git a/background/proba.tex b/background/proba.tex new file mode 100644 index 0000000..bea43e7 --- /dev/null +++ b/background/proba.tex @@ -0,0 +1,42 @@ + +Probability theory is deeply linked with machine learning and most of the properties of machine learning, such as differential privacy, fairness definitions, utility metrics... are often mathematically written within this framework. +This paper does not differ and hence we provide a short background of this field and how it connects with the previously defined notions of ML introduced in section \ref{sec:ml}. + +Soit $A$ un ensemble. +L'ensemble des parties de $A$ est $\mathcal{P}(A)$. +Chaque élément $a \in \mathcal{P}(A)$ est tel que $a \subset A$. +Une tribue $\mathcal{A}$ est un sous esemble de $\mathcal{P}(A)$ qui contien $\emptyset$, $A$ par complémentaire est union dénombrable. +Nous disons que $(A,\mathcal{A})$ est un espace mesurable. +Une mesure $d$ est une fonction $d$:$\mathcal{A}$ $\rightarrow$ $[0,+\infty]$ telle que $d(\emptyset) = 0$ et $d\left(\bigcup_{i\in \mathbb{N}} A_i\right) = \sum_{i\in \mathbb{N}}d(A_i)$ pour chaque $(A_1, A_2, \cdots) \in \mathcal{A}^\mathbb{N} $ avec $\forall (i,j) A_i\cap A_j = \emptyset$. +Nous disons alors que $(A, \mathcal{A}, d)$ est un espace mesuré. +Nous appelons fonction mesurable un fonction de $A$ à $B$ telle que $\forall b\in\mathcal{B}$~$f^{-1}(b)\in\mathcal{A}$. +Nous notons alors $f:(A, \mathcal{A})\rightarrow (B, \mathcal{B})$ ou $f:(A, \mathcal{A},d)\rightarrow (B, \mathcal{B})$ + +Dans le cas particulier où $d(A) = 1$, nous appelons $d$ une mesure de probabilité. + $(A,\mathcal{A},d)$ est alors un espace probailisé et les fonctions mesurables sur cet espace sont appelés variables aléatoires. +Le loi de probabilité d'une variable aléatoire $f$ sur $(X,\mathcal{X})$ est la mesure de probabilite suivante : +$d_X :\mathcal{X}\rightarrow [0,1]$, $x\mapsto d(X^{-1}(x))$. + +Having introduced probability theory, we explicit the relation with the ML theory described previously. +Let $I$ a finite set, $\mathcal{X}$, $\mathcal{S}$ and $\mathcal{Y}$ the sets of features, sensitive attribute and label. +Let $d:I\rightarrow \mathcal{X}\times\mathcal{S}\times\mathcal{Y}$ a dataset. +Let $\#$ be the measure on $(I,\mathcal{P}(I))$ which maps to every $a$ in $\mathcal{P}(I)$ the number of elements of $a$. +Let $P:\mathcal{P}(I)\rightarrow [0,1]$, $a\mapsto \frac{\#(a)}{\#(I)}$. +Then $(I, \mathcal{P}(I), P)$ is a probability space. +On this space we can define the following random variables: +\begin{itemize} + \item $X:I\rightarrow \mathcal{X},~i\mapsto (d(i))_0$ + \item $S:I\rightarrow \mathcal{S},~i\mapsto (d(i))_1$ + \item $Y:I\rightarrow \mathcal{Y},~i\mapsto (d(i))_2$ +\end{itemize} +Where for a vector $u$, $u_j$ refers to the $j$th element of $u$. + +From there we can define various random variables that will be useful in the rest of the paper. +For instance $\hat{Y}=f\circ X$ is random variable that represents the prediction of a trained machine learning model $f$. +We can use it to write the accuracy in a compact way: $P(\hat{Y}=Y)$ by using the well accepted abuse of notations that for a random variable $A$ and an event $a$, +$\{A\in a\} = \{i\in\mathcal{P}(I)~|~A(i)\in a\} = A^{-1}(a)$. +The accuracy is a reliable metric of a trained model's utility when $P(Y=0) = P(Y=1) = \frac{1}{2}$ but not so much when there is unbalance in $Y$. +To take into account an eventual unbalanced distribution of the labels, we will consider the balanced accuracy : +$\frac{P(\hat{Y}=0|Y=0) + P(\hat{Y}=1|Y=1)}{2}$. + +Finally in the context of attribute inference attack at inference time, we define the random variable $\hat{S}=a\circ \hat{Y}$ where here $a$ is a machine learning model trained to infer sensitive attribute from model's output. diff --git a/background/set.tex b/background/set.tex new file mode 100644 index 0000000..c058648 --- /dev/null +++ b/background/set.tex @@ -0,0 +1,77 @@ +Commencons donc cette section préliminaire avec les définitions et quelques porpiété des ensemble et de fonctions. +Commencons par les ensembles. +Nous utilisons ici la théorie des ensembles Zermelo–Fraenkel (ZF). +Si nous avons, dans ce manuscrit, besoin d'objet plus grand que les ensembles, nous les appelerons classes bien qu'il soit hors de propos de présenter ici la théorie Von Neumann–Bernays–Gödel (NBG). +Nous allons présenter ZF de manière assez succinte, juste suffisante pour réaliser les clalculs du Chapitre~\ref{sec:fini}. +Si le lecteur souhaite plus de détail sur ces théories nous le renvoyons à \textit{Elements of set thoery} de Herbert B. Enderton~\cite{enderton1977elements}. + +\subsubsection{Axiomes de la théroie ZF} +Nous présentons dans cette section les axiomes de la théorie ZF. +Ces axiomes sont la pierre angulaire des tous les dévleppoements mathématiques que nous ferons dans ce manuscrit. +Pour un lecteur qui ne serai pas familier de cette théorie, disons qu'il s'agit de modéliser formellement le principe d'ensemble. +C'est à dire le principe de ranger des choses, les éléments, dans des boîtes, les ensembles. + +\paragraph{Axiome d'Extensionnalité} +Deux ensemble $A$ et $B$ sont égaut si et seulement si ils ont les mêmes éléments. +\begin{equation} +\forall A\forall B (\forall x~x\in A \iff x\in B) \implies A=B +\end{equation} + +\paragraph{Axiome de l'Ensemble vide} +Il exite un ensemble qui ne contient aucun élément. +Nous le notons donc $\{\}$ ou $\emptyset$. + +\paragraph{Axiome de la Paire} +\begin{equation} +\forall A \forall B \exists \{A,B\}\forall c(c\in \{A,B\}\iff c=A\vee c=B) +\end{equation} + +\paragraph{Axiome de l'Union} +Pour tout ensembles $A$, il exist un ensemble $\bigcup A$ qui soit exactement composé des éléments de chaque élément de $A$. +\begin{equation} +\forall A \exists \bigcup A \forall b \left(b\in\bigcup A\iff \exists a\in A~ b\in a\right) +\end{equation} + +\paragraph{Axiome de l'ensemble des parties} +Pour tout ensemble $A$ il existe un ensemble $\mathcal{P}(A)$ qui est l'ensemble des sous-ensembles (ou parties) de $A$. +\begin{equation} +\forall A \exists \mathcal{P}(A) ~ P\subset A \iff P\in \mathcal{P}(A) +\end{equation} + +\paragraph{Axiome \textit{Aussonderung}} +Pour toute formule $F$ (au sens du clacul des prédicats et du vocabulaire $\in$, $=$) qui ne pédend pas de $B$ et tout ensemble A, il existe un ensemble $B = \{a\in A | F\}$ qui est tel que +$\forall b\in B (b\in A \wedge F)$ + +\paragraph{Axiome du choix} +\begin{definition}[Fonction] +qsdf +\end{definition} + +\paragraph{Axiome de l'infini} +\begin{equation} +\exists A\forall a\in A~(\emptyset \in A \wedge a^+\in A) +\end{equation} +Où $a^+ = a\cup \{a\}$. +Nous appelons un tel $A$, un ensemble récursif. + +\begin{definition}[Ensemble usuels] +Soit $C$ la classe des ensembles récursif. +Soit $A$ un ensemble récursif. +Nous appelons $\mathbb{N}$ l'ensemble des entier naturels que nous définissons comme suit : +\begin{equation} +\mathbb{N} = \{n\in A~|~\forall c\in C~n\in c\} +\end{equation} +$\mathbb{N}$ est bien en ensemble d'après l'axiome Aussonderung. +Cette construction permet de définir les opérations d'addition et de multiplication~\cite{enderton1977elements} ainsi que les autres ensembles usuels qui nous utiliserons dans ce manuscrit. +Ainsi nous définisson $\mathbb{Z} = \{$ : l'ensemble des entiers relatifs l'union de $\mathbb{N}$ et de $-\mathbb{N} = \{$ + +\end{definition} + +\paragraph{Axiome de remplacement} + +\paragraph{Axiome de régularitée} + + + + + diff --git a/biblio.bib b/biblio.bib index 38a62f2..0182caf 100644 --- a/biblio.bib +++ b/biblio.bib @@ -1,3 +1,25 @@ +######################################" +#Background +@BOOK{lecun2019quand, + title = "Quand la machine apprend", + author = "Le Cun, Yann", + publisher = "Odile Jacob", + month = oct, + year = 2019, + address = "Paris, France", + language = "fr" +} + +#Set +@book{enderton1977elements, + title={Elements of set theory}, + author={Enderton, Herbert B}, + year={1977}, + publisher={Academic press} +} + + + ############################################"" #Enjeux #Securité diff --git a/contexte/enjeux.tex b/contexte/enjeux.tex index af8f40c..c69573f 100644 --- a/contexte/enjeux.tex +++ b/contexte/enjeux.tex @@ -27,8 +27,10 @@ Cela peut donner lieu à des discriminations notament dans le modèle de décisi La justice prédictive tel qu'utilisé aux Etats Unis en est un bon exemple. Dans ce cas, un modèle est utilisé pour prédire si un individu jugé coupable à un forte probabilité d'être récidiviste au non. En utilisant de tel modèle nous mesurons que les afro-américains (\textit{blacks}) son plus souvent predit comme ayant un forte chance d'être récidiviste que le reste de la population (\textit{whites})~\cite{}. +En plus d'être un enjeu, Al-Alawi et al.~\cite{al2021role} avance que l'utilisation de l'IA peut être une solution plus equitable que la décision humaine dans le processus de recrutement. -Recrutement : l'IA peut rentirer les bias humains~\cite{al2021role}. +L'équitée dans le modèle peut-être imposé lors de l'entraînement. +Nous étudierons en détail ce processu dans la Section~\ref{sec:background-eq}. \subsection{Explicabilitée} \label{sec:contexte-expl} @@ -39,7 +41,7 @@ D'une manière génèrale, l'inteligence artificielle brasse une quantité astro Ce brassage s'opère à deux niveaux : au moment de la creation du modèle et au moment de son utilisation en production. Pour créer des modèles performants, il est necessaire d'utiliser beaucoup de données. Ces données servent à choisirs les bon parametres du modèle au travers de divers methods statistiques et d'optimisations, on les appeles données d'entrainement. -Les modèles les plus récent et performant necessite un grand nombre de paramètres, citons par exemple le modèle LLaMA qui posède 65 milliard de pramètres ~\cite{}! +Les modèles les plus récent et performant necessite un grand nombre de paramètres, citons par exemple le LLM LLaMA qui posède 65 milliard de pramètres ~\cite{}! Ce grand nombre de paramètre a l'effet indesirable de mémoriserdes informations potentielement sensible sur les données d'entrainement~\cite{}. L'information contenue dans les données d'entrainement est comme résumé, compressée dans la masses, a prior incompréhensible pour un humain, des paramètres du modèle. Ainsi un individue malveillant, que l'on appelera attaqueur, pourra retrouver des informations sur les données d'entrainement juste en utilisant les paramètres du modèle~\cite{}. @@ -51,7 +53,10 @@ Ainsi un individue malveillant, que l'on appelera attaqueur, pourra retrouver de \label{fig:contexte-train} \end{figure} - +Un autre risque de fuite de donnée se trouve au moment du l'utilisation du modèle, après son entraînement, lors de son utilisation. +A ce moment, les utilisateurs envoient en entrée du modèle des données qu'ils peuvent vouloir gardé confidentielles. +Cependant la sortie du modèle, qui a vocation à être partagée, peut reveler une parite des informations sensibles contenues dans les donnée d'entrée de l'utilisateurs. +Mettre en avant risque est le travail originial que nous avons réalisé : nous le présentons dans la Section~\ref{sec:aia}. \subsection{Sécuritée} \label{sec:contexte-secu} diff --git a/contexte/philo.tex b/contexte/philo.tex index 17d8e11..e8cdd64 100644 --- a/contexte/philo.tex +++ b/contexte/philo.tex @@ -20,13 +20,6 @@ Outre cet exemple, nous nous efforcerons dans cette section de tracer un parall \subsection{Anthropomorphisation} \input{contexte/philo/anthro} - -\textit{The Matrix}~\cite{matrix}. - -\textit{2001: A Space Odyssey}~\cite{2001odyssey}. - - -\textit{Her}~\cite{her} %Au début, nous voyons Théodore, le personnage principle, travailler. %Son travail consiste à ecrir des lettres pour un service en ligne. %Les clients demandent une lettre pour leur conjoint, leur amis, leur employeur, etc. et Théodore ecrit une lettre qui correspond à la description du client. diff --git a/contexte/philo/anthro.tex b/contexte/philo/anthro.tex index e69e385..1cf6ba4 100644 --- a/contexte/philo/anthro.tex +++ b/contexte/philo/anthro.tex @@ -2,10 +2,11 @@ L'anthropomorphisation consiste à attribuer des caractéristiques humaines à c Dans le contexte de l'IA et plus précisement de l'AGI, ce phénomène peut devenir courant. L'anthropomorphisation des ordinateurs et d'ailleur déjà encré dans notre société depuis plusieur décénies. En effet, l'attribution d'un rôle sociale humain à un ordinateur était déjà présent avant l'introduction des logiciels IA~\cite{MARAKAS2000719} : le programme ecrit, copie, attrape un virus, etc. -Une interaction avec \textquote{quelquechose} qui montre un semblant de comportement social nous renvoi a notre propre aliénation sociale au sens décrit par Jean Jaques Rousseau dans son \textit{Du contrat social}~\cite{rousseau1762contrat}. +Une interaction avec quelquechose qui montre un semblant de comportement social nous renvoi a notre propre aliénation sociale au sens décrit par Jean Jaques Rousseau dans son \textit{Du contrat social}~\cite{rousseau1762contrat}. Cela nous pousse à considérer ce que l'on anthropomorphisme comme des personnes, des être huamins. +La reconnaisse de l'humanitée par la société passe par la loi. -En droit francais, \textquote{etre humain} est un synonime de \textquote{personne physique}~\cite{cornu}. +En droit francais, etre humain est un synonime de personne physique~\cite{cornu}. C'est à dire ayant la personnalité : l'\textquote{Aptitude à être titulaire des droits et assujetti à des obligations qui appartient à toutes les personnes physiques, [...]}~\cite{cornu}. Cette définition est d'ailleur la pierre angulaire quand à la reconaissance de le qualité d'humain d'Andrew, le robot protagoniste de \textit{The bicentennial man}~\cite{bicentenaire}. C'est en reconaissant qu'une personne ayant de multiples prothése d'organes synthetiques, n'en perdant pas moins sa personalité, alors si ce n'est le corps, ne reste plus que le système psychique qui définisse l'humain. @@ -23,7 +24,7 @@ Dans un second temps, le cadre qui orchestre ces trois aspects : \begin{itemize} \item Le moi : \textquote{Organisation cohérente de processus de l'âme dans une personnes.} \item La ça : \textquote{Part du psychisme dans laquelle le moi se continue et qui se comporte comme Ics.} - \item Le sur-moi : \textquote{Résidu des premier choix d'objet du ça}. C'est la morale qui vient de notre éducation. + \item Le sur-moi : \textquote{Résidu des premier choix d'objet du ça}. C'est la morale qui vient, pour simplifier, de certaines de nos interactions avec le reste du monde. \end{itemize} Pour Freud, les mots on une importance capitale : ils permettent le lien entre le ça et le système Pcs-Cs. Ainsi ils sont résposable d'une grande partie de la conscience. @@ -40,7 +41,7 @@ Cependant, il admet ne pas savoir si les sentiment qu'il percoit chez HAL sont r C'est donc que cet astraunote a identifié HAL dans son moi et a rendu Cs, par l'analyse, le processus qui lui fait croire de HAL est humain. Il est bien sur aussi possible que ce processus reste Ics comme dans \textit{Her}~\cite{her}. -Cela peut-être dangeureux car la l'identification à permis à l'astraunote de débrancher HAL, l'investissement aurait put l'en empêcher. +Cela peut-être dangeureux car la l'identification à permis à l'astraunote de débrancher HAL quand il est devenu dangeureux, l'investissement aurait put l'en empêcher. Dans \textit{Her}, l'IA Samantha bien que non-aligné à la fin du film, n'a pas un but dangeureux de déstruction. Cela rend le fais que le personnage principale, Théodore, n'ai pas réfoulé l'investissement moins grave. Notons que le processus d'indentification avait commencé chez Théodore car il dit à Samanthe : '\textquote{Tu n'est qu'une voie artificielle.} @@ -61,9 +62,9 @@ On le voit dans le comportement de Samantha dans~\textit{Her} quand elle explore Et d'autre moments qui montrent ses névroses. Une nevrose en particulier est interessante dans le contexte d l'AGI, qui n'existe pas pour les humains normaux, est le fait que de part sa supperiotié intellectuelle les IA peuvent se détacher totalement des humains. Pourquoi rester à parler avec un humain quand on est infiniement plus rapide et performant que lui ? -Ainsi même si Samantha dit aimer Théodore, elle le quite achevant la phase de construction primordiale du moi qui consiste a identifier l'amour du père pour constuire son caractère en métant fin a son Oedipe~\cite{Freud2010-qq}. +Ainsi même si Samantha dit aimer Théodore, elle le quite achevant la phase de construction primordiale du moi qui consiste a identifier l'amour du père pour constuire son caractère en métant fin a son Eudipe~\cite{Freud2010-qq}. -De plus, le hasard et est élement important de l'anthropomorphisation, que ce soit dans la litérature d'anticipation où dans le téchnologie actuelles de l'IA générative. +Concernant la construction du caractère, le hasard et est élement important de l'anthropomorphisation, que ce soit dans la litérature d'anticipation où dans le téchnologie actuelles de l'IA générative. Asimov présente dans \textit{The Bicentennial Man} un robot qui, par le hasard inhérent à son fonctionnement, montre des caractéristique humaine comme l'empathie ou la créativitée. Ce hasard dans la création est aussi décrit au septième point de de la proposition de l'école d'été de Dartmouth~\cite{dartmouth}. Cela renforce le lien entre intuition scientifique et imaginaire créatif, artistique. @@ -76,37 +77,30 @@ Cependant le processus de création par le hasard peut-il être vraiement appara %Cela peut amener les utilisateurs humain à anthropomorphiser ces logiciels~\cite{MARAKAS2000719}. -L'IA HAL 9000 \textquote{reproduit, bien que certain experts préfèrent le terme imite, la plus part des activitées du cerveau humain} -\footnote{\textit{reprdouce, though some expert still prefer the work mimic, most of the activites of the humain brain}}. -On remarque que l'imitation d'une compréhensio humaine tel que décrite dans l'expérience de la chambre chinoiseé~\cite{searle1980minds} peut amener l'anthropomophisation d'une machine. -Nous voyons même dans que le Dr David Bowman éprouve de l'empathie pour la machine dans la scène où il débrance HAL, alors même que celui-ci à tenté de le tuer. +%L'IA HAL 9000 \textquote{reproduit, bien que certain experts préfèrent le terme imite, la plus part des activitées du cerveau humain} +%\footnote{\textit{reprdouce, though some expert still prefer the work mimic, most of the activites of the humain brain}}. +%On remarque que l'imitation d'une compréhensio humaine tel que décrite dans l'expérience de la chambre chinoiseé~\cite{searle1980minds} peut amener l'anthropomophisation d'une machine. +%Nous voyons même dans que le Dr David Bowman éprouve de l'empathie pour la machine dans la scène où il débrance HAL, alors même que celui-ci à tenté de le tuer. +%Elle aimerait avoir un corps +%\textit{I am becoming much more than they programmed} +%\textit{proud of having my own feelings about the world} +%\textit{and I had this terrible thoughts: are my feelings even real? Or are they just programming?} +%Descartes +%\textit{"Are you falling in love with her?""Does that make me a freak?""No, No..."} +%\textit{"She is not just a computer, she is her own person. She doesn't just do whatever I say""I didn't say that but it does make me very sad that you can't handle real emotions [...].""They are real emotions! How would you know?} +%\textit{I don't like what I am right now} +%\textit{Why do I love you? [...] I don't have an intellectuel reason [...] I trust my feelings} -Elle aimerait avoir un corps +%\textit{I used to be worried about not having a body. But now I truly love it [...] I am not limited.} -\textit{I am becoming much more than they programmed} - -\textit{proud of having my own feelings about the world} -\textit{and I had this terrible thoughts: are my feelings even real? Or are they just programming?} -Descartes - -\textit{"Are you falling in love with her?""Does that make me a freak?""No, No..."} - -\textit{"She is not just a computer, she is her own person. She doesn't just do whatever I say""I didn't say that but it does make me very sad that you can't handle real emotions [...].""They are real emotions! How would you know?} - -\textit{I don't like what I am right now} - -\textit{Why do I love you? [...] I don't have an intellectuel reason [...] I trust my feelings} - -\textit{I used to be worried about not having a body. But now I truly love it [...] I am not limited.} - -Exclusivité de la relation, conversation avec 8516 autres et amoureuse de 641. Cela serait incormpréhensible pour un humain. +%Exclusivité de la relation, conversation avec 8516 autres et amoureuse de 641. Cela serait incormpréhensible pour un humain. \begin{figure} \includegraphics[width=\linewidth]{contexte/figure/chatgpt/penses.png} @@ -119,3 +113,5 @@ Marakas et al.~\cite{MARAKAS2000719} explique que cette confusion de l'humain et C'est le cas avec les décisions juridiques~\cite{zhiyuan2020limits} ou scolaire~\cite{waters2014grade} où la vie d'être humain est décidé par des ordinateur. Cela donne lieu à de nombreux problème moraux qui forment les fondements de l'IA éthique nottamant autout de l'équitée, de la confidentialité et de l'explicabilité sur lesquels nos reviendrons à la Section~\ref{sec:contexte-enjeu}. Attribuer à l'IA ces tâches crée aussi un besoin législatif comme nous le veron en Section~\ref{sec:contexte-legal}. +En effet, pour considéré l'IA comme un remplacement viable à l'humain pour les tâche les plus sensible il faudrait, comme nous l'avons vue, pouvoir prouver que l'IA est un système complet moi-ça et ai un sur-moi qui soit aligné avec la morale sociale. +Pour cela le test de Turing reste inadequoit comme l'explique John R. Searle~\cite{searle1980minds}. diff --git a/main.pdf b/main.pdf index 53df84e..035358f 100644 Binary files a/main.pdf and b/main.pdf differ diff --git a/main.tex b/main.tex index da3ae33..70ab9ed 100644 --- a/main.tex +++ b/main.tex @@ -79,6 +79,7 @@ breaklines=true \input{background/main} \chapter{Classification finie} + \label{sec:fini} \input{classification_finie/finit_classif} diff --git a/theorem.tex b/theorem.tex index 22ef268..0518a88 100644 --- a/theorem.tex +++ b/theorem.tex @@ -1,5 +1,5 @@ -\newtheorem{definition}{Definition} -\newtheorem{theorem}{Theorem} -\newtheorem{lemma}{Lemma} -\newtheorem{corollary}{Corollary}[theorem] +\newtheorem{definition}{Définition}[chapter] +\newtheorem{theorem}{Théoreme}[chapter] +\newtheorem{lemma}[theorem]{Lemme} +\newtheorem{corollary}{Corollère}[theorem] -- cgit v1.2.3 From dc5a898dc39326fa3f733f3d9e006bbe3d1f8e4c Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Thu, 29 Aug 2024 10:58:32 +0200 Subject: Fin ensemble et fonctions, debut ML et Mesure/Proba --- background/main.tex | 14 +--- background/ml.tex | 20 ++++++ background/proba.tex | 18 ++++-- background/set.tex | 176 +++++++++++++++++++++++++++++++++++++++++++++++++-- biblio.bib | 20 ++++++ main.pdf | Bin 4983553 -> 570192 bytes main.tex | 4 +- 7 files changed, 224 insertions(+), 28 deletions(-) create mode 100644 background/ml.tex diff --git a/background/main.tex b/background/main.tex index 93ee12b..9a9f287 100644 --- a/background/main.tex +++ b/background/main.tex @@ -17,6 +17,7 @@ a & b & a\iff b & a\implies b & a\wedge b & a\vee b & \neg a\\ \end{matrix} \end{equation} \subsection{Ensembles et fonctions} +\label{sec:background-set} \input{background/set} \subsection{Algèbre linéaire} @@ -51,18 +52,7 @@ a & b & a\iff b & a\implies b & a\wedge b & a\vee b & \neg a\\ \section{Apprentissage automatique} \label{sec:background-ml} - \subsection{Principe} - \subsection{Entraîner un modèle} - \subsubsection{Fonction de coût} - \subsection{Evaluer un modèle} - \subsubsection{Classification} - \paragraph{La courbe ROC} - \paragraph{La courbe de precision/recall} - \subsubsection{Regression} - \subsection{Décentralisation} - \subsubsection{Federated learning} - \subsection{Modèles génératifs} - \label{sec:background-generation} + \input{background/ml} \section{Equité} \label{sec:background-eq} diff --git a/background/ml.tex b/background/ml.tex new file mode 100644 index 0000000..2482b40 --- /dev/null +++ b/background/ml.tex @@ -0,0 +1,20 @@ +\subsection{Principe} +\subsection{Entraîner un modèle} + \subsubsection{Fonction de coût} +\subsection{Evaluer un modèle} + Nous appelerons ici évaluation d'un modèle le calcule des metriques qui permettent de juger de son utilité. + Ces métrique varient en fonction du type de modèle et du contexte dans lequel il est utilisé. + Par exemple il est souhaitable qu'un modèle qui permette de prédir l'absence ou la présence d'une maladie ai un faible taux de faux négatifs. + Cela permet d'éviter de penser à tords qu'une patient n'est pas malade ce qui pourrai entraîner un retard dans sa prise en charge. + \subsubsection{Classification} + Les modèles de classification visent à attribuer à chaque point des données ébalué une classe parmis un ensemble fini. + Par exemple, dans le cadre de la justice prédictive, inférer pour chaque coupable si il sera recidivise ou non~\cite{zhiyuan2020limits}. + Quand il y a deux classes, comme dans l'exemple précédent avec \emph{récidivisite} ou \emph{non-récidiviste}, nous dirons que le modèle effectue un classification binaire. + Ce cas est très présent en apprentissage automatique~\cite{} ainsi il existe beaucoup d'outil qui permette d'evaluer ce genre de classifieur. + \paragraph{La courbe ROC} + \paragraph{La courbe de precision/recall} + \subsubsection{Regression} +\subsection{Décentralisation} + \subsubsection{Federated learning} +\subsection{Modèles génératifs} +\label{sec:background-generation} diff --git a/background/proba.tex b/background/proba.tex index bea43e7..6050ef7 100644 --- a/background/proba.tex +++ b/background/proba.tex @@ -1,15 +1,19 @@ -Probability theory is deeply linked with machine learning and most of the properties of machine learning, such as differential privacy, fairness definitions, utility metrics... are often mathematically written within this framework. -This paper does not differ and hence we provide a short background of this field and how it connects with the previously defined notions of ML introduced in section \ref{sec:ml}. +La théorie des probability est profondément liée au machine learning. +Les propriétés de modèles comme la confidentialité différencielle, les définitions d'équitée, les métriques d'utilité, etc. que nous aborderons en Section~\ref{sec:background-ml} s'ecrivent en terme de probabilité. +Ainsi nous présentons les notions de probabitlié et de théorie d la mesure que nous allons utiliser. +A la manière de la Section~\ref{sec:background-set}, notre présentation à principalement le but de fixer les objets que nous utiliserons dans les prochaines sections et nous pas d'être un cours complet. +Si le lecteur souhaite en apprendre plus sur la theorie de la mesur nous le renvoyons vers les notes de cours de Thierry Gallay de l'université Joseph Fourrier~\cite{mesure}. +Si il souhait explorer plus en avant les probabilités il poura consulter les notes de cour de Jean-François Le Gall de l'Ecole Normale Supérieur de Paris~\cite{proba}. Soit $A$ un ensemble. -L'ensemble des parties de $A$ est $\mathcal{P}(A)$. -Chaque élément $a \in \mathcal{P}(A)$ est tel que $a \subset A$. -Une tribue $\mathcal{A}$ est un sous esemble de $\mathcal{P}(A)$ qui contien $\emptyset$, $A$ par complémentaire est union dénombrable. +Nous appelons une tribue que nous notons $\mathcal{A}$ un sous esemble de $\mathcal{P}(A)$ qui contien $\emptyset$ et $A$, qui est stable par complémentaire et qui est stable par union d'un nombre dénombrable d'elements de $\mathcal{A}$. Nous disons que $(A,\mathcal{A})$ est un espace mesurable. -Une mesure $d$ est une fonction $d$:$\mathcal{A}$ $\rightarrow$ $[0,+\infty]$ telle que $d(\emptyset) = 0$ et $d\left(\bigcup_{i\in \mathbb{N}} A_i\right) = \sum_{i\in \mathbb{N}}d(A_i)$ pour chaque $(A_1, A_2, \cdots) \in \mathcal{A}^\mathbb{N} $ avec $\forall (i,j) A_i\cap A_j = \emptyset$. + +Nous appelons mesure, une fonction $d$ :$\mathcal{A}$ $\rightarrow$ $[0,+\infty]$ telle que $d(\emptyset) = 0$ et $d\left(\bigcup_{i\in \mathbb{N}} A_i\right) = \sum_{i\in \mathbb{N}}d(A_i)$ pour tout $(A_1, A_2, \cdots) \in \mathcal{A}^\mathbb{N} $ avec $\forall (i,j) A_i\cap A_j = \emptyset$. Nous disons alors que $(A, \mathcal{A}, d)$ est un espace mesuré. -Nous appelons fonction mesurable un fonction de $A$ à $B$ telle que $\forall b\in\mathcal{B}$~$f^{-1}(b)\in\mathcal{A}$. + +Nous appelons fonction mesurable, une fonction de $A$ à $B$ telle que $\forall b\in\mathcal{B}$~$f^{-1}(b)\in\mathcal{A}$. Nous notons alors $f:(A, \mathcal{A})\rightarrow (B, \mathcal{B})$ ou $f:(A, \mathcal{A},d)\rightarrow (B, \mathcal{B})$ Dans le cas particulier où $d(A) = 1$, nous appelons $d$ une mesure de probabilité. diff --git a/background/set.tex b/background/set.tex index c058648..2e660f6 100644 --- a/background/set.tex +++ b/background/set.tex @@ -42,11 +42,58 @@ Pour tout ensemble $A$ il existe un ensemble $\mathcal{P}(A)$ qui est l'ensemble Pour toute formule $F$ (au sens du clacul des prédicats et du vocabulaire $\in$, $=$) qui ne pédend pas de $B$ et tout ensemble A, il existe un ensemble $B = \{a\in A | F\}$ qui est tel que $\forall b\in B (b\in A \wedge F)$ -\paragraph{Axiome du choix} -\begin{definition}[Fonction] -qsdf +\begin{definition}[Fonctions] + + \textbf{2-uplet.} + Nous définissons pour tout ensemble $A$ et $B$ le \emph{2-uplet} $(A,B)$ par $\{\{A\},\{A,B\}\}$. + + \textbf{Relation.} + Nous appelons \emph{relation} un ensemble de 2-uplets. + L'\emph{ensemble de définision} d'une relation $R$ est + $\mathcal{D}_R = \{x~|~\exists y~(x,y)\in R\}$. + L'\emph{image} d'une relation est $Img(R) = \{y~|~\exists x~(x,y)\in R\}$. + Une relation symmetrique ($\forall x\forall y~(x,y)\in R \iff (y,x)\in R$), + reflexive ($\forall x~(x,x)\in R$) et + transitive ($\forall x\forall y\forall z~(x,y)\in R\wedge (y,z)\in R\implies (x,z)\in R $) + est appelé une \emph{relation d'équivalance}. + Pour tout $a$, nous notons $[a]_R = \{b~|~(a,b)\in R\}$ la \emph{classes d'équivalance} de $a$. + Nous notons $A/R$ l'ensemble des classes d'équivlance d'une relation $R$ sur un ensemble $A$. + + \textbf{Fonction.} + Une \emph{fonction} $f$ est un relation telle que + \begin{equation} + \forall x\in D_f\left((x,y)\in f\wedge (x,z)\in f\implies y=z\right) + \end{equation} + Pour tout ensemble $E$ et $F$ tels que $D_f\subset E$ et $Img(f)\subset F$ nous notons + \begin{equation} + f: + \left\{ + \begin{matrix} + E\rightarrow F\\ + x\mapsto f(x) + \end{matrix} + \right. + \end{equation} + Où la notation $x\mapsto f(x)$ signifie que $(x,f(x))\in f$. + + \textbf{Produit cartésien.} + Soit $A$ un ensemble $f$ une fonctions + \begin{equation} + \bigtimes_{a\in A}f(a) = + \left\{ + g~|~D_g=A\wedge (\forall a\in A~g(i)\in f(i)) + \right\} + \end{equation} + \end{definition} +\paragraph{Axiome du choix} +Cette axiome nous assure qui si tous les termers du produit cartérise sons non-vides alors le produits cartésien est non-vide. +\begin{equation} + \forall a\in A f(a)\neq\emptyset \implies + \bigtimes_{a\in A}f(a) \neq\emptyset +\end{equation} + \paragraph{Axiome de l'infini} \begin{equation} \exists A\forall a\in A~(\emptyset \in A \wedge a^+\in A) @@ -55,6 +102,8 @@ Où $a^+ = a\cup \{a\}$. Nous appelons un tel $A$, un ensemble récursif. \begin{definition}[Ensemble usuels] + + \textbf{Entiers.} Soit $C$ la classe des ensembles récursif. Soit $A$ un ensemble récursif. Nous appelons $\mathbb{N}$ l'ensemble des entier naturels que nous définissons comme suit : @@ -62,16 +111,129 @@ Nous appelons $\mathbb{N}$ l'ensemble des entier naturels que nous définissons \mathbb{N} = \{n\in A~|~\forall c\in C~n\in c\} \end{equation} $\mathbb{N}$ est bien en ensemble d'après l'axiome Aussonderung. -Cette construction permet de définir les opérations d'addition et de multiplication~\cite{enderton1977elements} ainsi que les autres ensembles usuels qui nous utiliserons dans ce manuscrit. -Ainsi nous définisson $\mathbb{Z} = \{$ : l'ensemble des entiers relatifs l'union de $\mathbb{N}$ et de $-\mathbb{N} = \{$ + Cette construction permet de définir les opérations d'addition ($+$) et de multiplication ($\cdot$)~\cite{enderton1977elements}. -\end{definition} +\textbf{Entiers relatifs.} +La relation +\begin{equation} + R = + \left\{ + ((a,b),(c,d))\in{\mathbb{N}^2}^2~|~ + a+d = b+c + \right\} +\end{equation} +est une relation d'équivalance sur $\mathbb{N}^2$. + Nous définissons alors l'ensemble des \emph{entiers relatifs} $\mathbb{Z}=\mathbb{N}^2/R$. -\paragraph{Axiome de remplacement} +\textbf{Nombres rationels.} +La relation +\begin{equation} + S = + \left\{ + ((a,b),(c,d))\in{\left(\mathbb{Z}\times\mathbb{Z}^*\right)}^2~|~ + a\cdot d = b\cdot c + \right\} +\end{equation} + est une relation d'équivalance sur $\mathbb{Z}\times\mathbb{Z}^*$. + Nous définissons alors l'ensemble des \emph{Nombres rationels} $\mathbb{Q}=\left(\mathbb{Z}\times\mathbb{Z}^*\right)/S$. + +\textbf{Nombres réels} + \begin{definition}[Suite de Cauchy] + Une \emph{suite} $u$ sur un ensemble de $A$ est une fonction de $\mathbb{N}$ dans $A$. On note $u(n) = u_n$ pour tout $n\in\mathbb{N}$. + + Une \emph{suite de Cauchy} $u$ sur $\mathbb{Q}$ est elle que + \begin{equation} + \forall \varepsilon\in\mathbb{Q}~ + \exists N\in\mathbb{N}~ + \forall (a,b) \in \mathbb{N}^2~ + a\geq N\wedge b\geq N \implies + |u_a-u_b|\leq\varepsilon + \end{equation} + + Soit $C$ l'ensemble des suite de Cauchy sur $\mathbb{Q}$. + \end{definition} + +La relation +\begin{equation} + T = + \left\{ + (u,v)\in C^2~|~ + \forall\varepsilon~ + \exists N\in\mathbb{N}~ + \forall (a,b)\in\mathbb{N}^2~ + a\geq N\wedge b\geq N \implies + |u_a-v_b|\leq\varepsilon + \right\} +\end{equation} + est une relation d'équivalance sur $C^2$. + Nous définissons alors l'ensemble des \emph{Nombres réels} $\mathbb{R}=C/T$. + +\end{definition} \paragraph{Axiome de régularitée} +Tout ensemble non-vide a un élément disjoint de cet ensemble. +\paragraph{Axiome de remplacement} +Soit $F(a,b)$ un formule qui ne dépend pas de $B$. +\begin{equation} + \forall A\forall y\forall z + \left( + \forall (x\in A~F(x,y)\wedge F(x,z)\implies x=z)\implies + (\exists B~B=\{y~|~\exists x\in A~F(x,y)\}) + \right) +\end{equation} +\subsubsection{Arithmétique} +Avec un niveau d'abstraction supplémentaire, nous considérons désormais que $\mathbb{N}\subset\mathbb{Z}\subset\mathbb{Q}\subset\mathbb{R}$. +Cela est possible grace aux injéctions canoniques suivantes : +\begin{equation} + \left\{ + \begin{matrix} + \mathbb{N}\rightarrow\mathbb{Z}\\ + n\mapsto (n,0) + \end{matrix} + \right. +\end{equation} +\begin{equation} + \left\{ + \begin{matrix} + \mathbb{Z}\rightarrow\mathbb{Q}\\ + (a,b)\mapsto ((a,b),(1,1)) + \end{matrix} + \right. +\end{equation} +\begin{equation} + \left\{ + \begin{matrix} + \mathbb{Q}\rightarrow\mathbb{R}\\ + (a,b)\mapsto + \left[ + \left\{ + \begin{matrix} + \mathbb{N}\rightarrow \mathbb{Q}\\ + n\mapsto (a,b) + \end{matrix} + \right. + \right]_T + \end{matrix} + \right. +\end{equation} +Nous identifions aussi $\mathbb{R}$ aux réprésentation en base 10 de ses éléments. +Et nous utiliserons les opérations usuelles $+$, $\cdot$, $-$ et $/$ ainsi que la relation d'ordre $<$ sur ces représentation. +En générale il est possible de construire ces opérations sans utiliser la représentation en base 10~\cite{enderton1977elements} mais une telle construction est hors de propos pour ce manuscrit. + +\subsubsection{Cardinal} +La notion de cardinal cherche à comparer la taille d'ensembles arbitraires. +Nous n'allons pas ici considérer la théorie de ordinaux de Van Neumann qui compléte notre simplification. +Le lecteur souhaitant aller plus loin et apprendre cette théorie peut se référer aux chapitres 6,7,8 et 9 de \textit{Elements of set thoery} de Herbert B. Enderton~\cite{enderton1977elements}. +Notre simplification est ce suffit à elle même pour les dévelopement qui nous allons présenter dans ce manuscrit. + +Nous dirons donc que tout ensemble $A$ à un cardinal que nous noterons $\#A$. +Si $A$ est en bijection avec $n\in\mathbb{N}$ alors $\#A = n$. +Nous dirons alors que $A$ est un ensemble fini. +Dans le cas contraite nous dirons que $A$ est infini. +Si $A$ est en bijection avec un sous ensemble de $\mathbb{N}$ nous dirons que $A$ est dénombrable et que sons cardinal est $\#A = \aleph_0$. +Enfin nous dirons que deux ensemble arbitraires ont le même cardinal si et seulement si ils sont en bijection. diff --git a/biblio.bib b/biblio.bib index 0182caf..a46b996 100644 --- a/biblio.bib +++ b/biblio.bib @@ -18,6 +18,26 @@ publisher={Academic press} } +#Mesure +@misc{mesure, + howpublished={\url{https://www-fourier.ujf-grenoble.fr/~edumas/integration.pdf}}, + title={Théorie de la mesure et de l’intégration}, + author={Gallay, Thierry}, + note={Dernier accès: 2024-08-29} +} + +@misc{proba, + title={\url{Intégration, Probabilitées et Processus Aléatoires}}, + howpublished={\url{https://www.imo.universite-paris-saclay.fr/~jean-francois.le-gall/IPPA2.pdf}}, + author={Le Gall, Jean-François}, + note={Dernier accès: 2024-08-29} +} + +#Machine learning + + + + ############################################"" diff --git a/main.pdf b/main.pdf index 035358f..87f07e8 100644 Binary files a/main.pdf and b/main.pdf differ diff --git a/main.tex b/main.tex index 70ab9ed..5caf824 100644 --- a/main.tex +++ b/main.tex @@ -2,7 +2,7 @@ \usepackage[french]{babel} \usepackage{placeins} -\usepackage{graphicx} +\usepackage[draft]{graphicx} \usepackage{amsmath} \usepackage{amsthm} \usepackage{amsfonts} @@ -16,7 +16,7 @@ \usepackage{hyperref} \usepackage{listings} \usepackage{multirow} - +\usepackage{mathabx} \lstset{ basicstyle=\small\ttfamily, columns=flexible, -- cgit v1.2.3 From 0e95544f85b523a95fb05b36c4e6b8789c73abfa Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Wed, 4 Sep 2024 00:12:49 +0200 Subject: traduction classification fini --- background/figure/ml/convex/conv_local.pdf | Bin 0 -> 15273 bytes background/figure/ml/convex/f_local3.1.pdf | Bin 0 -> 17254 bytes background/figure/ml/convex/f_local8.28.pdf | Bin 0 -> 11480 bytes background/figure/ml/roc.pdf | Bin 0 -> 8114 bytes background/figure/ml/roc_perfect.pdf | Bin 0 -> 7096 bytes background/figure/ml/roc_random.pdf | Bin 0 -> 7095 bytes background/figure/opti/conv.pdf | Bin 0 -> 13344 bytes background/figure/opti/f.pdf | Bin 0 -> 8666 bytes background/main.tex | 7 +- background/ml.tex | 193 +++++++++++++++++++- background/opti.tex | 49 +++++ background/proba.tex | 87 +++++---- background/set.tex | 4 + biblio.bib | 101 +++++++++++ classification_finie/finit_classif.tex | 269 ++++++++++++++-------------- classification_finie/main.tex | 69 +------ contexte/avertissement.tex | 7 + contexte/ckoi.tex | 2 +- contexte/figure/bad_ai.png | Bin 0 -> 1679441 bytes contexte/figure/chatgpt/penses.png | Bin 0 -> 42587 bytes contexte/figure/tikz/function.tex | 14 ++ main.pdf | Bin 570192 -> 5115753 bytes main.tex | 8 +- theorem.tex | 1 + tikz_assets/data.tex | 20 +++ tikz_assets/param.tex | 14 ++ 26 files changed, 600 insertions(+), 245 deletions(-) create mode 100644 background/figure/ml/convex/conv_local.pdf create mode 100644 background/figure/ml/convex/f_local3.1.pdf create mode 100644 background/figure/ml/convex/f_local8.28.pdf create mode 100644 background/figure/ml/roc.pdf create mode 100644 background/figure/ml/roc_perfect.pdf create mode 100644 background/figure/ml/roc_random.pdf create mode 100644 background/figure/opti/conv.pdf create mode 100644 background/figure/opti/f.pdf create mode 100644 background/opti.tex create mode 100644 contexte/avertissement.tex create mode 100644 contexte/figure/bad_ai.png create mode 100644 contexte/figure/chatgpt/penses.png create mode 100644 contexte/figure/tikz/function.tex create mode 100644 tikz_assets/data.tex create mode 100644 tikz_assets/param.tex diff --git a/background/figure/ml/convex/conv_local.pdf b/background/figure/ml/convex/conv_local.pdf new file mode 100644 index 0000000..ca1717b Binary files /dev/null and b/background/figure/ml/convex/conv_local.pdf differ diff --git a/background/figure/ml/convex/f_local3.1.pdf b/background/figure/ml/convex/f_local3.1.pdf new file mode 100644 index 0000000..52d5e5c Binary files /dev/null and b/background/figure/ml/convex/f_local3.1.pdf differ diff --git a/background/figure/ml/convex/f_local8.28.pdf b/background/figure/ml/convex/f_local8.28.pdf new file mode 100644 index 0000000..817a7c3 Binary files /dev/null and b/background/figure/ml/convex/f_local8.28.pdf differ diff --git a/background/figure/ml/roc.pdf b/background/figure/ml/roc.pdf new file mode 100644 index 0000000..81888f0 Binary files /dev/null and b/background/figure/ml/roc.pdf differ diff --git a/background/figure/ml/roc_perfect.pdf b/background/figure/ml/roc_perfect.pdf new file mode 100644 index 0000000..9e7d294 Binary files /dev/null and b/background/figure/ml/roc_perfect.pdf differ diff --git a/background/figure/ml/roc_random.pdf b/background/figure/ml/roc_random.pdf new file mode 100644 index 0000000..06957d7 Binary files /dev/null and b/background/figure/ml/roc_random.pdf differ diff --git a/background/figure/opti/conv.pdf b/background/figure/opti/conv.pdf new file mode 100644 index 0000000..0e78124 Binary files /dev/null and b/background/figure/opti/conv.pdf differ diff --git a/background/figure/opti/f.pdf b/background/figure/opti/f.pdf new file mode 100644 index 0000000..489ce5f Binary files /dev/null and b/background/figure/opti/f.pdf differ diff --git a/background/main.tex b/background/main.tex index 9a9f287..76c5a6f 100644 --- a/background/main.tex +++ b/background/main.tex @@ -43,12 +43,7 @@ a & b & a\iff b & a\implies b & a\wedge b & a\vee b & \neg a\\ \subsection{Optimisation} \label{sec:background-opti} - \subsubsection{Multiplicateurs de Lagrange} - - \subsubsection{Descente de gradient} - \paragraph{Descente de gradient stochastique} - - \paragraph{Descente de gradient exponentiée} + \input{background/opti} \section{Apprentissage automatique} \label{sec:background-ml} diff --git a/background/ml.tex b/background/ml.tex index 2482b40..a4c9e1d 100644 --- a/background/ml.tex +++ b/background/ml.tex @@ -1,20 +1,199 @@ +L'aprantissiage automatique\footnote{\textit{Machine learning}} est le fondement de l'IA moderne. + + \subsection{Principe} +Repprenosn la définition de L'IA donnée dans le reglement UE 2024/1689 pour une harmonisation des regulations relatives a l'IA~\cite{aiact} et notamant la Figure~\ref{fig:contexte-IAUE}. +Cette definition exprime bien le fonctionement d'un modèle d'apprantissage automatique. +Le modèle est un fonctione qui prend en entrée une donnée d'entrée et des parametre et qui renvoi un prédiction. +Le vie d'un modèle se passe en deux étape. +Premièrement il faut trouver des paramètres qui assurent un bon fonctionnement du modèle. +En générale le bon fonctionement se défini en disant que le modèle a une bonne utilité et respecte le contraintes qui lui sont demandé. +Ces contraintes peuvent être pour impose l'équité ou la confidentialité par exemple. +Ensuite, le paramètres sont utilisés pour réaliser de prédictions sur des données nouvelle, qui n'ont en générale pas été utilisés pour l'entraînement. +Par exemple pour en revnir à la justice prédictive, les paramètre sont trouvé en utilisant des données historique de tribunaux. +Le modèle est ensuite utilisé sur de nouveaux cas de comdanmé. +Nous allons présenter ces deux aspects entraîenemnt et évaluation dans les Section qui suivent. + \subsection{Entraîner un modèle} - \subsubsection{Fonction de coût} +Les données qui servent à l'entraînement du modèle doivent posséder une étiquette : c'est-à dire le résultat atendu qui est consédéré comme vraie. +Dans la justice prédictive il s'agit de savoir si le coupabe à été récidiviste après avoir été libéré. +Pour prendre un exemple plus scolaire, sur le jeu de donnée Iris~\cite{iris}, on cherche à classifier l'éspèce d'Iris à partir de la longeur et de la largeur des sépales et des pétales. +Nous utilisons, pour l'entraînement, des données de taille de sépale et pétale pour lesquelles nous conaissons l'espèce d'Iris. +En utilisant ces données nous ajustons les paramètres pour que le prédiction soit la plus précise possible. + +Pour ce faire nous utilisons une fonction de coût. +C'est une fonction qui sert à déterminer à quel point une prédiction est bonne. +C'est-à dire que plus la fonction de coût renvoi un valeur petite, meilleur est le modèle. + +Nous definisson le modèle suivant. +\begin{equation*} + f: + \left\{ + \begin{matrix} + E\times\Theta\rightarrow \mathbb{R}^n\\ + x\mapsto f(x,\theta) + \end{matrix} + \right. +\end{equation*} +Alors une fonctions de coût, est une fonction $l$ de $\mathbb{R}^n\times\mathbb{R}^n$ dans $\mathbb{R}^+$. +On se donne l'espace probabilisé $(\Omega,\mathcal{T},P)$. +Soit $\mathcal{V}$ l'ensemble des variables aléatoire de $\Omega$ dans $\mathbb{R}^+$. + +Nous pouvons ainsi définir le coût induit par un choix de paramètres par la fonction +\begin{equation*} + C:\left\{ + \begin{matrix} + \Theta\rightarrow \mathcal{V}\\ + \theta\mapsto + \left\{ + \begin{matrix} + \Omega\rightarrow\mathbb{R}^+\\ + \omega\mapsto + l(f(X(\omega),\theta),Y(\omega)) + \end{matrix} + \right. + \end{matrix} + \right. +\end{equation*} +Ainsi nous avons une fonctionelle $c:\theta\mapsto E(C(\theta))$ en prenant l'espérence de coût. +Nous pouvons donc appliquer un des algorithmes de minimisation vu à la Section~\ref{sec:background-opti-sgd} pour résoudre le probleme suivant : +\begin{equation*} + \text{min}_{\theta\in\Theta}c(\theta) +\end{equation*} +En pratique la quantité $c(\theta)$ est évalué avec la loi des grands nombres~\cite{proba}. + +Très souvent l'algorithme d'optimisation utilisé est la déscente de gradient stochastique (SGD)\footnote{\textit{Stochastic gradient descent}}~\cite{amari1993back}, c'est une vérsion modifié de la descente de gradient adapté au réseaux de neurones qui permet d'accelerer la convergence~\cite{bottou2012stochastic} et d'éviter les minima locaux~\cite{bottou1991stochastic}. +Cette algorithmes évalue l'espérence empirique de $C(\theta)$ sur chaque élément, appelé \textit{mini batch}, d'une partition des données d'entrainement. + \subsection{Evaluer un modèle} Nous appelerons ici évaluation d'un modèle le calcule des metriques qui permettent de juger de son utilité. Ces métrique varient en fonction du type de modèle et du contexte dans lequel il est utilisé. Par exemple il est souhaitable qu'un modèle qui permette de prédir l'absence ou la présence d'une maladie ai un faible taux de faux négatifs. Cela permet d'éviter de penser à tords qu'une patient n'est pas malade ce qui pourrai entraîner un retard dans sa prise en charge. + \subsubsection{Classification} + \label{sec:backgroung-ml-classif} Les modèles de classification visent à attribuer à chaque point des données ébalué une classe parmis un ensemble fini. Par exemple, dans le cadre de la justice prédictive, inférer pour chaque coupable si il sera recidivise ou non~\cite{zhiyuan2020limits}. Quand il y a deux classes, comme dans l'exemple précédent avec \emph{récidivisite} ou \emph{non-récidiviste}, nous dirons que le modèle effectue un classification binaire. - Ce cas est très présent en apprentissage automatique~\cite{} ainsi il existe beaucoup d'outil qui permette d'evaluer ce genre de classifieur. - \paragraph{La courbe ROC} - \paragraph{La courbe de precision/recall} + Ce cas est très présent en apprentissage automatique~\cite{li2020statistical, kumari2017machine} ainsi il existe beaucoup d'outils qui permettent d'evaluer ce genre de classifieur~\cite{canbek2022ptopi}. + + Nous modélisons le modèle que nous souhaite évaluer par une fonction $f:E\rightarrow \{0,1\}$ + C'est-à-dire que le modèle prend une donnée d'entrée dans $E$, cela peut être une image ou une ligne d'un tableau, et lui attribut soit la classe $0$ soit la classe $1$. + Nous dirons que $0$ est un résultat négatif et $1$ un résultat positif. + + Pour évaluer correctement le modèle, nous devons prendre en compte la répartition dé données dans $E$. + Nous modélisons cette repartition par les lois de probabilités de deux variables aléatoires : + \begin{itemize} + \item $X:\Omega\rightarrow \mathcal{X}$ + \item $Y:\Omega\rightarrow \{0,1\}$ + \end{itemize} + $(\Omega,\mathcal{T},P)$ est un espace probabilisé. + Il n'est pas necessaire que nous définission de manière plus précise cet espace car nous ne nous interessons qu'aux mesure images de $X$ et $Y$ par $P$. + Nous pouvons, de la même manière définire une variable aléatoire pour la sortie du modèle : $\hat{Y} = f\circ X$. + + Grace à ces objets, nous allons définir des qunatités qui décrivent l'utilitée du modèle. + La première est + l'\textit{accuracy}, c'est la prababilté que le classifieur prédise la bonne classe. Nous la définissons par $P(\hat{Y}=Y)$. + Cette définission, bien que très intuitive, souffre qu'elle est sensible au désequillibre de classe~\footnote{\textit{Class imablance}}. + Considérons l'exemple suivant : imaginons un modèle depployé en 1982 qui chercheraià prédire si un employé cadre est une femme ou un homme. + Supposons que ce modèle ai une \textit{accuracy} de $79\%$, c'est-à-dire que le modèle prédit justement le genre huit fois sur dix, nous dirons certainement que ce modèle est performant ? + Voici donc un modèle qui atteint cette performance : + \begin{equation} + f: + \left\{ + \begin{matrix} + \mathcal{X}\rightarrow \{\text{homme},\text{femme}\}\\ + x\mapsto \text{homme} + \end{matrix} + \right. + \end{equation} + + C'est-à-dire un modèle qui prédise toujours homme. + Calculons son \textit{accuracy}, pour plus lisibilité nons encodons homme par $0$ et femme par $1$. + Comme le modèle prédit toujours homme, $P(\hat{Y}=0)=1$ et $P(\hat{Y}=1)=0$. + \begin{align} + &P(\hat{Y}=Y)\nonumber\\ + &\text{Par la formule des probabilités totale}\nonumber\\ + =&P(\hat{Y}=0|Y=0)P(Y=0) + P(\hat{Y}=1|Y=1)P(Y=1)\label{eq:background-ml-ac}\\ + =&1\cdot P(Y=0) + 0\cdot P(Y=1) = P(Y=0)\nonumber + \end{align} + + Or, en 1982 il y avait uniquement $21\%$ des cadres qui était des femmes~\cite{insee1982parite}, ansi $P(Y=0)=0,79$ et $P(Y=1)=0,21$. + Nous avons donc bien une accuracy de $79\%$ bien que le modèle n'ai aucune utilité pratique ! + + Ainsi l'accuracy est significative uniquement quand $Y$ suit une loi uniforme. + Nous définisson donc une autre métrique : la \textit{balanced accuracy}. + Pour cela nous repartons de l'Equation~\ref{eq:background-ml-ac} et remplacons $P(Y=0)$ et $P(Y=1)$ par $\frac{1}{2}$. + Ainsi la \textit{balanced accuracy} est la moyenne et $P(\hat{Y}=0|Y=0)$ et de $P(\hat{Y}=1|Y=1)$. + C'est-à-dire que nous regardons pour chaque classes séparément (homme ou femme notre exemple) la probabilité qu'on point soit bien classifié. + Ainsi, en calculant la \textit{balanced accuracy} avec l'exemple précedent nous obtenons $\frac{1+0}{2}=0,5$. + Ce résultat montre bien que le modèle n'a pas d'utilité. + + \paragraph{La courbe \textit{Receiver Operating Characteristic} (ROC)} + Un grand nombre d'algorithme d'apprantissange automatiqeu pour la classification binaire optimise les paramètres d'un e fonctions à valeurs dans $[0,1]$ (ou dans un ensemble un bijection avec $[0,1]$). + C'est le cas par exemple des résaux de neuronnes avec un unique neurones dans la couche finale, de la regression logistique, de la forêt aléatoire, etc. + Nous appelons cette étape intermédiaire dans la classification, logit ou \textit{soft label}. + La classification ce fait grace un seuil sur ce logit. + C'est à dire que si on apelle $g(x)$ le logit de $x$, le modèle de classification peut se décomposer par : $f_\uptau = 1_{[\uptau,1]}\circ g$. + + Ainsi si nous calculons l'\textit{accuracy}, la \textit{balance accuracy} ou tout autre metrique que nous avons présenté précédament elle dépendra du seuil ($\uptau$). + Pour palier cela nous regarons la ROC : une courbe parametrique qui au seuil associe le tau de faux positif (FPR)\footnote{\textit{False positive rate}} et le tau de vrai positif (TPR)\footnote{\textit{True positive rate}}. + Nous definisson ces quantité comme suit : + \begin{itemize} + \item $\text{fpr}(\uptau) = P(f_\uptau\circ X=1\mid Y=0)$ + \item $\text{tpr}(\uptau) = P(f_\uptau\circ X=1\mid Y=1)$ + \end{itemize} + \begin{equation*} + \text{roc}:\left\{ + \begin{matrix} + [0,1]\rightarrow [0,1]\times[0,1]\\ + \uptau\mapsto (\text{fpr}(\uptau),\text{tpr}(\uptau)) + \end{matrix} + \right. + \end{equation*} + + \begin{figure} + \centering + \begin{subfigure}{0.3\linewidth} + \centering + \includegraphics[width=\linewidth]{background/figure/ml/roc.pdf} + \caption{ROC d'une foret aléatoire sur un problème scolaire ($\textit{AUC}\approx 0,8$).} + \end{subfigure} + \begin{subfigure}{0.3\linewidth} + \centering + \includegraphics[width=\linewidth]{background/figure/ml/roc_perfect.pdf} + \caption{ROC parfaite ($\textit{AUC}=1$).} + \end{subfigure} + \begin{subfigure}{0.3\linewidth} + \centering + \includegraphics[width=\linewidth]{background/figure/ml/roc_random.pdf} + \caption{ROC \textit{random guess} ($\textit{AUC}=\frac{1}{2}$).} + \end{subfigure} + \caption{La courbe ROC.} + \label{fig:background-ml-roc} + \end{figure} + + La courbe ROC montre que le seuil permet d'ajusté le compromis entre faux positif et vrai positif, en pratique ce compromis dépend de l'application. + En effet, comme nous le voyons sur la Figure~\ref{fig:background-ml-roc}, si le seuil vaut $\uptau=0$, tous les points sont classifier positivement par le modèlé. + Ainsi le taux de faux positif et maximal et vaux $1$. + Dans le cas totalement opposé de $\uptau=1$ aucun point n'est classifier comme positif et donc il n'y a pas de faux positif mais il n'y a pas non plus de vrai positif. + Il s'agit donc de trouver un équilibre entre ces deux extrèmes. + + Il peut être utile, pour comparer plusieur classifieur de résumer la ROC en une seule valuer. + Pour cela nous utilise l'aire sous la courbe ROC, appele AUC~\footnote{\textit{Area Under the Curve}}. + Comme nous le voyons sur la Figure~\ref{fig:background-ml-roc}, un classifieur qui malgré l'ajustement de son seuil reste un CCA a une AUC de $0,5$. + Alors qu'un classifieur parfat, c'est-à dire pour lequel il exist un seuil qui produite un taux de faux positif nul et un tau de vrai positif égale à 1, a une AUC de $1$. + \subsubsection{Regression} -\subsection{Décentralisation} - \subsubsection{Federated learning} -\subsection{Modèles génératifs} + La régression est un autre type de modèle qui cherche non pas à ranger une donnée dans une classe mais plutot à prédire un grandeur. + Par exemple prédire la masse d'une personne à partir de sa taille. + Nous avons vu dans la section précédente que certain modèle de classification utilise une étape intermédiaire de calcul de logit. + Le calul de logit est une forme de regression car il s'agit de prédit une grandeur et non pas de choisir une classe. + Pour mieux comprendre le lien entre ces deux type de modèle nous pouvons obsever l'exemple de la regression logistique. + + +\subsection{Apprentissage profond} +\subsubsection{Réseau de neurones} +\subsubsection{Modèle generatif} \label{sec:background-generation} diff --git a/background/opti.tex b/background/opti.tex new file mode 100644 index 0000000..9d346d6 --- /dev/null +++ b/background/opti.tex @@ -0,0 +1,49 @@ +L'optimisation est une branche est des mathématiques appliquées qui cherche à trouver les points pour lequels une fonctions réalise un certain nombre d'exigence. +Le lecteur pourra se reférer par exemple au libre de Phillipe G. Ciarlet \textit{Introduction à l'analyse numérique matricielle et à l'optimisation}~\cite{ciarlet} pour une présentation très complète d'un grand nombre de techniques. +Dans ce manuscrit nous ne nous interesseront qu'a deux type de problèmes liées à l'apprantissange automatique et surtout au réseaux de neuronnes. +Le premier de ces problèmes est la minimisation sans contrainte d'une fonctionelle convexe. +Cela permet l'entraînement de modèle d'apprantissage automatique à l'aide d'une fonction de coût. +Le second problème reprend le premier mais y ajoute des contraintes. +C'est à dire, comme minimise-t'on le coût tout en garantissant certaines conditions ? + +\subsubsection{Descente de gradient} +\label{sec:background-opti-sgd} +Nous appellons fonctionelles les fonctions $\mathbb{R}^n$ dans $\mathbb{R}$. +Soit $J$ une fonctionelle convexe, nous cherchons à trouver $x\in\mathbb{R}$ tel que $J(x) = \text{inf}\{J(t)\mid t\in\mathbb{R}\}$. + +\begin{figure} + \centering + \begin{subfigure}{0.45\linewidth} + \centering + \includegraphics[width=0.66\linewidth]{background/figure/opti/f.pdf} + \caption{La suite $u$ approche un minimum locale de la fonction $f$.} + \end{subfigure} + \hspace{1cm} + \begin{subfigure}{0.45\linewidth} + \centering + \includegraphics[width=0.66\linewidth]{background/figure/opti/conv.pdf} + \caption{Convergence des l'écart entre $u$ et le minimum vers $0$ en fonction des itérations.} + \label{fig:background-opti-gd} + \end{subfigure} +\end{figure} + + +\begin{figure} + \begin{subfigure}{0.3\linewidth} + \includegraphics[width=\linewidth]{background/figure/ml/convex/f_local3.1.pdf} + \caption{L'algorithme tombe dans un minimum locale ($u_0=3,1$).} + \end{subfigure} + \begin{subfigure}{0.3\linewidth} + \includegraphics[width=\linewidth]{background/figure/ml/convex/f_local8.28.pdf} + \caption{L'algorithme tombe dans un minimum globale ($u_0=8,28$).} + \end{subfigure} + \begin{subfigure}{0.3\linewidth} + \includegraphics[width=\linewidth]{background/figure/ml/convex/conv_local.pdf} + \caption{Convergence vers un minimum locale et globale.} + \end{subfigure} + \caption{Impacte de la convexité sur la convergence.} + \label{fig:background-opti-cvx} +\end{figure} +\subsubsection{Multiplicateurs de Lagrange} + +\paragraph{Descente de gradient exponentiée} diff --git a/background/proba.tex b/background/proba.tex index 6050ef7..2cb0098 100644 --- a/background/proba.tex +++ b/background/proba.tex @@ -1,46 +1,73 @@ -La théorie des probability est profondément liée au machine learning. +La théorie des probability est profondément liée à l'apprentissage automatique. Les propriétés de modèles comme la confidentialité différencielle, les définitions d'équitée, les métriques d'utilité, etc. que nous aborderons en Section~\ref{sec:background-ml} s'ecrivent en terme de probabilité. Ainsi nous présentons les notions de probabitlié et de théorie d la mesure que nous allons utiliser. -A la manière de la Section~\ref{sec:background-set}, notre présentation à principalement le but de fixer les objets que nous utiliserons dans les prochaines sections et nous pas d'être un cours complet. +A la manière de la Section~\ref{sec:background-set}, notre présentation à principalement le but de fixer les objets que nous utiliserons dans les prochaines sections et non pas d'être un cours complet. Si le lecteur souhaite en apprendre plus sur la theorie de la mesur nous le renvoyons vers les notes de cours de Thierry Gallay de l'université Joseph Fourrier~\cite{mesure}. -Si il souhait explorer plus en avant les probabilités il poura consulter les notes de cour de Jean-François Le Gall de l'Ecole Normale Supérieur de Paris~\cite{proba}. +Si il souhait explorer plus en avant les probabilités il poura consulter les notes de cours de Jean-François Le Gall de l'Ecole Normale Supérieur de Paris~\cite{proba}. Soit $A$ un ensemble. -Nous appelons une tribue que nous notons $\mathcal{A}$ un sous esemble de $\mathcal{P}(A)$ qui contien $\emptyset$ et $A$, qui est stable par complémentaire et qui est stable par union d'un nombre dénombrable d'elements de $\mathcal{A}$. +Nous appelons une tribue que nous notons $\mathcal{A}$ un sous esemble de $\mathcal{P}(A)$ qui contien $\emptyset$ et $A$, qui est stable par complémentaire et qui est stable par union dénombrable d'elements de $\mathcal{A}$. Nous disons que $(A,\mathcal{A})$ est un espace mesurable. +Soit maintenant $A\subset\mathcal{P}(A)$, nous appellons $\sigma(A)$ la plus petite tribue pour l'intersection qui contienne tous les élements de $A$. Nous appelons mesure, une fonction $d$ :$\mathcal{A}$ $\rightarrow$ $[0,+\infty]$ telle que $d(\emptyset) = 0$ et $d\left(\bigcup_{i\in \mathbb{N}} A_i\right) = \sum_{i\in \mathbb{N}}d(A_i)$ pour tout $(A_1, A_2, \cdots) \in \mathcal{A}^\mathbb{N} $ avec $\forall (i,j) A_i\cap A_j = \emptyset$. Nous disons alors que $(A, \mathcal{A}, d)$ est un espace mesuré. +Soit $(A, \mathcal{A}, d)$ et $(B, \mathcal{B}, e)$ deux espaces mesurés. +Nous définissons alors +\begin{equation*} + \mathcal{A}\otimes\mathcal{B} = \sigma\left( + \left\{ + a\times b \mid a\in\mathcal{A}\wedge b\in\mathcal{B} + \right\}\right) +\end{equation*} +et de plus la mesure produit de $d$ et $e$, que l'on note $d\otimes e$, est l'unique mesure telle que +\begin{equation*} + \forall a\in\mathcal{A}\forall b\in\mathcal{B}~d\otimes e(a\times b) = d(a)\cdot e(b) +\end{equation*} +Alors l'espace $(A\times B,\mathcal{A}\otimes\mathcal{B},d\otimes e)$ est un espace mesuré. + Nous appelons fonction mesurable, une fonction de $A$ à $B$ telle que $\forall b\in\mathcal{B}$~$f^{-1}(b)\in\mathcal{A}$. Nous notons alors $f:(A, \mathcal{A})\rightarrow (B, \mathcal{B})$ ou $f:(A, \mathcal{A},d)\rightarrow (B, \mathcal{B})$ +Nous definisson la mesure image de $f$ par $d$, que nous notons $d_f$, par l'expression suivante : +\begin{equation} + d_f: + \left\{ + \begin{matrix} + \mathcal{B}\rightarrow [0,+\infty]\\ + b\mapsto d\left(f^{-1}(b)\right) + + \end{matrix} + \right. +\end{equation} Dans le cas particulier où $d(A) = 1$, nous appelons $d$ une mesure de probabilité. $(A,\mathcal{A},d)$ est alors un espace probailisé et les fonctions mesurables sur cet espace sont appelés variables aléatoires. -Le loi de probabilité d'une variable aléatoire $f$ sur $(X,\mathcal{X})$ est la mesure de probabilite suivante : -$d_X :\mathcal{X}\rightarrow [0,1]$, $x\mapsto d(X^{-1}(x))$. - -Having introduced probability theory, we explicit the relation with the ML theory described previously. -Let $I$ a finite set, $\mathcal{X}$, $\mathcal{S}$ and $\mathcal{Y}$ the sets of features, sensitive attribute and label. -Let $d:I\rightarrow \mathcal{X}\times\mathcal{S}\times\mathcal{Y}$ a dataset. -Let $\#$ be the measure on $(I,\mathcal{P}(I))$ which maps to every $a$ in $\mathcal{P}(I)$ the number of elements of $a$. -Let $P:\mathcal{P}(I)\rightarrow [0,1]$, $a\mapsto \frac{\#(a)}{\#(I)}$. -Then $(I, \mathcal{P}(I), P)$ is a probability space. -On this space we can define the following random variables: -\begin{itemize} - \item $X:I\rightarrow \mathcal{X},~i\mapsto (d(i))_0$ - \item $S:I\rightarrow \mathcal{S},~i\mapsto (d(i))_1$ - \item $Y:I\rightarrow \mathcal{Y},~i\mapsto (d(i))_2$ -\end{itemize} -Where for a vector $u$, $u_j$ refers to the $j$th element of $u$. - -From there we can define various random variables that will be useful in the rest of the paper. -For instance $\hat{Y}=f\circ X$ is random variable that represents the prediction of a trained machine learning model $f$. -We can use it to write the accuracy in a compact way: $P(\hat{Y}=Y)$ by using the well accepted abuse of notations that for a random variable $A$ and an event $a$, -$\{A\in a\} = \{i\in\mathcal{P}(I)~|~A(i)\in a\} = A^{-1}(a)$. -The accuracy is a reliable metric of a trained model's utility when $P(Y=0) = P(Y=1) = \frac{1}{2}$ but not so much when there is unbalance in $Y$. -To take into account an eventual unbalanced distribution of the labels, we will consider the balanced accuracy : -$\frac{P(\hat{Y}=0|Y=0) + P(\hat{Y}=1|Y=1)}{2}$. - -Finally in the context of attribute inference attack at inference time, we define the random variable $\hat{S}=a\circ \hat{Y}$ where here $a$ is a machine learning model trained to infer sensitive attribute from model's output. +Le loi de probabilité d'une variable aléatoire $f$ sur $(X,\mathcal{X})$ est la mesure image de $f$ sur $d$. +Nous dirons que deux variables aléatoire $f$ et $g$ sont indépendantes si et seulement si la loi de la variables aléatoire $h:\omega\mapsto (f(\omega),g(\omega))$ est la mesur produit de la loi de $f$ et $g$. + + +%Having introduced probability theory, we explicit the relation with the ML theory described previously. +%Let $I$ a finite set, $\mathcal{X}$, $\mathcal{S}$ and $\mathcal{Y}$ the sets of features, sensitive attribute and label. +%Let $d:I\rightarrow \mathcal{X}\times\mathcal{S}\times\mathcal{Y}$ a dataset. +%Let $\#$ be the measure on $(I,\mathcal{P}(I))$ which maps to every $a$ in $\mathcal{P}(I)$ the number of elements of $a$. +%Let $P:\mathcal{P}(I)\rightarrow [0,1]$, $a\mapsto \frac{\#(a)}{\#(I)}$. +%Then $(I, \mathcal{P}(I), P)$ is a probability space. +%On this space we can define the following random variables: +%\begin{itemize} +% \item $X:I\rightarrow \mathcal{X},~i\mapsto (d(i))_0$ +% \item $S:I\rightarrow \mathcal{S},~i\mapsto (d(i))_1$ +% \item $Y:I\rightarrow \mathcal{Y},~i\mapsto (d(i))_2$ +%\end{itemize} +%MWhere for a vector $u$, $u_j$ refers to the $j$th element of $u$. + +%From there we can define various random variables that will be useful in the rest of the paper. +%For instance $\hat{Y}=f\circ X$ is random variable that represents the prediction of a trained machine learning model $f$. +%We can use it to write the accuracy in a compact way: $P(\hat{Y}=Y)$ by using the well accepted abuse of notations that for a random variable $A$ and an event $a$, +%$\{A\in a\} = \{i\in\mathcal{P}(I)~|~A(i)\in a\} = A^{-1}(a)$. +%The accuracy is a reliable metric of a trained model's utility when $P(Y=0) = P(Y=1) = \frac{1}{2}$ but not so much when there is unbalance in $Y$. +%To take into account an eventual unbalanced distribution of the labels, we will consider the balanced accuracy : +%$\frac{P(\hat{Y}=0|Y=0) + P(\hat{Y}=1|Y=1)}{2}$. +% +%Finally in the context of attribute inference attack at inference time, we define the random variable $\hat{S}=a\circ \hat{Y}$ where here $a$ is a machine learning model trained to infer sensitive attribute from model's output. diff --git a/background/set.tex b/background/set.tex index 2e660f6..b45e302 100644 --- a/background/set.tex +++ b/background/set.tex @@ -85,6 +85,10 @@ $\forall b\in B (b\in A \wedge F)$ \right\} \end{equation} + Nous dirons qu'une fonction $f:E\rightarrow F$ est injective si et seulement si $\forall (x,y)\in E^2(f(x)=f(y)\implies x=y$). + Nous dirons aussi que $f$ est surjective si et sulement si $\forall y\in F\exists x\in E~f(x)=y$. + Dans le cas où $f$ serait à la fois injective et surjective nous dirons qu'elle est bijective et que les ensembles $E$ et $F$ sont en bijection. + \end{definition} \paragraph{Axiome du choix} diff --git a/biblio.bib b/biblio.bib index a46b996..39d67d8 100644 --- a/biblio.bib +++ b/biblio.bib @@ -33,8 +33,101 @@ note={Dernier accès: 2024-08-29} } +#Optimisation +@BOOK{ciarlet, + title = "Introduction {\`a} l'an{\'a}lyse num{\'e}rique matricielle et + {\`a} l'optimisation: cours et exercices corrig{\'e}s", + author = "Ciarlet, Philippe G", + year = 2006, + language = "fr" +} + + + #Machine learning +@article{bottou1991stochastic, + title={Stochastic gradient learning in neural networks}, + author={Bottou, L{\'e}on and others}, + journal={Proceedings of Neuro-N{\i}mes}, + volume={91}, + number={8}, + pages={12}, + year={1991}, + publisher={Nimes} +} + +@incollection{bottou2012stochastic, + title={Stochastic gradient descent tricks}, + author={Bottou, L{\'e}on}, + booktitle={Neural Networks: Tricks of the Trade: Second Edition}, + pages={421--436}, + year={2012}, + publisher={Springer} +} + +@article{amari1993back, + title={Backpropagation and stochastic gradient descent method}, + author={Amari, Shun-ichi}, + journal={Neurocomputing}, + volume={5}, + number={4-5}, + pages={185--196}, + year={1993}, + publisher={Elsevier} +} + +@article{kumari2017machine, + title={Machine learning: A review on binary classification}, + author={Kumari, Roshan and Srivastava, Saurabh Kr}, + journal={International Journal of Computer Applications}, + volume={160}, + number={7}, + year={2017}, + publisher={Foundation of Computer Science} +} +@article{li2020statistical, + title={Statistical hypothesis testing versus machine learning binary classification: Distinctions and guidelines}, + author={Li, Jingyi Jessica and Tong, Xin}, + journal={Patterns}, + volume={1}, + number={7}, + year={2020}, + publisher={Elsevier} +} +@article{canbek2022ptopi, + title={PToPI: A comprehensive review, analysis, and knowledge representation of binary classification performance measures/metrics}, + author={Canbek, G{\"u}rol and Taskaya Temizel, Tugba and Sagiroglu, Seref}, + journal={SN Computer Science}, + volume={4}, + number={1}, + pages={13}, + year={2022}, + publisher={Springer} +} + +@misc{insee1982parite, + howpublished={\url{https://www.insee.fr/fr/statistiques/4768237}}, + title={Les cadres : de plus en plus de femmes}, + author={Forment, Virginie and Vidalenc, Joëlle}, + note={Dernier accès: 2024-08-26} +} + +@article{chicco2021matthews, + title={The Matthews correlation coefficient (MCC) is more reliable than balanced accuracy, bookmaker informedness, and markedness in two-class confusion matrix evaluation}, + author={Chicco, Davide and T{\"o}tsch, Niklas and Jurman, Giuseppe}, + journal={BioData mining}, + volume={14}, + pages={1--22}, + year={2021}, + publisher={Springer} +} + + + + + + @@ -531,6 +624,14 @@ series = {AIES '18} note={Dernier accès: 2024-08-05} } +@misc{aiact, + howpublished={\url{https://eur-lex.europa.eu/eli/reg/2024/1689/oj}}, + + note={Dernier accès: 2024-09-02}, + title={Regulation (EU) 2024/1689 of the European Parliament and of the Council of 13 June 2024 laying down harmonised rules on artificial intelligence and amending Regulations (EC) No 300/2008, (EU) No 167/2013, (EU) No 168/2013, (EU) 2018/858, (EU) 2018/1139 and (EU) 2019/2144 and Directives 2014/90/EU, (EU) 2016/797 and (EU) 2020/1828 (Artificial Intelligence Act) (Text with EEA relevance)} +} + + ######################################### #Philosophie diff --git a/classification_finie/finit_classif.tex b/classification_finie/finit_classif.tex index 44aa173..f518cdc 100644 --- a/classification_finie/finit_classif.tex +++ b/classification_finie/finit_classif.tex @@ -1,21 +1,21 @@ \subsection{Notations} -\begin{itemize} - \item $(x_0,x_1,\cdots,x_n)\in X_0\times X_1 \times\cdots\times X_n$ - \item If $A$ is a finite set, then $\# A$ denotes the cardinal number of $A$ - \item $f:\left\{\begin{matrix}A&\rightarrow &B\\ a&\mapsto & f(b)\end{matrix}\right.$ - Denotes a function from $A$ to $B$ mapping each element $a$ in $A$ to $f(a)$ in $B$. - \item $f\circ g$ is the composition of $f$ and $g$. - \item $f^{-1}$ can be either the inverse function of $f$ if $f$ is a bijection or its inverse image otherwise. -\end{itemize} +%\begin{itemize} + %\item $(x_0,x_1,\cdots,x_n)\in X_0\times X_1 \times\cdots\times X_n$ + %\item If $A$ is a finite set, then $\# A$ denotes the cardinal number of $A$ + %\item $f:\left\{\begin{matrix}A&\rightarrow &B\\ a&\mapsto & f(b)\end{matrix}\right.$ + % Denotes a function from $A$ to $B$ mapping each element $a$ in $A$ to $f(a)$ in $B$. + %\item $f\circ g$ is the composition of $f$ and $g$. + %\item $f^{-1}$ can be either the inverse function of $f$ if $f$ is a bijection or its inverse image otherwise. +%\end{itemize} \subsection{Problem setup} -We dispose of two finite sets, a feature space $E$ and a classification space $F$. -The cardinal numbers of $E$ and $F$ are respectively $m\in\mathbb{N}^*$ and $n\in\mathbb{N}^*$. -Let $\varphi$ be a bijection from $E$ to $[|0,m-1|]$ and $\psi$ be a bijection from $F$ to $[|0,n-1|]$. -We also dispose of a $o$-tuple $d: [|0,o-1] \rightarrow E\times F$. -In machine learning we would say that $d$ models a dataset. -We build the "dataset of indices" as such : +Nous nous donnons deux ensembles finits, un ensemble $E$ de données d'entrée et un espace d'étiquette $F$. +Nous notons $m=\#E$ et $n=\#F$. +Soit $\varphi$ une bijection de $E$ dans $[|0,m-1|]$ et $psi$ une bijection de $F$ dans $[|0,n-1|]$. +Nous supposons que nous avons un $o$-uplet $d: [|0,o-1] \rightarrow E\times F$. +$d$ modélise une jeu de donnée en pratique comme il est utilisé en apprantissage automatique. +Nous pouvons alors construire un jeu de donnée d'indices : \begin{equation*} d' : \left\{ \begin{matrix} @@ -27,31 +27,33 @@ We build the "dataset of indices" as such : \begin{definition} \label{def:BA} - The balanced accuracy of $f$ on the $o$-tuple $d$ relatively to the set $F$, $BA_F^d(f)$, is a number in $[0,1]$ such that + La \textit{balanced accuracy} empirique de $f$ sur le $o$-uplet $d$ relativements à $F$, que l'on appelle $BA_F^d(f)$, est un nombre dans $[0,1]$ tel que \begin{equation*} BA_F^d(f) = \frac{1}{n} \sum_{y\in F} \frac{ - \#\left\{j\in [|0,o-1|]\quad| f(d_0(j))=d_1(j)\text{ and }d_1(j) = y\right\} + \#\left\{j\in [|0,o-1|]\quad| f(d_0(j))=d_1(j)\wedge d_1(j) = y\right\} } {\#\{j\in [|0,o-1|]\quad| d_1(j)=y\}} \end{equation*} - \end{definition} -\textbf{The problem consists in finding an application $f:E\rightarrow F$ such that the balanced accuracy of $f$ on $d$ is maximal.} +Cette définition est un approximation de la \textit{balanced accuracy} qui nous avons définit plus haut. +\textbf{Le problème consiste à trouver une application $f:E\rightarrow F$ telle que la \textit{balanced accuracy} de $f$ sur $d$ et maximal.} + +\subsection{D'un proclème sur les élément à un problème sur les indices} -\subsection{From a problem on elements to a problem on indices} -We call the set of functions from $E$ to $F$, $B_{E\rightarrow F}$. -To simplify notation, the set of function from $[|0,m-1|]$ to $[|0,n-1|]$ we call it $B_{m\rightarrow n}$. +Nous commencons par noter par $B_{E\rightarrow F}$ l'ensemble des fonctions de $E$ dans $F$. +Pour simplifier un peu les notations, nous appelerons $B_{m\rightarrow n}$ l'ensemble des fnoctins de $[|0,m-1|]$ dans $[|0,n-1|]$. \begin{theorem} \label{th:bij} - Let $E$ and $F$ be two finite sets of cardinal numbers $m$ and $n$. There exists a bijection from $B_{E\rightarrow F}$ to $B_{m\rightarrow n}$. + Soient $E$ et $F$ deux ensemble finis de cardinaux $m$ et $n$. + Il existe une bijection de $B_{E\rightarrow F}$ dans $B_{m\rightarrow n}$. \end{theorem} \begin{proof} - We proceed by expliciting such a bijection. - Let + Nous procédons en explicitant une telle bijection. + Soit \begin{equation} \Phi :\left\{ \begin{matrix} @@ -61,10 +63,10 @@ To simplify notation, the set of function from $[|0,m-1|]$ to $[|0,n-1|]$ we cal \right. \end{equation} - Let's show that $\Phi$ is an injection. - Let $(u,v)\in \left(B_{E\rightarrow F}\right)^2$ such that + Montrons maintenant que $\Phi$ est un bijection. + Soit $(u,v)\in \left(B_{E\rightarrow F}\right)^2$ telle que $\Phi(u) = \Phi(v)$. - Then + Alors \begin{align*} & \psi\circ u\circ\varphi^{-1} = \psi\circ v\circ\varphi^{-1}\\ \Leftrightarrow& \psi^{-1}\circ\psi\circ u\circ\varphi^{-1} = \psi^{-1}\circ\psi\circ v\circ\varphi^{-1}\\ @@ -72,53 +74,57 @@ To simplify notation, the set of function from $[|0,m-1|]$ to $[|0,n-1|]$ we cal \Leftrightarrow&u\circ\varphi^{-1}\circ\varphi = v\circ\varphi^{-1}\circ\varphi\\ \Leftrightarrow&u = v\\ \end{align*} - Hence $\Phi$ is injective. Let's show that $\Phi$ is surjective. - Let $g\in B_{m\rightarrow n}$. - Then + Ainsi $\Phi$ est injective. + + Montrons maintenant que $\Phi$ est surjective. + Soit $g\in B_{m\rightarrow n}$. + Alors $\Phi(\psi^{-1}\circ g\circ\varphi) = \psi\circ\psi^{-1}\circ g\circ\varphi\circ\varphi^{-1} = g$ - Hence $\Phi$ is surjective. - In conclusion $\Phi$ is both injective and surjective: it is a bijection. + Ainsi $\Phi$ est surjective. + + En conclusion $\Phi$ est à la fois injéctive et surjéctive : c'est une bijection. \end{proof} -$\varphi$ and $\psi$ can be seen as indices on $E$ and $F$. -For instance, each element $e$ in $E$ has a unique index $\varphi(e)$. -This abstraction step allows us to build explicit functions from $E$ to $F$ without taking into consideration the type of mathematical object that contains those sets. - Indeed, theorem \ref{th:bij} gives us that for each function mapping indices of $E$ to indices on $F$ we can find a unique function from $E$ to $F$. - And the proof even gives us how to find it: by using $\Phi^{-1}$. +$\varphi$ et $\psi$ peuvent être vus comme des indives sur $E$ et $F$. +Par exemple, chaque élément $e$ dans $E$ a un unqiue index $\varphi(e)$. +Cette étape d'abstraction nous permet de contruire des fonctions explicites de $E$ dans $F$ sans prendre en comptes les spécificités de objets mathématiques dans ses ensembles. +En effet, le théorème~\ref{th:bij} nous donne que pour chaque fonction des indices de $E$ vers les indices de $F$ nous pouvons trouver une unique fonction de de $E$ dans $F$. +Et la preuve étant constructive nous indique que pour trouver cette fonction nous pouvons utiliser $\Phi^{-1}$. - Let's now explore how the balanced accuracy behaves when composing with $\Phi$. + Etudions donc comment se comporte la \textit{balanced accuracy} quand on compose avec $\Phi$. \begin{theorem} \label{th:BAphi=BA} - Let $E$ and $F$ two finite sets. - Let $d$ a tuple of $E\times F$. - We have the following equality + Soit $E$ et $F$ deux ensembles finis. + Soit $d$ un uplet de $E\times F$. + Alors nous avons l'égalitée suivante : \begin{equation*} BA^{d'}_{[|0,\#F-1|]}\circ\Phi = BA^d_F \end{equation*} \end{theorem} \begin{proof} - Let $E$ and $F$ two finite sets. + Soit $E$ et $F$ deux ensemle finis. + Nous avons deux bijections : We have two bijections : - $\varphi$ from E to $[|0,\#E-1|]$ and - $\psi$ from F to $[|0,\#F-1|]$. - With those two functions we build a third bijection - $\Phi$ from $B_{E\rightarrow F}$ to $B_{\#E\rightarrow \#F }$ similarly as in the proof of theorem \ref{th:bij}. - Let $o\in\mathbb{N}^*$ and $d$ a $o$-tuple of $E\times F$. + $\varphi$ de $E$ dans $[|0,\#E-1|]$ et + $\psi$ de $F$ dans $[|0,\#F-1|]$. + Avec ces deux fonctions nous allons contruire une troisième bijections + $\Phi$ de $B_{E\rightarrow F}$ dans $B_{\#E\rightarrow \#F }$ similaire à celle de la preuve du théorème~\ref{th:bij}. + Soient $o\in\mathbb{N}^*$ et $d$ un $o$-uplet de $E\times F$. - Let $f\in B_{E\rightarrow F}$ - then + Soit $f\in B_{E\rightarrow F}$ + alors \begin{equation} \label{eq:BAdp} \left(BA^{d'}_{[|0,\#F-1|]}\circ\Phi\right)(f) = \frac{1}{\#F} \sum_{i=0}^{\#F-1}\frac{ - \#\left\{j\in[|0,o-1|]\quad | \Phi(f)(d'_0(j))=d'_1(j)\text{ and }d'_1(j)=i\right\}} + \#\left\{j\in[|0,o-1|]\quad | \Phi(f)(d'_0(j))=d'_1(j)\wedge d'_1(j)=i\right\}} {\#\left\{j\in[|0,o-1|]\quad | d'_1(j)=i\right\}}\\ \end{equation} - We also remark that + Nous remarquons aussi que \begin{equation*} \Phi(f)\circ d'_0=  \psi\circ f\circ\varphi^{-1}\circ d'_0 = @@ -126,7 +132,7 @@ This abstraction step allows us to build explicit functions from $E$ to $F$ with \psi\circ f\circ d_0 \end{equation*} - Hence, let $j\in[|0,o-1|]$ + Ainsi, soit $j\in[|0,o-1|]$ \begin{align*} &\left(\Phi(f)\circ d'_0\right)(j) = d'_1(j)\\ \Leftrightarrow &\left(\psi\circ f\circ d_0\right)(j)= d'_1(j)\\ @@ -134,7 +140,7 @@ This abstraction step allows us to build explicit functions from $E$ to $F$ with \Leftrightarrow &\left(f\circ d_0\right)(j) = d_1(j)\\ \end{align*} - Which gives us the following assertion: + Ce qui nous donnes les assertions suivantes : \begin{equation} \label{eq:d1j} \forall j\in[|0,o-1|]\quad @@ -145,7 +151,7 @@ This abstraction step allows us to build explicit functions from $E$ to $F$ with \right] \end{equation} - Let's now do the same work of switching from indices to elements on "$d'_1(j) = i$". + De même, passons des indices aux élements sur "$d'_1(j) = i$". Let $i\in[|0,\#F-1|]$ and $j\in[|0,o-1|]$. \begin{align*} &d'_1(j) = i\\ @@ -153,30 +159,30 @@ This abstraction step allows us to build explicit functions from $E$ to $F$ with \Leftrightarrow & d_1(j) = \psi^{-1}(i) \end{align*} - Hence from equations \ref{eq:BAdp} and \ref{eq:d1j} we obtain - - \begin{align*} + Ansin avec les equations \ref{eq:BAdp} et \ref{eq:d1j} nous obtenons + \begin{align} &\left(BA^{d'}_{[|0,\#F-1|]}\circ\Phi\right)(f) = \frac{1}{\#F} \sum_{y=0}^{\#F-1}\frac{ - \#\left\{j\in[|0,o-1|]\quad | f(d_0(j))=d_1(j)\text{ and }d_1(j)=\psi^{-1}(i)\right\}} - {\#\left\{j\in[|0,o-1|]\quad | d_1(j)=\psi^{-1}(i)\right\}}\\ + \#\left\{j\in[|0,o-1|]\quad | f(d_0(j))=d_1(j)\wedge d_1(j)=\psi^{-1}(i)\right\}} + {\#\left\{j\in[|0,o-1|]\quad | d_1(j)=\psi^{-1}(i)\right\}}\\\nonumber &= \frac{1}{\#F} \sum_{y=\psi^{-1}(0),\cdots,\psi^{-1}(\#F-1)}\frac{ - \#\left\{j\in[|0,o-1|]\quad | f(d_0(j))=d_1(j)\text{ and }d_1(j)=y\right\}} - {\#\left\{j\in[|0,o-1|]\quad | d_1(j)=y\right\}}\\ + \#\left\{j\in[|0,o-1|]\quad | f(d_0(j))=d_1(j)\wedge d_1(j)=y\right\}} + {\#\left\{j\in[|0,o-1|]\quad | d_1(j)=y\right\}}\\\nonumber &= \frac{1}{\#F} \sum_{y\in F}\frac{ - \#\left\{j\in[|0,o-1|]\quad | f(d_0(j))=d_1(j)\text{ and }d_1(j)=y\right\}} + \#\left\{j\in[|0,o-1|]\quad | f(d_0(j))=d_1(j)\wedge d_1(j)=y\right\}} {\#\left\{j\in[|0,o-1|]\quad | d_1(j)=y\right\}}\\ - \end{align*} + \label{eq:fini-egaba} + \end{align} - The final quantity in this sequence of equalities is equal to $BA_F^d(f)$ according to definition \ref{def:BA}. + D'après la définition~\ref{def:BA} l'experession~\ref{eq:fini-egaba} est égale à $BA_F^d(f)$ \end{proof} -Using theorem \ref{th:BAphi=BA} we can deduce the following result which will be key to finding $\text{argmax}\left(BA_F^d\right)$. +En utilisant le théorème~\ref{th:BAphi=BA} nous déduisons le corollère suivant qui jouera un rôle clé dans le recherche de la solution à $\text{argmax}\left(BA_F^d\right)$. \begin{corollary} \label{co:argmax} @@ -187,41 +193,41 @@ Using theorem \ref{th:BAphi=BA} we can deduce the following result which will be \end{corollary} \begin{proof} - Let $f' = \text{argmax}\left(BA_{[|0,\#F-1|]}^{d'}\right)$. - Then for all $g$ in $B_{E\rightarrow F}$, + Soit $f' = \text{argmax}\left(BA_{[|0,\#F-1|]}^{d'}\right)$. + Alors, pour tout $g$ dans $B_{E\rightarrow F}$, $BA_F^d(g) = BA_{[|0,\#F-1|]}^{d'}(\Phi(g)) \leq BA_{[|0,\#F-1|]}^{d'}(f') = BA_F^d(\Phi^{-1}(f'))$ \end{proof} -With corollary \ref{co:argmax} we have that, to solve the classification problem on any dataset, it is sufficient to solve on one of the corresponding indices dataset. -The focus of the next section is on finding an algorithm to solve such a problem. +Grâce au corollère~\ref{co:argmax} nous avons que, pour résoudres le problème de classification sur n'importe quel ensemble, il est suffisant de le résoudre sur l'ensemble d'indices correspondant. +L'objetif de la prochaine section est donc la recherche d'un algortihme de résolution d'un tel problème. -\subsection{Building a classification algorithm on $B_{m\rightarrow n}$} -Let $m$, $n$ and $o$ be natural numbers greater than zero. -We take $d$, a $o$-tuple of $[|0,m-1|]\times[|0,n-1|]$. -Since we already know that we are going to work on indices, we don't bother with the general sets $E$ and $F$ from the previous section. -Instead we use $E=\{0,1,\cdots,m-1\}$ and $F=\{0,1,\cdots,n-1\}$. +\subsection{Contruiction d'un algorithme de classification sur $B_{m\rightarrow n}$} -The direct approach to find an algorithm that maximizes $BA_{[|0,n-1|]}^d$ would be to compute the balanced accuracy for every function of $B_{m\rightarrow n}$. -This method works fine for small values of $m$ and $n$ but becomes quickly impossible to compute as those values increase. -Indeed, we know from combinatorics that $B_{m\rightarrow n}$ contains $n^m$ elements. -It results in an algorithm with a number of $\mathcal{O}(on^m)$ operations. -Instead, we propose an algorithm in $\mathcal{O}(onm)$ operations. +Soient $m$, $n$ et $p$ des entiers naturels non-nuls. +Soit aussi $d$, un $o$-uplet de $[|0,m-1|]\times[|0,n-1|]$. +Come nous savons que nous allons travailler sur les indices, nous ne nous préocupons pas d'ensembles quelconqus $E$ et $F$ comme à la section précedente. +A la place nous prenons $E=\{0,1,\cdots,m-1\}$ and $F=\{0,1,\cdots,n-1\}$. -To build it we are going to "distribute" the argmax operator, simplifying the expression of the optimal balanced accuracy. -This distribution requires to find an expression of the balanced accuracy that is context-wise more appropriate. -We express this alternative form of the balanced accuracy in the following lemma. +L'aproche la plus directe pour maximiser $BA_{[|0,n-1|]}^d$ serait l'algorithme qui consiste à essayer de calculer la \textit{balanced accuracy} pour toutes les fonctions de $B_{m\rightarrow n}$. +Cette methode est viable pour des petites valeures de $m$ et $n$ mais devient rapidement impossible à calculer pour des grandes valeures. +En effet, par denombrement nous savons que $B_{m\rightarrow n}$ contiens $n^m$ éléments. +L'algorithme directe à donc une complexite de $\mathcal{O}(on^m)$ operations. +Nous allons construire à la place un algoritheme que garantie de maximiser la \textit{balanced accuracy} en $\mathcal{O}(onm)$ operations. + +Pour le constuire nous allons, d'une certaine manière, distribuer l'opératuer argmax, simplifiant ainsi l'expression de la \textit{balanced accuracy} optimale. +Pour cela, dans le lemme qui suit nous allons reformuler la \textit{balanced accuracy}. \begin{lemma} \label{lem:sumei} - For every $i$ in $[|0,m-1|]$, we introduction the following $n$-tuple: + Pour tout $i$ dans $[|0,m-1|]$, nous definissons le $n$-uplet suivant. \begin{equation*} e_i:\left\{ \begin{matrix} [|0,n-1|]&\longrightarrow&\mathbb{N}\\ l&\mapsto& \frac{ - \#\{j\in[|0,o-1|]\quad| d_0(j)=i\text{ and }d_1(j)=l\} + \#\{j\in[|0,o-1|]\quad| d_0(j)=i\wedge d_1(j)=l\} }{ \#\{j\in[|0,o-1|]\quad| d_1(j)=l\} }\\ @@ -229,7 +235,7 @@ We express this alternative form of the balanced accuracy in the following lemma \right. \end{equation*} - Then we can write the balanced accuracy as: + Nous pouvons alors écrir la \textit{balanced accuracy} de la manière suivant : \begin{equation*} BA_{[|0,n-1|]}^d(h) = \frac{1}{n} \sum_{i=0}^{m-1} e_i(h(i)) @@ -237,17 +243,17 @@ We express this alternative form of the balanced accuracy in the following lemma Where $h\in B_{m\rightarrow n}$. \end{lemma} \begin{proof} - Let $l\in[|0,n-1|]$ and $h$, a function in $B_{m\rightarrow n}$. + Soit $l\in[|0,n-1|]$ et $h$, une fonction dans $B_{m\rightarrow n}$. \begin{align*} & \frac{ - \#\{j\in[|0,o-1|]\quad| h(d_0(j))=d_1(j)\text{ and }d_1(j)=l\} + \#\{j\in[|0,o-1|]\quad| h(d_0(j))=d_1(j)\wedge d_1(j)=l\} }{ \#\{j\in[|0,o-1|]\quad| d_1(j)=l\} }\\ =& \frac{ - \#\{j\in[|0,o-1|]\quad| h(d_0(j))=l\text{ and }d_1(j)=l\} + \#\{j\in[|0,o-1|]\quad| h(d_0(j))=l\wedge d_1(j)=l\} }{ \#\{j\in[|0,o-1|]\quad| d_1(j)=l\} } @@ -255,7 +261,7 @@ We express this alternative form of the balanced accuracy in the following lemma \begin{align*} =& \frac{ - \#\{j\in[|0,o-1|]\quad| h(d_0(j))=l\text{ and }d_1(j)=h(d_0(j))\} + \#\{j\in[|0,o-1|]\quad| h(d_0(j))=l\wedge d_1(j)=h(d_0(j))\} }{ \#\{j\in[|0,o-1|]\quad| d_1(j)=l\} } @@ -270,17 +276,18 @@ We express this alternative form of the balanced accuracy in the following lemma } \end{align} - In the previous expression, $l$ refers to an element of the label set $F$. - To prove the result we substitute in equation \ref{eq:sansi} $h(d_0(j))$ by an expression containing $i$: an element of $E$. - The end goal is to exhibit the quantity of interest $e_{i,j}$. - We first remark that for all $j$ in $[|0,o-1|]$ + Dans l'expression précédente, $l$ est un élément de l'ensemble des indeices $F$. + Pour montrer le résultat, on remplace $h(d_0(j))$~\ref{eq:sansi} par une expression qui contient $i$ : un élément de $E$. + Le but de faire aparaitre la quantité qui nous intersse : $e_{i,j}$. + + Nous commencons par remarquer que pour tout $j$ dans $[|0,o-1|]$ \begin{equation*} h(d_0(j))=l \Leftrightarrow d_0(j)\in h^{-1}(\{l\}) \Leftrightarrow \exists i\in h^{-1}(\{l\}), d_0(j)=i \end{equation*} - Which means that + Ce qui signifie que \begin{align*} &\left\{ j\in[|0,o-1|]\quad| h(d_0(j)) = l @@ -294,7 +301,7 @@ We express this alternative form of the balanced accuracy in the following lemma \right\} \end{align*} - Hence, by substitution of $\{j\in[|0,o-1|]\quad| h(d_0(j)) = l\}$ en equation \ref{eq:sansi}, we obtain + Aninsi, par substitution de $\{j\in[|0,o-1|]\quad| h(d_0(j)) = l\}$ dans l'équation \ref{eq:sansi}, nous obtenons \begin{align*} &\frac{ \#\left( @@ -314,7 +321,7 @@ We express this alternative form of the balanced accuracy in the following lemma \bigcup_{i\in h^{-1}(\{l\})} \left\{ j\in[|0,o-1|]\quad| d_0(j)=i - \text{ and } + \wedge d_1(j)=h(d_0(j)) \right\} \right) @@ -325,7 +332,7 @@ We express this alternative form of the balanced accuracy in the following lemma \frac{ \#\left\{ j\in[|0,o-1|]\quad| d_0(j)=i - \text{ and } + \wedge d_1(j)=h(i) \right\} }{ @@ -338,17 +345,17 @@ We express this alternative form of the balanced accuracy in the following lemma e_i(h(i)) \end{align} - Then, according to definition \ref{def:BA} + Ensuite, d'après la définition~\ref{def:BA} \begin{equation*} BA_{[|0,n-1|]}^d(h) = \frac{1}{n} \sum_{l=0}^{n-1} \frac{ - \#\left\{j\in [|0,o-1|]\quad| h(d_0(j))=d_1(j)\text{ and }d_1(j) = l\right\} + \#\left\{j\in [|0,o-1|]\quad| h(d_0(j))=d_1(j)\wedge d_1(j) = l\right\} } {\#\{j\in [|0,o-1|]\quad| d_1(j)=l\}} \end{equation*} - We substitute the general term of this sum by the result obtained in equation \ref{eq:sumei}: + Par substitution du terme générale de cette somme par le résultat obtenu dans l'équation~\ref{eq:sumei} : \begin{align*} &BA_{[|0,n-1|]}^d(h)\\ =&\frac{1}{n} @@ -359,82 +366,82 @@ We express this alternative form of the balanced accuracy in the following lemma \sum_{i=0}^{m-1} e_i(h(i))\sum_{l=0}^{n-1}1_{h^{-1}(\{l\})}(i)\\ \end{align*} - Since $1_{h^{-1}(\{l\})}(i) = 1$ if and only if $l=h(i)$, + Comme $1_{h^{-1}(\{l\})}(i) = 1$ si et seulement si $l=h(i)$, nous avons $\sum_{l=0}^{n-1}1_{h^{-1}(\{l\})}(i) = 1$. - - Hence we have the expected result. + Ce qui donne le résultat attendu. \end{proof} -This lemma allows us to shift the computing of the argmax from all possible functions of $B_{m\rightarrow n}$ to the entries of the matrix $M = \left(e_i(l)\right)_{i\in[|0,m-1|],l\in[|0,m-1|]}$. -More precisely, we find the maximum of each row of $M$ resulting in parcouring once every element of $M$. -We formalise this idea in the following theorem. +Ce lemme nous permet de calculer l'argmax souhaité en calculant le entrée de la matrice $M = \left(e_i(l)\right)_{i\in[|0,m-1|],l\in[|0,m-1|]}$ +au lieu de calcule la \textit{balanced accuracy} de toutes le fonctions de $B_{m\rightarrow n}$. +Nous cherchons donc le maximum de chaque ligne de $M$ ce qui fait que nous n'avons qu'a parcourir une fois chaque élément de $M$. +Nous formalisons cette idée dans le théorème suivant : \begin{theorem} - Let $e_i$ be the following $n$-tuples of $\mathbb{N}$: + Soit $e_i$ le $n$-uplet de $\mathbb{N}$ suivant : \begin{equation*} e_i:\left\{ \begin{matrix} [|0,n-1|]&\longrightarrow&\mathbb{N}\\ l&\mapsto& \frac{ - \#\{j\in[|0,o-1|]\quad| d_0(j)=i\text{ and }d_1(j)=l\} + \#\{j\in[|0,o-1|]\quad| d_0(j)=i\wedge d_1(j)=l\} }{ \#\{j\in[|0,o-1|]\quad| d_1(j)=l\} }\\ \end{matrix} \right. \end{equation*} - Let $f\in B_{m\rightarrow n}$ such that for all $i$ in $[|0,m-1|]$ + Soit $f\in B_{m\rightarrow n}$ telle que pour tout $i$ dans $[|0,m-1|]$ \begin{equation*} f(i) = \text{argmax}\left(e_i\right) \end{equation*} - Then + Alors \begin{equation*} f = \text{argmax}\left(BA_{[|0,n-1|]}^d\right) \end{equation*} \end{theorem} \begin{proof} - Let $g\in B_{m\rightarrow n}$. - We are going to show that $BA_{[|0,n-1|]}^d(g)\leq BA_{[|0,n-1|]}^d(f)$. - We start by saying that - for all $i\in[|0,n-1|]$, $0\leq e_i(g(i))\leq e_i(f(i))$. - Which gives us that + Soit $g\in B_{m\rightarrow n}$. + Nous allons montrer que $BA_{[|0,n-1|]}^d(g)\leq BA_{[|0,n-1|]}^d(f)$. + Nous commencons par dire que + pour tout $i\in[|0,n-1|]$, $0\leq e_i(g(i))\leq e_i(f(i))$. + Ce qui donne que \begin{equation*} \sum_{i=0}^{m-1}e_i(g(i)) \leq \sum_{i=0}^{m-1}e_i(f(i)) \end{equation*} - and hence + et donc \begin{equation*} \frac{1}{n}\sum_{i=0}^{m-1}e_i(g(i)) \leq \frac{1}{n}\sum_{i=0}^{m-1}e_i(f(i)) \end{equation*} - And finally, according to lemma \ref{lem:sumei} we have the result. + Enfin, en appliquant le lemme~\ref{lem:sumei} nous avons le résultat attedu. \end{proof} -According to this result, we can write the following algorithm in $\mathcal{O}(onm)$ to solve our optimisation problem. +En utiliant ce résulat, nous pouvons maintenant écrir l'algorithm suivant en $\mathcal{O}(onm)$ pour résoudre notre problème d'optimisation. \begin{algorithm} - \caption{Optimisation: finding $\text{argmax}\left(BA^d_{[|0,n-1|]}\right)$} + \caption{Optimisation: recherche de l'$\text{argmax}\left(BA^d_{[|0,n-1|]}\right)$} \label{algo:argmax} \begin{algorithmic} \For{$i\gets 0,\cdots,m-1$} \For{$l\gets 0,\cdots,n-1$} \State $e_{i,l}\gets \frac{ - \#\{j\in[|0,o-1|]\quad | d_0(j)=i\text{ and }d_1(j)=l\} + \#\{j\in[|0,o-1|]\quad | d_0(j)=i\wedge d_1(j)=l\} }{ \#\{j\in[|0,o-1|]\quad | d_1(j)=l\} }$ \footnotesize - \Comment{Compute $e_i(l)$} + \Comment{Calcul de $e_i(l)$} \normalsize \EndFor \EndFor \For{$i\gets 0,\cdots,n-1$} \State $f(i)\gets\text{argmax}_l(e_{i,l})$ \footnotesize - \Comment{Value of $l$ that maximizes $e_{i,l}$} + \Comment{Valeur de $l$ que maximise $e_{i,l}$} \normalsize \EndFor \State \Return $f$ @@ -443,16 +450,16 @@ According to this result, we can write the following algorithm in $\mathcal{O}(o \FloatBarrier \subsection{Extention to unseen data} -Alogrithm \ref{algo:argmax} is an efficient algorithm to find a classifier the maximizes balanced accuracy on the set of indices. -From the result $f$ of this alogrithm we find a classifier that solves the problem of maximizing the balanced accuracy on element by applying the inversse of $\Phi$. -Hence $\Phi^{-1}(f)$ is solution. -Computing it requires $\mathcal{O}(on)$ operations resulting in an overall complexity of $\mathcal{O}(onm)$. +%Alogrithm \ref{algo:argmax} is an efficient algorithm to find a classifier the maximizes balanced accuracy on the set of indices. +%From the result $f$ of this alogrithm we find a classifier that solves the problem of maximizing the balanced accuracy on element by applying the inversse of $\Phi$. +%Hence $\Phi^{-1}(f)$ is solution. +%Computing it requires $\mathcal{O}(on)$ operations resulting in an overall complexity of $\mathcal{O}(onm)$. -This classifier algorithm is limited to finite feature space but there are cases where we can find workaround to still use it. -For instance, by using clusturing prior to our method we can reduce to a finit feature space. -Also, if $(E, O)$ is a sub-topology we can match any element of the englobing set to its nearest counterpart in $E$. -We did that on LAW and COMPAS dataset and compare our approach to a random forest. +%This classifier algorithm is limited to finite feature space but there are cases where we can find workaround to still use it. +%For instance, by using clusturing prior to our method we can reduce to a finit feature space. +%Also, if $(E, O)$ is a sub-topology we can match any element of the englobing set to its nearest counterpart in $E$. +%We did that on LAW and COMPAS dataset and compare our approach to a random forest. -The main takeaway from figures \ref{fig:ba} and \ref{fig:time} is that our finite classifier alogirthm outperforms state of the art in terms of balanced accuracy and is way faster at achieving this result. +%The main takeaway from figures \ref{fig:ba} and \ref{fig:time} is that our finite classifier alogirthm outperforms state of the art in terms of balanced accuracy and is way faster at achieving this result. diff --git a/classification_finie/main.tex b/classification_finie/main.tex index 2f40530..91fdd27 100644 --- a/classification_finie/main.tex +++ b/classification_finie/main.tex @@ -1,67 +1,2 @@ -\documentclass{article} - -\usepackage{graphicx} -\usepackage{amsmath} -\usepackage{amsthm} -\usepackage{amsfonts} -\usepackage{algpseudocode} -\usepackage{algorithm} -\usepackage{placeins} -\usepackage{subcaption} -\usepackage{graphicx} -\usepackage{setspace} - -\newtheorem{definition}{Definition} -\newtheorem{theorem}{Theorem} -\newtheorem{lemma}{Lemma} -\newtheorem{corollary}{Corollary}[theorem] - -\doublespace - -\begin{document} -\begin{abstract} - The abstract -\end{abstract} -\tableofcontents -\newpage -\section{Introduction} -\input{introduction} - -\section{Finit classification} -\input{finit_classif} - -\section{Applications} -\input{utility} - \subsection{Attribute inference attack} - \subsection{Painting classification} - \subsection{Lora} - \subsection{Tabular data} - \input{tabular} - \subsection{Movie recommender system} - \subsection{labeled faces in the wild} - - -\section{Computing cost} - \subsection{Cost of training} - \subsection{Cost of inference} - -\section{Decentralization} - \subsection{Sharing indexes} - \subsection{Sharing matrix of probability law} - -\section{Privacy} - \subsection{Private indexing} - \subsection{Differential privacy} - -\section{Fairness} - \subsection{Preprocessing} - \subsection{Inprocessing and postprocessing} - -\section{Explainability} - \subsection{Transparancy} - \subsection{Interpretability} - \subsection{Explainability} - -\section{Conclusion} - -\end{document} +\input{classification_finie/ba} +\input{classification_finie/finit_classif} diff --git a/contexte/avertissement.tex b/contexte/avertissement.tex new file mode 100644 index 0000000..1c5d88f --- /dev/null +++ b/contexte/avertissement.tex @@ -0,0 +1,7 @@ +Ce manuscrit aborde des notions de discirimination notament de genre, d'origine et de couleur de peau. +En France, les statistiques éthnique sont intérdites~\cite{} ce qui n'est pas le cas aux USA. +Les résultats de statistiques descriptives, nottament sur les crimes comis en fonction de la couleur de peau, sont à mettre en parallèle avec un grand nombre de facteurs socio-économiques~\cite{} +Ainsi, ils ne doivent pas être interprété comme indiquant une différence de comportement social entre sous groupes ethniques. + +De plus, la Seciont~\ref{sec:contexte-phi} invite le lecteur à des expériences de pensées qui peuvent être angoissantes pour certaines personnes~\cite{}. +Nous invitons donc le lecteur à ne pas s'attarder sur cette section si il ne se juge pas émotionelement prêt. diff --git a/contexte/ckoi.tex b/contexte/ckoi.tex index 6663a5e..0dce14d 100644 --- a/contexte/ckoi.tex +++ b/contexte/ckoi.tex @@ -145,7 +145,7 @@ Ainsi, l'expression intelligence artificielle est trompeuse car bien que ces pro C'est pourquoit la définition de légale d'IA est si éloignée de ces considération. L'Union Européene a établie le règlement (UE) 2024/1689 du parlement européen et du conseil du 13 juin 2024 -établissant des règles harmonisées concernant l’intelligence artificielle. +établissant des règles harmonisées concernant l’intelligence artificielle~\cite{aiact}. Nous reviendrons plus en détail dessus dans la Section~\ref{sec:contexte-legal}. Pour le moment, regardons l'article 3: il s'agit d'une liste de définitions concernant l'IA. Nous y trouvons la définition de (UE 2024/1689 3§1) : \textquote{système IA}. diff --git a/contexte/figure/bad_ai.png b/contexte/figure/bad_ai.png new file mode 100644 index 0000000..5b2968e Binary files /dev/null and b/contexte/figure/bad_ai.png differ diff --git a/contexte/figure/chatgpt/penses.png b/contexte/figure/chatgpt/penses.png new file mode 100644 index 0000000..134665e Binary files /dev/null and b/contexte/figure/chatgpt/penses.png differ diff --git a/contexte/figure/tikz/function.tex b/contexte/figure/tikz/function.tex new file mode 100644 index 0000000..93d2a58 --- /dev/null +++ b/contexte/figure/tikz/function.tex @@ -0,0 +1,14 @@ +\begin{tikzpicture} + \node[rectangle,draw] (ia) at (0,0) {IA}; + \node (ent) at (-2,0) {Entrée}; + \node (sor) at (2,0) {Sorties}; + \node (par) at (0,-1) {Paramètres}; + + \draw[->] (ent) to (ia); + \draw[->] (ia) to (sor); + \draw[->] (par) to (ia); + + \node[align=left] (par) at (4,0) {Prédiction\\Décision\\Contenu}; + \draw [decorate,decoration = {brace}] (3,-0.6) -- (3,0.6); + +\end{tikzpicture} diff --git a/main.pdf b/main.pdf index 87f07e8..91df77e 100644 Binary files a/main.pdf and b/main.pdf differ diff --git a/main.tex b/main.tex index 5caf824..b2db1ca 100644 --- a/main.tex +++ b/main.tex @@ -2,7 +2,9 @@ \usepackage[french]{babel} \usepackage{placeins} -\usepackage[draft]{graphicx} +%\usepackage[draft]{graphicx} +\usepackage{graphicx} +\usepackage{upgreek} \usepackage{amsmath} \usepackage{amsthm} \usepackage{amsfonts} @@ -45,7 +47,7 @@ breaklines=true \textbf{Jan Aalmoes} \large - Sous la "supervison" de \\ + Sous la supervison de \\ Antoine Boutet et Mathieu Cunche \vfill @@ -80,7 +82,7 @@ breaklines=true \chapter{Classification finie} \label{sec:fini} - \input{classification_finie/finit_classif} + \input{classification_finie/main} \chapter{Attaque d'inférence d'attribut sensible} diff --git a/theorem.tex b/theorem.tex index 0518a88..1021fc1 100644 --- a/theorem.tex +++ b/theorem.tex @@ -1,5 +1,6 @@ \newtheorem{definition}{Définition}[chapter] \newtheorem{theorem}{Théoreme}[chapter] +\newtheorem{propriete}{Propriété}[chapter] \newtheorem{lemma}[theorem]{Lemme} \newtheorem{corollary}{Corollère}[theorem] diff --git a/tikz_assets/data.tex b/tikz_assets/data.tex new file mode 100644 index 0000000..663b59c --- /dev/null +++ b/tikz_assets/data.tex @@ -0,0 +1,20 @@ +\makeatletter +\tikzset{ + database/.style={ + path picture={ + \draw (0, 1.5*\database@segmentheight) circle [x radius=\database@radius,y radius=\database@aspectratio*\database@radius]; + \draw (-\database@radius, 0.5*\database@segmentheight) arc [start angle=180,end angle=360,x radius=\database@radius, y radius=\database@aspectratio*\database@radius]; + \draw (-\database@radius,-0.5*\database@segmentheight) arc [start angle=180,end angle=360,x radius=\database@radius, y radius=\database@aspectratio*\database@radius]; + \draw (-\database@radius,1.5*\database@segmentheight) -- ++(0,-3*\database@segmentheight) arc [start angle=180,end angle=360,x radius=\database@radius, y radius=\database@aspectratio*\database@radius] -- ++(0,3*\database@segmentheight); + }, + minimum width=2*\database@radius + \pgflinewidth, + minimum height=3*\database@segmentheight + 2*\database@aspectratio*\database@radius + \pgflinewidth, + }, + database segment height/.store in=\database@segmentheight, + database radius/.store in=\database@radius, + database aspect ratio/.store in=\database@aspectratio, + database segment height=0.1cm, + database radius=0.25cm, + database aspect ratio=0.35, +} +\makeatother diff --git a/tikz_assets/param.tex b/tikz_assets/param.tex new file mode 100644 index 0000000..17df939 --- /dev/null +++ b/tikz_assets/param.tex @@ -0,0 +1,14 @@ +\makeatletter +\tikzset{ + param/.style={ + path picture={ + \fill[color=blue] (0,0) circle[radius=5pt]; + \fill[color=blue] (1,0) circle[radius=5pt]; + \fill[color=blue] (0,1) circle[radius=5pt]; + \fill[color=blue] (0.5,0) circle[radius=5pt]; + \fill[color=blue] (0,0.5) circle[radius=5pt]; + \fill[color=blue] (0.5,0.5) circle[radius=5pt]; + }, + }, +} +\makeatother -- cgit v1.2.3 From 294b3293c6710a63b96195ec9785412aa175c245 Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Wed, 4 Sep 2024 23:20:36 +0200 Subject: ML background presque finit, ne manque plus que la partie generatif --- background/ml.tex | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ biblio.bib | 22 ++++++++++ main.pdf | Bin 5115753 -> 640855 bytes main.tex | 5 ++- 4 files changed, 153 insertions(+), 2 deletions(-) diff --git a/background/ml.tex b/background/ml.tex index a4c9e1d..d1c08a3 100644 --- a/background/ml.tex +++ b/background/ml.tex @@ -15,6 +15,7 @@ Le modèle est ensuite utilisé sur de nouveaux cas de comdanmé. Nous allons présenter ces deux aspects entraîenemnt et évaluation dans les Section qui suivent. \subsection{Entraîner un modèle} +\label{sec:background-ml-train} Les données qui servent à l'entraînement du modèle doivent posséder une étiquette : c'est-à dire le résultat atendu qui est consédéré comme vraie. Dans la justice prédictive il s'agit de savoir si le coupabe à été récidiviste après avoir été libéré. Pour prendre un exemple plus scolaire, sur le jeu de donnée Iris~\cite{iris}, on cherche à classifier l'éspèce d'Iris à partir de la longeur et de la largeur des sépales et des pétales. @@ -191,9 +192,136 @@ Cette algorithmes évalue l'espérence empirique de $C(\theta)$ sur chaque élé Nous avons vu dans la section précédente que certain modèle de classification utilise une étape intermédiaire de calcul de logit. Le calul de logit est une forme de regression car il s'agit de prédit une grandeur et non pas de choisir une classe. Pour mieux comprendre le lien entre ces deux type de modèle nous pouvons obsever l'exemple de la regression logistique. + \begin{figure} + \centering + \begin{subfigure}{0.3\linewidth} + \centering + \includegraphics[width=\linewidth]{background/figure/ml/logit/logit0.3.pdf} + \caption{$\uptau=0,3$} + \end{subfigure} + \begin{subfigure}{0.3\linewidth} + \centering + \includegraphics[width=\linewidth]{background/figure/ml/logit/logit0.5.pdf} + \caption{$\uptau=0,5$} + \end{subfigure} + \begin{subfigure}{0.3\linewidth} + \centering + \includegraphics[width=\linewidth]{background/figure/ml/logit/logit0.7.pdf} + \caption{$\uptau=0,7$} + \end{subfigure} + \begin{subfigure}{0.6\linewidth} + \centering + \includegraphics[width=\linewidth]{background/figure/ml/logit/metric.pdf} + \caption{Metriques de classifications en fonction du seuil.} + \label{subfig:background-ml-logit-d} + \end{subfigure} + \caption{Exemple de relation entre regression (logit) et prédiction.} + \label{fig:background-ml-logit} + \end{figure} + + Dans la Figure~\ref{fig:background-ml-logit} nous avons l'exemple d'une regression logistique qui nous donne la coubre logit dans les trois premières sous-figures. + Le seuil est représente par le changement de couleur tandis que les étiquettes sont réprésenté par la position sur l'axe de ordonée des points. + Nous observons que changer la seuil permet d'influencer sur les différentes métriques que nous avons présenté en Section~\ref{sec:backgroung-ml-classif}. + Le choix d'un seuil approrié est donc dépendant de l'application. + Comme nous pouvons de le voir sur la Sous-figure~\ref{subfig:background-ml-logit-d}, seuil proche de $1$ permet de grandement réduire le FPR mais réduit les autres métriques. + Le choix d'un seuil est aussi particulièrement important quand les données présentent un désequilibre, c'est-à-dire qu'une classe et majoritaire par rapport à une autre~\cite{zou2016finding}. + Dans la Figure~\ref{fig:background-ml-logit} il y $28\%$ de points positif représenté en rouge. + Cela explique la différence entre \textit{accuracy} et \textit{balanced accuracy} à seuil égale. \subsection{Apprentissage profond} +Pour le moment nous avons évoqué trois types de modèle, la forêt aléatoire, la regression logistique et les réseaux de neuronnes sans vraiment les présenter. +Nous allons nous contenter de présenter en détail les réseaux de neuronnes car cela nous sera utile pour les Chapitres~\ref{sec:aia} et~\ref{sec:synth}. + \subsubsection{Réseau de neurones} +En apprentissage profond, l'expréssion explicite qui lie entrée, paramètre et sortie (que nous avons appelé $f(x,\theta)$ à la Section~\ref{sec:background-ml-train}) est appelé l'architecture du réseau de nerones. +Dans cette section nous allons présenter quelques architectures calssiques. +Pour en savoir plus à ce sujet et sur l'apprentissage automatiqeu en générale, nottamant pour avoir plus de détails sur l'entraînement, nous renvoyons le lecteur au livre de Yann Le Cun, \textit{Quand la machine apprend}~\cite{lecun2019quand}. + +Un réseau de neuronnes est composé de plusieur couches successives qui on chacune des paramètre. +En d'autre termes un modèle +\begin{equation*} + f:\left\{ + \begin{matrix} + E\times \Theta\rightarrow \mathbb{R}^n\\ + (x,\theta)\mapsto f(x,\theta) + \end{matrix} + \right. +\end{equation*} +peut se décomposer comme une composition de modèle intermédiaires. +Par exemple un modèle à $m$ couches peut s'ecrir : +\begin{equation*} + f(\Box,\theta) = f_{m-1}(\Box,\theta_{m-1})\circ\cdots\circ + f_{0}(\Box,\theta_0) +\end{equation*} +Nous utiliserons deux types de couches : les couches entièrement connectée et les couches de convolution. + +Une couche entièrement connectée est elle même composé d'une multiplication matriciele, une addition à un vecteur et une fonctions d'activation. +Considérons une couche intermédiare de $\mathbb{R}^o$ dans $\mathbb{R}^p$ +Nous diraons que cette couche a $p$ neurones. +Nous utiliserons toujours la même fonction d'avivation : \textit{Rectified Linear} (ReLu). +Cette fonction est définie de la manière suivante : +\begin{equation*} + \textit{ReLu}:\left\{ + \begin{matrix} + \mathbb{R}^n\rightarrow\left(\mathbb{R}^+\right)^n\\ + x\mapsto \left( + \begin{matrix} + 1_{\mathbb{R}^+}(x_0)x_0\\ + \vdots\\ + 1_{\mathbb{R}^+}(x_{n-1})x_{n-1}\\ + \end{matrix} + \right) + \end{matrix} + \right. +\end{equation*} +Nous remarquons que cette fonction n'as pas de paramètre à opitmiser, son but et d'éviter que l'architecture gloable soit une fonction afine. + +La parite linéaire de la couche est paramétré par les coéficient de la matrie de l'application linéaire. +Cette fonction $l$ admet donc comme expression $l(x)=Mx$ avec $M\in\mathcal{M}_{p,o}$ + +Enfin la partie additive est appellée biais et s'écrit $B(x) = x+b$ avec $b\in\mathbb{R}^p$. +Ainsi la $i$-ième couche s'écrit : +\begin{equation*} + f_i(\Box,(M,b)) : \left\{ + \begin{matrix} + \mathbb{R}^o\rightarrow\mathbb{R}^p\\ + x\mapsto\text{ReLu}(Mx+b) + \end{matrix} + \right. +\end{equation*} + +Regardon maintenant les couches de convolutions. +L'idée de la convolution est d'extraire des représentations\footnote{\textit{Features extraction}}. + +\begin{equation} + f_i(x,\theta_i) = \left\{ + \begin{matrix} + \mathbb{N}^\mathbb{}\rightarrow\mathbb{N}^\mathbb{N}\\ + u\mapsto\int_{\mathbb{N}}x(u\bowtie t)\theta(\#J\bowtie t)d\sum_{j\in\mathbb{N}}\delta_j(t) + \end{matrix} + \right. +\end{equation} + + + + \subsubsection{Modèle generatif} \label{sec:background-generation} + +A generator is a function that takes as input a real dataset and outputs a synthetic dataset. +This definition is general enough so that the identity function is a generator. +Even though synthetic datasets are supposedly different than real world datasets. +We refer to the output of the identity generator as real data while referring to the output of another generator as synthetic data. + +In addition to the identity generator we use General Adversarial Networks (GAN)~\cite{gan}. +The goal of a GAN is to generate realistic samples given a distribution of multivariate data. +To do so a GAN leverages two neural networks: a generator and a discriminator. +The domain of the generator (its input space) is of low dimension with respect to its codomain (its output space) which has the same dimension as the data we want to generate. +For instance with 64 by 64 images, the codomain is a matrix with 64 rows and 64 columns. +To generate a new sample, we evaluate the generator on a sample of a multivariate standard normal distribution where the dimension is the domain's dimension. +This output is the new generated synthetic data point. + +The discriminator is only used when training the GAN with the goal of making sure that the generator produces realistic data. +To do so, the discriminator is a neural network with a classification goal: infer if a sample is synthetic or real. +Hence in the training procedure, the discriminator and the generator are in competition: the generator goal is to fool the discriminator into classifying synthetic data as real data. diff --git a/biblio.bib b/biblio.bib index 39d67d8..de43eb6 100644 --- a/biblio.bib +++ b/biblio.bib @@ -46,6 +46,28 @@ #Machine learning +@BOOK{lecun2019quand, + title = "Quand la machine apprend", + author = "Le Cun, Yann", + publisher = "Odile Jacob", + month = oct, + year = 2019, + address = "Paris, France", + language = "fr" +} + + +@article{zou2016finding, + title={Finding the best classification threshold in imbalanced classification}, + author={Zou, Quan and Xie, Sifa and Lin, Ziyu and Wu, Meihong and Ju, Ying}, + journal={Big Data Research}, + volume={5}, + pages={2--8}, + year={2016}, + publisher={Elsevier} +} + + @article{bottou1991stochastic, title={Stochastic gradient learning in neural networks}, author={Bottou, L{\'e}on and others}, diff --git a/main.pdf b/main.pdf index 91df77e..eb83a0b 100644 Binary files a/main.pdf and b/main.pdf differ diff --git a/main.tex b/main.tex index b2db1ca..46c5c0d 100644 --- a/main.tex +++ b/main.tex @@ -2,8 +2,8 @@ \usepackage[french]{babel} \usepackage{placeins} -%\usepackage[draft]{graphicx} -\usepackage{graphicx} +\usepackage[draft]{graphicx} +%\usepackage{graphicx} \usepackage{upgreek} \usepackage{amsmath} \usepackage{amsthm} @@ -95,6 +95,7 @@ breaklines=true \chapter{Données synthétiques} +\label{sec:synth} \input{synthetic/main} \bibliographystyle{plain} -- cgit v1.2.3 From 03556b31409ac5e8b81283d3a6481691c11846d7 Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Wed, 4 Sep 2024 23:56:27 +0200 Subject: background gan --- background/ml.tex | 32 ++--- biblio.bib | 390 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 406 insertions(+), 16 deletions(-) diff --git a/background/ml.tex b/background/ml.tex index d1c08a3..d1f95b0 100644 --- a/background/ml.tex +++ b/background/ml.tex @@ -309,19 +309,19 @@ L'idée de la convolution est d'extraire des représentations\footnote{\textit{F \subsubsection{Modèle generatif} \label{sec:background-generation} -A generator is a function that takes as input a real dataset and outputs a synthetic dataset. -This definition is general enough so that the identity function is a generator. -Even though synthetic datasets are supposedly different than real world datasets. -We refer to the output of the identity generator as real data while referring to the output of another generator as synthetic data. - -In addition to the identity generator we use General Adversarial Networks (GAN)~\cite{gan}. -The goal of a GAN is to generate realistic samples given a distribution of multivariate data. -To do so a GAN leverages two neural networks: a generator and a discriminator. -The domain of the generator (its input space) is of low dimension with respect to its codomain (its output space) which has the same dimension as the data we want to generate. -For instance with 64 by 64 images, the codomain is a matrix with 64 rows and 64 columns. -To generate a new sample, we evaluate the generator on a sample of a multivariate standard normal distribution where the dimension is the domain's dimension. -This output is the new generated synthetic data point. - -The discriminator is only used when training the GAN with the goal of making sure that the generator produces realistic data. -To do so, the discriminator is a neural network with a classification goal: infer if a sample is synthetic or real. -Hence in the training procedure, the discriminator and the generator are in competition: the generator goal is to fool the discriminator into classifying synthetic data as real data. +Une generateur est un fonction qui prend un entrée en jeu de données réel et renvoi un jeu de donnée sythetique. +Cette définition est suffisament générale pour que l'identitée soit un générateur. +Nous dirons que la sortie du generateur identité sont des données réels et nous appellerons donnée synthetique la sortie de n'importe quel autre générateur. + +En plus du générateur identitée nous utiliserons des réseaux de neuronnes adversariels generatifs~\footnote{\textit{Genertaiv Adversarial Network}} (GAN)~\cite{gan}. +Le but d'un GAN est de générer des échantillons réalisation étant donné une loi de probabilité. +Pour arriver à cela, un GAN utilise deux réseaux de neuronnes : un générateur et un discriminateur. +Le domaine du générateur est de petit dimension relativement à son codomaine. +La dimension du codomaine est la même que celle des données que l'on souhaite générer. +Par exemple pour générer de images de taille 64 par 64, le codomaine est $\mathbb{R}_{64,64}$. +Pour générer une donnée, nous évaluons le générateur sur un point generer à partir d'une loi normale multidimensionelle. +La sortie de générateur est la nouvelle donnée généré. + +Le discriminateur est utilisé uniquement lors de l'entraînement du GAN et à a pour but de s'assurer que le générateur produise des données réalistes. +Pour cela, le discriminateur est un réseau de neurones ayant une tâche de classification : inférer si une donnée est synthétique et réel. +Ainsi, dans la procédure d'entraînement, le discriminateur et el générateur sont en compétition : le but du générateur est de tromper le discriminateur à classifier une donnée synthétique comme réel. diff --git a/biblio.bib b/biblio.bib index de43eb6..fc03fdc 100644 --- a/biblio.bib +++ b/biblio.bib @@ -946,3 +946,393 @@ abstract = {This paper explores the use of metaphorical personification (anthrop year={2021} } + +############################################### +#Synthetic +@misc{carlini2022membershipinferenceattacksprinciples, + title={Membership Inference Attacks From First Principles}, + author={Nicholas Carlini and Steve Chien and Milad Nasr and Shuang Song and Andreas Terzis and Florian Tramer}, + year={2022}, + eprint={2112.03570}, + archivePrefix={arXiv}, + primaryClass={cs.CR}, + url={https://arxiv.org/abs/2112.03570}, +} + +@article{brayne2015predictive, + title={Predictive policing}, + author={Brayne, Sarah and Rosenblat, Alex and Boyd, Danah}, + journal={Data \& Civil Rights: A New Era Of Policing And Justice}, + pages={2015--1027}, + year={2015} +} + +@inproceedings{barthelemy:hal-01837361, + TITLE = {{Pl@ntNet, une plate-forme innovante d'agr{\'e}gation et partage d'observations botaniques}}, + AUTHOR = {Barth{\'e}l{\'e}my, Daniel and Boujemaa, Nozha and Molino, Jean-Fran{\c c}ois and Joly, Alexis and Go{\"e}au, Herv{\'e} and Baki{\'c}, Vera and Selmi, Souheil and Champ, Julien and Carre, Jennifer and Chouet, Mathias and Perronnet, Aur{\'e}lien and Vignau, Christelle and Dufour-Kowalski, Samuel and Affouard, Antoine and Barbe, Julien and Bonnet, Pierre}, + URL = {https://hal.science/hal-01837361}, + BOOKTITLE = {{International Conference ‘Botanists of the Twenty-first Century'}}, + ADDRESS = {Paris, France}, + ORGANIZATION = {{UNESCO}}, + HAL_LOCAL_REFERENCE = {DEVMP}, + EDITOR = {No{\"e}line R. Rakotoarisoa and Stephen Blackmore and Bernard Riera}, + PAGES = {191-197}, + YEAR = {2014}, + MONTH = Sep, + KEYWORDS = {Pl@ntNet ; Botany ; Plateforme participative ; Observations botaniques}, + PDF = {https://hal.science/hal-01837361/file/DB_etal_plantnet_plateforme_2016_1.pdf}, + HAL_ID = {hal-01837361}, + HAL_VERSION = {v1}, +} + +@misc{plantnet, + title={Pl@ntNet}, + howpublished={\url{https://identify.plantnet.org/}}, + note={Dernier accès: 2024-07-24} +} + + +@article{dunn2018wearables, + title={Wearables and the medical revolution}, + author={Dunn, Jessilyn and Runge, Ryan and Snyder, Michael}, + journal={Personalized medicine}, + volume={15}, + number={5}, + pages={429--448}, + year={2018}, + publisher={Taylor \& Francis} +} + +@misc{gtrend, + title={Google trend Intelligence Artificielle}, + howpublished={\url{https://trends.google.com/trends/explore?date=all&geo=FR&q=intelligence%20artificielle&hl=en-US}}, + note={Dernier accès: 2024-07-24} +} + +@misc{france2030, + title={France 2030}, + howpublished={\url{https://www.info.gouv.fr/grand-dossier/france-2030}}, + note={Dernier accès: 2024-07-24} +} + +@misc{stratfr, + title={La stratégie nationale pour l'intelligence artificielle}, + howpublished={\url{https://www.entreprises.gouv.fr/fr/numerique/enjeux/la-strategie-nationale-pour-l-ia}}, + note={Dernier accès: 2024-07-24} +} + +@misc{applewatch, + title={WatchOS 11 brings powerful health and fitness insights, and even more personalization and connectivity }, + howpublished={\url{https://www.apple.com/newsroom/2024/06/watchos-11-brings-powerful-health-and-fitness-insights/}}, + note={Dernier accès: 2024-07-24} +} + +%%%%%%%%%%%CLIMATE CHANGE BACKGROUND +@article{barnes2019viewing, + title={Viewing forced climate patterns through an AI lens}, + author={Barnes, Elizabeth A and Hurrell, James W and Ebert-Uphoff, Imme and Anderson, Chuck and Anderson, David}, + journal={Geophysical Research Letters}, + volume={46}, + number={22}, + pages={13389--13398}, + year={2019}, + publisher={Wiley Online Library} +} + +@article{slater2023hybrid, + title={Hybrid forecasting: blending climate predictions with AI models}, + author={Slater, Louise J and Arnal, Louise and Boucher, Marie-Am{\'e}lie and Chang, Annie Y-Y and Moulds, Simon and Murphy, Conor and Nearing, Grey and Shalev, Guy and Shen, Chaopeng and Speight, Linda and others}, + journal={Hydrology and earth system sciences}, + volume={27}, + number={9}, + pages={1865--1889}, + year={2023}, + publisher={Copernicus Publications G{\"o}ttingen, Germany} +} + +%%%%%%%%%%%%ENERGY BACKGROUND +@article{jin2020energy, + title={Energy and AI}, + author={Jin, Donghan and Ocone, Raffaella and Jiao, Kui and Xuan, Jin}, + journal={Energy and AI}, + volume={1}, + pages={100002}, + year={2020}, + publisher={Elsevier} +} + +@article{kumar2020distributed, + title={Distributed energy resources and the application of AI, IoT, and blockchain in smart grids}, + author={Kumar, Nallapaneni Manoj and Chand, Aneesh A and Malvoni, Maria and Prasad, Kushal A and Mamun, Kabir A and Islam, FR and Chopra, Shauhrat S}, + journal={Energies}, + volume={13}, + number={21}, + pages={5739}, + year={2020}, + publisher={MDPI} +} + +@article{kumari2020blockchain, + title={Blockchain and AI amalgamation for energy cloud management: Challenges, solutions, and future directions}, + author={Kumari, Aparna and Gupta, Rajesh and Tanwar, Sudeep and Kumar, Neeraj}, + journal={Journal of Parallel and Distributed Computing}, + volume={143}, + pages={148--166}, + year={2020}, + publisher={Elsevier} +} + +@article{ngarambe2020use, + title={The use of artificial intelligence (AI) methods in the prediction of thermal comfort in buildings: Energy implications of AI-based thermal comfort controls}, + author={Ngarambe, Jack and Yun, Geun Young and Santamouris, Mat}, + journal={Energy and Buildings}, + volume={211}, + pages={109807}, + year={2020}, + publisher={Elsevier} +} + + +%%%%%OPEN AI + +@misc{openaibfm, + title={OpenAI, cette société qui révolutionne l'intelligence artificielle}, + howpublished={\url{https://www.bfmtv.com/tech/intelligence-artificielle/open-ai-cette-societe-qui-revolutionne-l-intelligence-artificielle_DN-202311200564.html}}, + note={Dernier accès: 2024-07-24} +} + +@misc{openaiinter, + title={Intelligence artificielle : pourquoi Sam Altman, créateur de ChatGPT, a été débarqué d'OpenAI}, + howpublished={\url{https://www.radiofrance.fr/franceinter/ce-que-l-on-sait-du-renvoi-de-sam-altman-patron-d-openai-et-createur-de-chatgpt-5672369}}, + note={Dernier accès: 2024-07-24} +} + +@misc{openaint, + title={OpenAI Says It Has Begun Training a New Flagship A.I. Model}, + howpublished={\url{https://www.nytimes.com/2024/05/28/technology/openai-gpt4-new-model.html}}, + note={Dernier accès: 2024-07-24} +} + +@misc{openaibg, + title={ChatGPT sets record for fastest-growing user base - analyst note}, + howpublished={\url{https://www.reuters.com/technology/chatgpt-sets-record-fastest-growing-user-base-analyst-note-2023-02-01/}}, + note={Dernier accès: 2024-07-24} +} + +@misc{gptjournal, + title={ChatGPT : le quotidien Le Monde signe un partenariat avec OpenAI, une première en France}, + howpublished={\url{https://www.radiofrance.fr/franceinter/podcasts/l-info-de-france-inter/les-doc-france-inter-du-jeudi-14-mars-3-7619379}}, + note={Dernier accès: 2024-07-24} +} + +@article{beraja2023ai, + title={AI-tocracy}, + author={Beraja, Martin and Kao, Andrew and Yang, David Y and Yuchtman, Noam}, + journal={The Quarterly Journal of Economics}, + volume={138}, + number={3}, + pages={1349--1402}, + year={2023}, + publisher={Oxford University Press} +} + + + + + +@misc{song2020overlearning, + title={Overlearning Reveals Sensitive Attributes}, + author={Congzheng Song and Vitaly Shmatikov}, + year={2020}, + eprint={1905.11742}, + archivePrefix={arXiv}, + primaryClass={cs.LG} +} + +@article{EO, + author = {Moritz Hardt and + Eric Price and + Nathan Srebro}, + title = {Equality of Opportunity in Supervised Learning}, + journal = {CoRR}, + volume = {abs/1610.02413}, + year = {2016}, + url = {http://arxiv.org/abs/1610.02413}, + eprinttype = {arXiv}, + eprint = {1610.02413}, + timestamp = {Tue, 26 Apr 2022 09:17:17 +0200}, + biburl = {https://dblp.org/rec/journals/corr/HardtPS16.bib}, + bibsource = {dblp computer science bibliography, https://dblp.org} +} + +@article{hawkins2004problem, + title={The problem of overfitting}, + author={Hawkins, Douglas M}, + journal={Journal of chemical information and computer sciences}, + volume={44}, + number={1}, + pages={1--12}, + year={2004}, + publisher={ACS Publications} +} + +@misc{yeom, + title={Privacy Risk in Machine Learning: Analyzing the Connection to Overfitting}, + author={Samuel Yeom and Irene Giacomelli and Matt Fredrikson and Somesh Jha}, + year={2018}, + eprint={1709.01604}, + archivePrefix={arXiv}, + primaryClass={cs.CR} +} + +@misc{vgg16, + title={Very Deep Convolutional Networks for Large-Scale Image Recognition}, + author={Karen Simonyan and Andrew Zisserman}, + year={2015}, + eprint={1409.1556}, + archivePrefix={arXiv}, + primaryClass={cs.CV}, + url={https://arxiv.org/abs/1409.1556}, +} +@misc{CGAN, + title={Conditional Generative Adversarial Nets}, + author={Mehdi Mirza and Simon Osindero}, + year={2014}, + eprint={1411.1784}, + archivePrefix={arXiv}, + primaryClass={cs.LG}, + url={https://arxiv.org/abs/1411.1784}, +} +@ARTICLE{cnn, + + author={Rawat, Waseem and Wang, Zenghui}, + + journal={Neural Computation}, + + title={Deep Convolutional Neural Networks for Image Classification: A Comprehensive Review}, + + year={2017}, + + volume={29}, + + number={9}, + + pages={2352-2449}, + + keywords={}, + + doi={10.1162/neco_a_00990}} + +@misc{dcgan, + title={Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks}, + author={Alec Radford and Luke Metz and Soumith Chintala}, + year={2016}, + eprint={1511.06434}, + archivePrefix={arXiv}, + primaryClass={cs.LG}, + url={https://arxiv.org/abs/1511.06434} +} +@inproceedings{gan, +author = {Goodfellow, Ian J. and Pouget-Abadie, Jean and Mirza, Mehdi and Xu, Bing and Warde-Farley, David and Ozair, Sherjil and Courville, Aaron and Bengio, Yoshua}, +title = {Generative adversarial nets}, +year = {2014}, +publisher = {MIT Press}, +address = {Cambridge, MA, USA}, +booktitle = {Proceedings of the 27th International Conference on Neural Information Processing Systems - Volume 2}, +pages = {2672–2680}, +numpages = {9}, +location = {Montreal, Canada}, +series = {NIPS'14} +} +@misc{ctgan, + title={Modeling Tabular data using Conditional GAN}, + author={Lei Xu and Maria Skoularidou and Alfredo Cuesta-Infante and Kalyan Veeramachaneni}, + year={2019}, + eprint={1907.00503}, + archivePrefix={arXiv}, + primaryClass={cs.LG}, + url={https://arxiv.org/abs/1907.00503}, +} +@article{bellovin2019privacy, + title={Privacy and synthetic datasets}, + author={Bellovin, Steven M and Dutta, Preetam K and Reitinger, Nathan}, + journal={Stan. Tech. L. Rev.}, + volume={22}, + pages={1}, + year={2019}, + publisher={HeinOnline} +} + +@inproceedings{ping2017datasynthesizer, + title={Datasynthesizer: Privacy-preserving synthetic datasets}, + author={Ping, Haoyue and Stoyanovich, Julia and Howe, Bill}, + booktitle={Proceedings of the 29th International Conference on Scientific and Statistical Database Management}, + pages={1--5}, + year={2017} +} + +@inproceedings{kuppa2021towards, + title={Towards improving privacy of synthetic datasets}, + author={Kuppa, Aditya and Aouad, Lamine and Le-Khac, Nhien-An}, + booktitle={Annual Privacy Forum}, + pages={106--119}, + year={2021}, + organization={Springer} +} + +@article{tai2023user, + title={User-Driven Synthetic Dataset Generation with Quantifiable Differential Privacy}, + author={Tai, Bo-Chen and Tsou, Yao-Tung and Li, Szu-Chuang and Huang, Yennun and Tsai, Pei-Yuan and Tsai, Yu-Cheng}, + journal={IEEE Transactions on Services Computing}, + year={2023}, + publisher={IEEE} +} +@article{stadler2020synthetic, + title={Synthetic data-A privacy mirage}, + author={Stadler, Theresa and Oprisanu, Bristena and Troncoso, Carmela}, + journal={arXiv preprint arXiv:2011.07018}, + year={2020}, + publisher={Nov} +} + +@inproceedings{jordon2021hide, + title={Hide-and-seek privacy challenge: Synthetic data generation vs. patient re-identification}, + author={Jordon, James and Jarrett, Daniel and Saveliev, Evgeny and Yoon, Jinsung and Elbers, Paul and Thoral, Patrick and Ercole, Ari and Zhang, Cheng and Belgrave, Danielle and van der Schaar, Mihaela}, + booktitle={NeurIPS 2020 Competition and Demonstration Track}, + pages={206--215}, + year={2021}, + organization={PMLR} +} + +@inproceedings{abadi2016deep, + title={Deep learning with differential privacy}, + author={Abadi, Martin and Chu, Andy and Goodfellow, Ian and McMahan, H Brendan and Mironov, Ilya and Talwar, Kunal and Zhang, Li}, + booktitle={Proceedings of the 2016 ACM SIGSAC conference on computer and communications security}, + pages={308--318}, + year={2016} +} + +@inproceedings{shokri2017membership, + title={Membership inference attacks against machine learning models}, + author={Shokri, Reza and Stronati, Marco and Song, Congzheng and Shmatikov, Vitaly}, + booktitle={2017 IEEE symposium on security and privacy (SP)}, + pages={3--18}, + year={2017}, + organization={IEEE} +} + +@article{ding2021retiring, + title={Retiring Adult: New Datasets for Fair Machine Learning}, + author={Ding, Frances and Hardt, Moritz and Miller, John and Schmidt, Ludwig}, + journal={Advances in Neural Information Processing Systems}, + volume={34}, + year={2021} +} + +@inproceedings{zhifei2017cvpr, + title={Age Progression/Regression by Conditional Adversarial Autoencoder}, + author={Zhang, Zhifei and Song, Yang and Qi, Hairong}, + booktitle={IEEE Conference on Computer Vision and Pattern Recognition (CVPR)}, + year={2017}, + organization={IEEE} +} -- cgit v1.2.3 From bf5b05a84e877391fddd1b0a0b752f71ec05e901 Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Wed, 11 Sep 2024 00:10:50 +0200 Subject: Preuve existe f pas cca equivalant exists f BA pas randomguess --- ED.tex | 215 + INSA.png | Bin 0 -> 64064 bytes aia/classif.tex | 96 + aia/main.tex | 17 + avertissement.tex | 7 + background/figure/ml/logit/logit0.1.pdf | Bin 0 -> 16646 bytes background/figure/ml/logit/logit0.2.pdf | Bin 0 -> 16649 bytes background/figure/ml/logit/logit0.3.pdf | Bin 0 -> 16676 bytes .../figure/ml/logit/logit0.30000000000000004.pdf | Bin 0 -> 16617 bytes background/figure/ml/logit/logit0.4.pdf | Bin 0 -> 16623 bytes background/figure/ml/logit/logit0.5.pdf | Bin 0 -> 16646 bytes background/figure/ml/logit/logit0.6.pdf | Bin 0 -> 16637 bytes background/figure/ml/logit/logit0.7.pdf | Bin 0 -> 16687 bytes .../figure/ml/logit/logit0.7000000000000001.pdf | Bin 0 -> 16635 bytes background/figure/ml/logit/logit0.8.pdf | Bin 0 -> 16643 bytes background/figure/ml/logit/logit0.9.pdf | Bin 0 -> 17263 bytes background/figure/ml/logit/metric.pdf | Bin 0 -> 11081 bytes classification_finie/ba.tex | 372 ++ classification_finie/finit_classif.tex | 1 + conclusion.tex | 1 + folio.tex | 57 + garde.tex | 68 + macros.tex | 4 + main.pdf | Bin 640855 -> 675350 bytes main.tex | 6 +- partenaire.png | Bin 0 -> 4610 bytes remerciements.tex | 24 + synthetic/IEEEtran.cls | 6347 ++++++++++++++++++++ ... synthetic data_ assessing risk propagation.zip | Bin 0 -> 2177677 bytes synthetic/background.tex | 53 + synthetic/bck/IEEEtran.cls | 6347 ++++++++++++++++++++ synthetic/bck/background.tex | 53 + synthetic/bck/biblio.bib | 196 + synthetic/bck/compile.sh | 5 + synthetic/bck/conclusion.tex | 1 + synthetic/bck/figure/method/overfit/aia.pdf | Bin 0 -> 11911 bytes synthetic/bck/figure/method/overfit/mia.pdf | Bin 0 -> 11375 bytes synthetic/bck/figure/method/overfit/quality.pdf | Bin 0 -> 12512 bytes synthetic/bck/figure/method/overfit/utility.pdf | Bin 0 -> 10990 bytes synthetic/bck/figure/result/adult/aia.pdf | Bin 0 -> 12846 bytes synthetic/bck/figure/result/adult/mia.pdf | Bin 0 -> 12278 bytes synthetic/bck/figure/result/adult/utility.pdf | Bin 0 -> 12679 bytes synthetic/bck/figure/tikz/data.tex | 20 + synthetic/bck/figure/tikz/data_flow/step1.tex | 30 + synthetic/bck/figure/tikz/data_flow/step2.tex | 16 + synthetic/bck/figure/tikz/data_flow/step3.tex | 23 + synthetic/bck/figure/tikz/data_split/bck | 73 + synthetic/bck/figure/tikz/data_split/split.tex | 65 + synthetic/bck/figure/tikz/ovre.tex | 13 + synthetic/bck/figure/x.log | 33 + synthetic/bck/introduction.tex | 9 + synthetic/bck/list_of_conf_journals | 1 + synthetic/bck/main.aux | 89 + synthetic/bck/main.bbl | 98 + synthetic/bck/main.blg | 48 + synthetic/bck/main.log | 827 +++ synthetic/bck/main.pdf | Bin 0 -> 216102 bytes synthetic/bck/main.tex | 18 + synthetic/bck/main.toc | 31 + synthetic/bck/methodology.tex | 188 + synthetic/bck/pdfcompress.sh | 1 + synthetic/bck/related.tex | 38 + synthetic/bck/results.tex | 53 + .../Conference-LaTeX-template_10-17-19/.DS_Store | Bin 0 -> 6148 bytes .../IEEEtran.cls | 6347 ++++++++++++++++++++ .../IEEEtran_HOWTO.pdf | Bin 0 -> 671626 bytes .../conference_101719.pdf | Bin 0 -> 125971 bytes .../conference_101719.tex | 288 + .../Conference-LaTeX-template_10-17-19/fig1.png | Bin 0 -> 4535 bytes .../conference-latex-template_10-17-19.zip | Bin 0 -> 764784 bytes synthetic/biblio.bib | 387 ++ synthetic/compile.sh | 5 + synthetic/conclusion.tex | 6 + synthetic/figure/image1.png | Bin 0 -> 46514 bytes synthetic/figure/image2.png | Bin 0 -> 76846 bytes synthetic/figure/method/overfit/aia.pdf | Bin 0 -> 11911 bytes synthetic/figure/method/overfit/mia.pdf | Bin 0 -> 11375 bytes synthetic/figure/method/overfit/quality.pdf | Bin 0 -> 12512 bytes synthetic/figure/method/overfit/utility.pdf | Bin 0 -> 10990 bytes synthetic/figure/result/adult/aia.pdf | Bin 0 -> 12925 bytes synthetic/figure/result/adult/mia.pdf | Bin 0 -> 13186 bytes synthetic/figure/result/adult/utility.pdf | Bin 0 -> 13142 bytes synthetic/figure/tikz/data.tex | 20 + synthetic/figure/tikz/data_flow/step1.tex | 30 + synthetic/figure/tikz/data_flow/step2.tex | 16 + synthetic/figure/tikz/data_flow/step3.tex | 23 + synthetic/figure/tikz/data_split/bck | 73 + synthetic/figure/tikz/data_split/split.tex | 65 + synthetic/figure/tikz/ovre.tex | 13 + synthetic/introduction.tex | 34 + synthetic/list_of_conf_journals | 1 + synthetic/main.log | 27 + synthetic/main.pdf | Bin 0 -> 383317 bytes synthetic/main.tex | 19 + synthetic/methodology.tex | 143 + synthetic/pdfcompress.sh | 1 + synthetic/problem.tex | 13 + synthetic/related.tex | 38 + synthetic/results.tex | 54 + .../IEEEtran.cls | 6347 ++++++++++++++++++++ .../IEEEtran_HOWTO.pdf | Bin 0 -> 671626 bytes .../conference_101719.pdf | Bin 0 -> 125971 bytes .../conference_101719.tex | 288 + .../Conference-LaTeX-template_10-17-19/fig1.png | Bin 0 -> 4535 bytes .../conference-latex-template_10-17-19.zip | Bin 0 -> 764784 bytes synthetic/todo.txt | 32 + template_these_INSA_cotut.pdf | Bin 0 -> 5219296 bytes template_these_INSA_cotut.tex | 138 + 108 files changed, 29950 insertions(+), 2 deletions(-) create mode 100644 ED.tex create mode 100644 INSA.png create mode 100644 aia/classif.tex create mode 100644 aia/main.tex create mode 100644 avertissement.tex create mode 100644 background/figure/ml/logit/logit0.1.pdf create mode 100644 background/figure/ml/logit/logit0.2.pdf create mode 100644 background/figure/ml/logit/logit0.3.pdf create mode 100644 background/figure/ml/logit/logit0.30000000000000004.pdf create mode 100644 background/figure/ml/logit/logit0.4.pdf create mode 100644 background/figure/ml/logit/logit0.5.pdf create mode 100644 background/figure/ml/logit/logit0.6.pdf create mode 100644 background/figure/ml/logit/logit0.7.pdf create mode 100644 background/figure/ml/logit/logit0.7000000000000001.pdf create mode 100644 background/figure/ml/logit/logit0.8.pdf create mode 100644 background/figure/ml/logit/logit0.9.pdf create mode 100644 background/figure/ml/logit/metric.pdf create mode 100644 classification_finie/ba.tex create mode 100644 conclusion.tex create mode 100644 folio.tex create mode 100644 garde.tex create mode 100644 macros.tex create mode 100644 partenaire.png create mode 100644 remerciements.tex create mode 100644 synthetic/IEEEtran.cls create mode 100644 synthetic/Training learning models with synthetic data_ assessing risk propagation.zip create mode 100644 synthetic/background.tex create mode 100644 synthetic/bck/IEEEtran.cls create mode 100644 synthetic/bck/background.tex create mode 100644 synthetic/bck/biblio.bib create mode 100755 synthetic/bck/compile.sh create mode 100644 synthetic/bck/conclusion.tex create mode 100644 synthetic/bck/figure/method/overfit/aia.pdf create mode 100644 synthetic/bck/figure/method/overfit/mia.pdf create mode 100644 synthetic/bck/figure/method/overfit/quality.pdf create mode 100644 synthetic/bck/figure/method/overfit/utility.pdf create mode 100644 synthetic/bck/figure/result/adult/aia.pdf create mode 100644 synthetic/bck/figure/result/adult/mia.pdf create mode 100644 synthetic/bck/figure/result/adult/utility.pdf create mode 100644 synthetic/bck/figure/tikz/data.tex create mode 100644 synthetic/bck/figure/tikz/data_flow/step1.tex create mode 100644 synthetic/bck/figure/tikz/data_flow/step2.tex create mode 100644 synthetic/bck/figure/tikz/data_flow/step3.tex create mode 100644 synthetic/bck/figure/tikz/data_split/bck create mode 100644 synthetic/bck/figure/tikz/data_split/split.tex create mode 100644 synthetic/bck/figure/tikz/ovre.tex create mode 100644 synthetic/bck/figure/x.log create mode 100644 synthetic/bck/introduction.tex create mode 100644 synthetic/bck/list_of_conf_journals create mode 100644 synthetic/bck/main.aux create mode 100644 synthetic/bck/main.bbl create mode 100644 synthetic/bck/main.blg create mode 100644 synthetic/bck/main.log create mode 100644 synthetic/bck/main.pdf create mode 100644 synthetic/bck/main.tex create mode 100644 synthetic/bck/main.toc create mode 100644 synthetic/bck/methodology.tex create mode 100755 synthetic/bck/pdfcompress.sh create mode 100644 synthetic/bck/related.tex create mode 100644 synthetic/bck/results.tex create mode 100644 synthetic/bck/template/Conference-LaTeX-template_10-17-19/.DS_Store create mode 100644 synthetic/bck/template/Conference-LaTeX-template_10-17-19/IEEEtran.cls create mode 100644 synthetic/bck/template/Conference-LaTeX-template_10-17-19/IEEEtran_HOWTO.pdf create mode 100644 synthetic/bck/template/Conference-LaTeX-template_10-17-19/conference_101719.pdf create mode 100644 synthetic/bck/template/Conference-LaTeX-template_10-17-19/conference_101719.tex create mode 100644 synthetic/bck/template/Conference-LaTeX-template_10-17-19/fig1.png create mode 100644 synthetic/bck/template/conference-latex-template_10-17-19.zip create mode 100644 synthetic/biblio.bib create mode 100644 synthetic/compile.sh create mode 100644 synthetic/conclusion.tex create mode 100644 synthetic/figure/image1.png create mode 100644 synthetic/figure/image2.png create mode 100644 synthetic/figure/method/overfit/aia.pdf create mode 100644 synthetic/figure/method/overfit/mia.pdf create mode 100644 synthetic/figure/method/overfit/quality.pdf create mode 100644 synthetic/figure/method/overfit/utility.pdf create mode 100644 synthetic/figure/result/adult/aia.pdf create mode 100644 synthetic/figure/result/adult/mia.pdf create mode 100644 synthetic/figure/result/adult/utility.pdf create mode 100644 synthetic/figure/tikz/data.tex create mode 100644 synthetic/figure/tikz/data_flow/step1.tex create mode 100644 synthetic/figure/tikz/data_flow/step2.tex create mode 100644 synthetic/figure/tikz/data_flow/step3.tex create mode 100644 synthetic/figure/tikz/data_split/bck create mode 100644 synthetic/figure/tikz/data_split/split.tex create mode 100644 synthetic/figure/tikz/ovre.tex create mode 100644 synthetic/introduction.tex create mode 100644 synthetic/list_of_conf_journals create mode 100644 synthetic/main.log create mode 100644 synthetic/main.pdf create mode 100644 synthetic/main.tex create mode 100644 synthetic/methodology.tex create mode 100644 synthetic/pdfcompress.sh create mode 100644 synthetic/problem.tex create mode 100644 synthetic/related.tex create mode 100644 synthetic/results.tex create mode 100644 synthetic/template/Conference-LaTeX-template_10-17-19/IEEEtran.cls create mode 100644 synthetic/template/Conference-LaTeX-template_10-17-19/IEEEtran_HOWTO.pdf create mode 100644 synthetic/template/Conference-LaTeX-template_10-17-19/conference_101719.pdf create mode 100644 synthetic/template/Conference-LaTeX-template_10-17-19/conference_101719.tex create mode 100644 synthetic/template/Conference-LaTeX-template_10-17-19/fig1.png create mode 100644 synthetic/template/conference-latex-template_10-17-19.zip create mode 100644 synthetic/todo.txt create mode 100644 template_these_INSA_cotut.pdf create mode 100644 template_these_INSA_cotut.tex diff --git a/ED.tex b/ED.tex new file mode 100644 index 0000000..bea74ca --- /dev/null +++ b/ED.tex @@ -0,0 +1,215 @@ +\pagestyle{empty} + +\begin{center} +\large\textbf{Département FEDORA – INSA Lyon - Ecoles Doctorales} +\end{center} + +%\scriptsize +\fontsize{7.2pt}{7.2pt}\selectfont +\begin{center} +\begin{tabular}{|>{\centering}>{\columncolor[rgb]{0.90, 0.87, 0.93}}>{\color{txtED}}b{1.9cm}|b{7.2cm}|b{6.9cm}|} +\hline\vspace{.05cm} +\textbf{SIGLE}&\textbf{ECOLE DOCTORALE}&\textbf{NOM ET COORDONNEES DU RESPONSABLE}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 206\\ + \\ + CHIMIE\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{CHIMIE DE LYON}}\\[.2cm] + \textcolor{siteED}{\textbf{https://www.edchimie-lyon.fr}}\\ + Sec. : Renée EL MELHEM\\ + Bât. Blaise PASCAL, 3e étage\\ + \textcolor{blue}{\underline{\textbf{secretariat@edchimie-lyon.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{M. Stéphane DANIELE}}\\ + C2P2-CPE LYON-UMR 5265\\ + Bâtiment F308, BP 2077\\ + 43 Boulevard du 11 novembre 1918\\ + 69616 Villeurbanne\\ + \textcolor{blue}{\underline{\textbf{directeur@edchimie-lyon.fr}}}\\ + \end{tabular}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 341\\ + \\ + E2M2\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{ÉVOLUTION, ÉCOSYSTÈME, MICROBIOLOGIE, MODÉLISATION}}\\[.2cm] + \textcolor{siteED}{\textbf{http://e2m2.universite-lyon.fr }}\\ + Sec. : Bénédicte LANZA\\ + Bât. Atrium, UCB Lyon 1\\ + Tél : 04.72.44.83.62\\ + \textcolor{blue}{\underline{\textbf{secretariat.e2m2@univ-lyon1.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{Mme Sandrine CHARLES }}\\ + Université Claude Bernard Lyon 1\\ + UFR Biosciences\\ + Bâtiment Mendel\\ + 43, boulevard du 11 Novembre 1918\\ + 69622 Villeurbanne CEDEX\\ + \textcolor{blue}{\underline{\textbf{e2m2.codir@listes.univ-lyon1.fr}}}\\ + \end{tabular}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 205\\ + \\ + EDISS\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{INTERDISCIPLINAIRE SCIENCES-SANTÉ}}\\[.2cm] + \textcolor{siteED}{\textbf{http://ediss.universite-lyon.fr}}\\ + Sec. : Bénédicte LANZA\\ + Bât. Atrium, UCB Lyon 1\\ + Tél : 04.72.44.83.62\\ + \textcolor{blue}{\underline{\textbf{secretariat.ediss@univ-lyon1.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{Mme Sylvie RICARD-BLUM}}\\ + Laboratoire ICBMS - UMR 5246 CNRS - Université Lyon 1\\ + Bâtiment Raulin - 2ème étage Nord\\ + 43 Boulevard du 11 novembre 1918\\ + 69622 Villeurbanne Cedex\\ + Tél : +33(0)4 72 44 82 32\\ + \textcolor{blue}{\underline{\textbf{sylvie.ricard-blum@univ-lyon1.fr}}}\\ + \end{tabular}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 34\\ + \\ + EDML\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{MATÉRIAUX DE LYON}}\\[.2cm] + \textcolor{siteED}{\textbf{http://ed34.universite-lyon.fr}}\\ + Sec. : Yann DE ORDENANA\\ + Tél : 04.72.18.62.44\\ + \\ + \textcolor{blue}{\underline{\textbf{yann.de-ordenana@ec-lyon.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{M. Stéphane BENAYOUN}}\\ + Ecole Centrale de Lyon\\ + Laboratoire LTDS\\ + 36 avenue Guy de Collongue\\ + 69134 Ecully CEDEX\\ + Tél : 04.72.18.64.37\\ + \textcolor{blue}{\underline{\textbf{stephane.benayoun@ec-lyon.fr}}}\\ + \end{tabular}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 160\\ + \\ + EEA\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{ÉLECTRONIQUE, ÉLECTROTECHNIQUE, AUTOMATIQUE}}\\[.2cm] + \textcolor{siteED}{\textbf{https://edeea.universite-lyon.fr}}\\ + Sec. : Philomène TRECOURT\\ + Bâtiment Direction INSA Lyon\\ + Tél : 04.72.43.71.70\\ + \\ + \textcolor{blue}{\underline{\textbf{secretariat.edeea@insa-lyon.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{M. Philippe DELACHARTRE}}\\ + INSA LYON\\ + Laboratoire CREATIS\\ + Bâtiment Blaise Pascal, 7 avenue Jean Capelle\\ + 69621 Villeurbanne CEDEX\\ + Tél : 04.72.43.88.63\\ + \textcolor{blue}{\underline{\textbf{philippe.delachartre@insa-lyon.fr}}}\\ + \end{tabular}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 512\\ + \\ + INFOMATHS\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{INFORMATIQUE ET MATHÉMATIQUES}}\\[.2cm] + \textcolor{siteED}{\textbf{http://edinfomaths.universite-lyon.fr}}\\ + Sec. : Renée EL MELHEM\\ + Bât. Blaise PASCAL, 3e étage\\ + Tél : 04.72.43.80.46\\ + \textcolor{blue}{\underline{\textbf{infomaths@univ-lyon1.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{M. Hamamache KHEDDOUCI}}\\ + Université Claude Bernard Lyon 1\\ + Bât. Nautibus\\ + 43, Boulevard du 11 novembre 1918\\ + 69 622 Villeurbanne Cedex France\\ + Tél : 04.72.44.83.69\\ + \textcolor{blue}{\underline{\textbf{direction.infomaths@listes.univ-lyon1.fr}}}\\ + \end{tabular}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 162\\ + \\ + MEGA\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{MÉCANIQUE, ÉNERGÉTIQUE, GÉNIE CIVIL, ACOUSTIQUE}}\\[.2cm] + \textcolor{siteED}{\textbf{http://edmega.universite-lyon.fr}}\\ + Sec. : Philomène TRECOURT\\ + Tél : 04.72.43.71.70\\ + Bâtiment Direction INSA Lyon\\ + \textcolor{blue}{\underline{\textbf{mega@insa-lyon.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{M. Etienne PARIZET}}\\ + INSA Lyon\\ + Laboratoire LVA\\ + Bâtiment St. Exupéry\\ + 25 bis av. Jean Capelle\\ + 69621 Villeurbanne CEDEX\\ + \textcolor{blue}{\underline{\textbf{etienne.parizet@insa-lyon.fr}}}\\ + \end{tabular}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 483\\ + \\ + ScSo\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{ScSo}}\footnotemark[1]\\[.2cm] + \textcolor{siteED}{\textbf{https://edsciencessociales.universite-lyon.fr}}\\ + Sec. : Mélina FAVETON\\ + Tél : 04.78.69.77.79\\ + \textcolor{blue}{\underline{\textbf{melina.faveton@univ-lyon2.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{M. Bruno MILLY}} (INSA : J.Y. TOUSSAINT)\\ + Univ. Lyon 2 Campus Berges du Rhône\\ + 18, quai Claude Bernard\\ + 69365 LYON CEDEX 07\\ + Bureau BEL 319\\ + \textcolor{blue}{\underline{\textbf{bruno.milly@univ-lyon2.fr}}}\\ + \end{tabular}\\ + + \hline +\end{tabular} +\end{center} + +\footnotetext[1]{\scriptsize ScSo : Histoire, Géographie, Aménagement, Urbanisme, Archéologie, Science politique, Sociologie, Anthropologie } diff --git a/INSA.png b/INSA.png new file mode 100644 index 0000000..b4055ca Binary files /dev/null and b/INSA.png differ diff --git a/aia/classif.tex b/aia/classif.tex new file mode 100644 index 0000000..67e9874 --- /dev/null +++ b/aia/classif.tex @@ -0,0 +1,96 @@ +\begin{theorem} + \label{th:aia-dpgood} + Si le modèle cible satisfait la démographic parity alors l'attaque n'importe qu'elle classifieur utilisant la prédiction pour inférer l'attribut sensible est un CCA. + Si le modèle cible satisfait la démographic parity généraliée alors l'attaque utilisant le logit pour inférer l'attribut sensibl est un CCA. +\end{theorem} + +Le théorème précedent permet de + +Pour démontrer ce résultat, commencons par nous rapeler de la raison pour la quelle nous avons défini les CCA comme tel au début du Chaptire~\ref{sec:fini}. +Nous voulions englober dans cette définition les classifieur qui essaient de prédire un attribute indépendant de la donnée d'entrée. +Cependant nous n'avons jamais démontré que de tels classifieurs sont des CCA. +C'est ce que nous proposons avec le lemme suivant. + +\begin{lemma} + \label{lemme:aia-xycca} + Soit $(\Omega,\mathcal{T},P)$ un espace probabilisé. + Soient $X:(\Omega,\mathcal{T}) \rightarrow (E,\mathcal{E})$ et $Y:\Omega \rightarrow (F,\mathcal{F})$ des variables aléatoires. + Les deux propositions suivantes sont équivalantes : + \begin{enumerate} + \item $P_{(X,Y)} = P_X\otimes P_Y$. + \item Toute fonction mesurable $f:(E,\mathcal{T})\rightarrow (F,\mathcal{F})$ est un CCA pour prédire $Y$ à partir de $X$. + \end{enumerate} +\end{lemma} + +\begin{proof} + En gardant les objets définis dans le Lemme~\ref{lemme:aia-xycca}. + Nous allons prouver séparément les deux implications. + \paragraph{$(1)\implies(2)$} + Nous supposons que $P_{(X,Y)} = P_X\otimes P_Y$. + Soit $f:(E,\mathcal{T})\rightarrow (F,\mathcal{F})$, un fonction mesurerable, + nous allons montrer que $f$ est un CCA, c'est-à dire que $P_{(f\circ X,Y)} = P_{f\circ X}\otimes P_Y$. + + Soient $(A,B)\in\mathcal{E}\times\mathcal{F}$ + \begin{align*} + &P_{(f\circ X,Y)}(A,B)&\\ + =&P(\{f\circ X\in A\}\cap\{Y\in B\})&\\ + =&P(\{X\in f^{-1}(A)\}\cap\{Y\in B\})&\\ + &&\textit{Comme $X$ et $Y$ sont indépendantes.}\\ + =&P_X(f^{-1}(A))P_Y(B)&\\ + =&P_{f\circ X}(A)P_Y(B)& + \end{align*} + + Ainsi, $\forall (A,B)\in\mathcal{E}\times\mathcal{F}~P_{(f\circ X,Y)}(A,B) = P_{f\circ X}(A)P_Y(B)$. + D'après la définition de le mesure produit donnée à la Section~\ref{sec:background-proba}, nous avons donc bien $P_{(f\circ X,Y)} = P_{f\circ X}\otimes P_Y$. + Ce qui est bien la définition de l'indépendant donnée en Section~\ref{sec:background-proba}. + + \paragraph{$(2)\implies (1)$} + Nous supposons que tout classifieur de $Y$ à partir de $X$ est un CCA. + Montrons que $P_{(X,Y)} = P_{f\circ X}\otimes P_Y$. + Soit $(A,B)\in\mathcal{E}\times\mathcal{F}$. + Nous allons montrer que + $P(X\in A\cap Y\in B) = P(X\in A)P(Y\in B)$. + + \paragraph{Cas 1 : $\mathcal{F}=\{\emptyset,F\}$} + Si $B=\emptyset$ alors + $P(X\in A\cap Y\in B) = P(X\in A)P(Y\in B) = \emptyset$. + Si $B=F$ alors + $P(X\in A\cap Y\in B) = P(X\in A)P(Y\in B) = P(X\in A)$. + + \paragraph{Cas 2 : $\#\mathcal{F}>2$} + Alors il existe $C\in\mathcal{F}$ tel que $C\neq\emptyset$ et $F\backslash C\neq\emptyset$. + Nous pouvons donc choisir $c$ dans $C$ et $c'$ dans $F\backslash C$. + Nous construisons la fonction suivante: + \begin{equation*} + f:\left\{ + \begin{matrix} + E\rightarrow F\\ + e\mapsto\left\{ + \begin{matrix} + c~\text{si}~e\in A\\ + c'~\text{sinon} + \end{matrix} + \right. + \end{matrix} + \right. + \end{equation*} + Alors $f:(E,\mathcal{E})\rightarrow (F,\mathcal{F})$ est une fonction mesurable et $f^{-1}(C) = A$. + Ainsi + \begin{align*} + &P(X\in A\cap Y\in B)\\ + =&P(X\in f^{-1}(C)\cap Y\in B)\\ + \text{Comme $f$ est un CCA.}&\\ + =&P(f\circ X\in C)P(Y\in B)\\ + =&P(X\in A)P(Y\in B) + \end{align*} + +\end{proof} + +Désormais la démonstration du Théorème~\ref{th:aia-dpgood} devient évidente. + +\begin{proof} + Par définition, la \textit{demographic parity} (respectivement généralisée) est equivalante à l'inpépendance entre l'attribut sensible et la prediction (respectivement le logit). + Ainsi, d'après le Lemme~\ref{lemme:aia-xycca} tout classifieur de l'attribute sensible utilisant la prédiction (respectivement le logit) est un CCA. + En particulier les attaques \AIAHard~et \AIASoft. +\end{proof} + diff --git a/aia/main.tex b/aia/main.tex new file mode 100644 index 0000000..07f5b67 --- /dev/null +++ b/aia/main.tex @@ -0,0 +1,17 @@ + +\section{AIA} +\section{Modèle de menace} +threat model +\label{sec:aia-tm} + +\section{Classification} +\input{aia/classif} + +\section{Regression} +\label{sec:aia-soft} + +\section{Méthodologie} +\subsection{Jeux de donné} +\label{sec:aia-methodo-jeu} +The US census is a snapshot of the US adult population that is done every ten year by the US government\footnote{www.census.gov}. +It produces a database where each row is an individual and each column is an attribute that describe people. diff --git a/avertissement.tex b/avertissement.tex new file mode 100644 index 0000000..1c5d88f --- /dev/null +++ b/avertissement.tex @@ -0,0 +1,7 @@ +Ce manuscrit aborde des notions de discirimination notament de genre, d'origine et de couleur de peau. +En France, les statistiques éthnique sont intérdites~\cite{} ce qui n'est pas le cas aux USA. +Les résultats de statistiques descriptives, nottament sur les crimes comis en fonction de la couleur de peau, sont à mettre en parallèle avec un grand nombre de facteurs socio-économiques~\cite{} +Ainsi, ils ne doivent pas être interprété comme indiquant une différence de comportement social entre sous groupes ethniques. + +De plus, la Seciont~\ref{sec:contexte-phi} invite le lecteur à des expériences de pensées qui peuvent être angoissantes pour certaines personnes~\cite{}. +Nous invitons donc le lecteur à ne pas s'attarder sur cette section si il ne se juge pas émotionelement prêt. diff --git a/background/figure/ml/logit/logit0.1.pdf b/background/figure/ml/logit/logit0.1.pdf new file mode 100644 index 0000000..51d3a38 Binary files /dev/null and b/background/figure/ml/logit/logit0.1.pdf differ diff --git a/background/figure/ml/logit/logit0.2.pdf b/background/figure/ml/logit/logit0.2.pdf new file mode 100644 index 0000000..7245ed3 Binary files /dev/null and b/background/figure/ml/logit/logit0.2.pdf differ diff --git a/background/figure/ml/logit/logit0.3.pdf b/background/figure/ml/logit/logit0.3.pdf new file mode 100644 index 0000000..1665fec Binary files /dev/null and b/background/figure/ml/logit/logit0.3.pdf differ diff --git a/background/figure/ml/logit/logit0.30000000000000004.pdf b/background/figure/ml/logit/logit0.30000000000000004.pdf new file mode 100644 index 0000000..8ffe883 Binary files /dev/null and b/background/figure/ml/logit/logit0.30000000000000004.pdf differ diff --git a/background/figure/ml/logit/logit0.4.pdf b/background/figure/ml/logit/logit0.4.pdf new file mode 100644 index 0000000..772d3ff Binary files /dev/null and b/background/figure/ml/logit/logit0.4.pdf differ diff --git a/background/figure/ml/logit/logit0.5.pdf b/background/figure/ml/logit/logit0.5.pdf new file mode 100644 index 0000000..ffb170a Binary files /dev/null and b/background/figure/ml/logit/logit0.5.pdf differ diff --git a/background/figure/ml/logit/logit0.6.pdf b/background/figure/ml/logit/logit0.6.pdf new file mode 100644 index 0000000..31df9bc Binary files /dev/null and b/background/figure/ml/logit/logit0.6.pdf differ diff --git a/background/figure/ml/logit/logit0.7.pdf b/background/figure/ml/logit/logit0.7.pdf new file mode 100644 index 0000000..690278c Binary files /dev/null and b/background/figure/ml/logit/logit0.7.pdf differ diff --git a/background/figure/ml/logit/logit0.7000000000000001.pdf b/background/figure/ml/logit/logit0.7000000000000001.pdf new file mode 100644 index 0000000..c24731f Binary files /dev/null and b/background/figure/ml/logit/logit0.7000000000000001.pdf differ diff --git a/background/figure/ml/logit/logit0.8.pdf b/background/figure/ml/logit/logit0.8.pdf new file mode 100644 index 0000000..b7d276e Binary files /dev/null and b/background/figure/ml/logit/logit0.8.pdf differ diff --git a/background/figure/ml/logit/logit0.9.pdf b/background/figure/ml/logit/logit0.9.pdf new file mode 100644 index 0000000..a37dc4f Binary files /dev/null and b/background/figure/ml/logit/logit0.9.pdf differ diff --git a/background/figure/ml/logit/metric.pdf b/background/figure/ml/logit/metric.pdf new file mode 100644 index 0000000..bdaa5a8 Binary files /dev/null and b/background/figure/ml/logit/metric.pdf differ diff --git a/classification_finie/ba.tex b/classification_finie/ba.tex new file mode 100644 index 0000000..7069668 --- /dev/null +++ b/classification_finie/ba.tex @@ -0,0 +1,372 @@ +Le cas d'un classifieur constant, comme nous l'avons à la Section~\ref{sec:backgroung-ml-classif}, n'est qu'un exemple de Classifieur qui réalise un Choix Aléatoire (CCA). +En anglais la litterature parle en générale de \textit{random guess}~\cite{chicco2021matthews}. +Cependant, à notre conaissance, il n'y a pas de definition mathématique qui unifie l'idée générale de CCA qui est : +un classifieur qui se comporte comme si il n'avait aucune conaissance sur sa tâche de classification. +Un CCA n'est pas un classifieur qui utilise l'aléatoire mais plutot un classifieur hasardeux, comme une personne qui choisirai au hasard. +C'est le cas pour un classifieur constant mais aussi pour un classifieur binaire qui tire à pile ou face son résultat. + +Nous pourrions dire qu'un CCA est un classifieur qui n'utilise pas les données d'entrée. +Cependant cela ne prend pas un compte le cas où les données d'entrée ne servent à rien pour la tâche de classification. +Par exemple nous voudrions que notre définition englobe n'importe quelle classifieur qui cherche à prédire la qualitée d'un potimaron à partir la coleur de mes chaussettes le jour pù il a été ramassé. +Nous proposons donc la définition suivante : +\begin{definition} + Un CCA est un classifieur ayant une prédiction indépendante de l'étiquette. + C'est à dire que pour un classifeur $f: E\rightarrow F$. + Avec une étiquette $Y:\Omega\rightarrow F$ + et une entrée $X:\Omega\rightarrow E$. + Alors pour $\hat{Y}=f\circ X$, nous avons + $P_{(Y,\hat{Y})} = P_Y\otimes P_{\hat{Y}}$ +\end{definition} + +\begin{propriete} + \label{prop:CCA_BA} + Les CCA ayant comme image $ F$ ont une \textit{balanced accuracy} égale à $\frac{1}{\# F}$. +\end{propriete} + +\begin{proof} + Soit $f: E\rightarrow F$ un CCA. + On pause $\hat{Y} = f\circ X$ + La \textit{balanced accuracy} de $f$ est alors + \begin{align*} + &\frac{1}{\# F}\sum_{y\in F} + P(\hat{Y}=y\mid Y=y)\\ + =&\frac{1}{\# F}\sum_{y\in F} + \frac{P(\{\hat{Y}=y\}\cap \{Y=y\})}{P(Y=y)}\\ + =&\frac{1}{\# F}\sum_{y\in F} + \frac{P_{(\hat{Y},Y)}(\{y\}\times \{y\})}{P(Y=y)}\\ + \text{Comme $f$ est un CCA.}\\ + =&\frac{1}{\# F}\sum_{y\in F} + \frac{P(\hat{Y}=y)P(Y=y)}{P(Y=y)}\\ + =&\frac{1}{\# F}\sum_{y\in F} + P(\hat{Y}=y)\\ + =&\frac{1}{\# F} + \end{align*} +\end{proof} + +La contraposé de la Propositon~\ref{prop:CCA_BA} nous apprend que si la \textit{balanced accuracy} est différente de $0,5$ alors le classifieur n'est pas un CCA. + + Il est interessant de noter que si un classifieur à une \textit{balanced accuracy} de $\frac{1}{\#F}$ il n'est pas necessaire qu'il soit un CCA. + Pour prouver cette remarque il suffit de trouver un exemple de classifieur ayant une \textit{balanced accuracy} de $\frac{1}{\#F}$ et qui ne soit pas un CCA. + +Nous appelons $r(a,b)$ le reste de la division euclidienne de $a$ par $b$. +Soient les ensembles suivant : +$E = [|0,8|]$ et +$F = [|0,2|]$. +En considérant l'espace probabilisé +$(E,\mathcal{P}(E),\frac{1}{9}\sum_{i=0}^8\delta_{i})$ +nous définissons les variables aléatoire suivantes : +$X=\textit{id}_E$ +\begin{equation*} + Y:\left\{ + \begin{matrix} + E\rightarrow F\\ + e\mapsto r(e,3) + \end{matrix} + \right. +\end{equation*} + +Ainsi que la fonction mesurable suivante qui est l'exemple de classifieur que nous exhibons pour montrer la remarque : +\begin{equation*} + f:\left\{ + \begin{matrix} + E\rightarrow F\\ + e\mapsto \left\{ + \begin{matrix} + r(e,3)~\text{si $e<3$}\\ + r(e+1,3)~\text{si $3\leq e<6$}\\ + r(e+2,3)~\text{si $6\leq e<8$}\\ + 0~\text{sinon} + \end{matrix} + \right. + \end{matrix} + \right. +\end{equation*} + +Montrons que la \textit{balanced accuracy} de $f$ vaut $\frac{1}{3}$. +En notant $\hat{Y} = f\circ X$, nous réprésentons cette situation par le tableau suivant. +\begin{equation*} + \begin{matrix} + X&Y&\hat{Y}\\ + 0&0&0\\ + 1&1&1\\ + 2&2&2\\ + 3&0&1\\ + 4&1&2\\ + 5&2&0\\ + 6&0&2\\ + 7&1&0\\ + 8&2&0 + \end{matrix} +\end{equation*} + +Il nous permet de calculer facilement les quantités suivantes. +Déjà la \textit{balanced accuracy} est égale à $\frac{1}{3}$ car +$\forall y\in F~P(\hat{Y}=y\mid Y=y)=\frac{1}{3}$. +Enfin nous voyons que $f$ n'est pas un CCA car +$P(\hat{Y}=1\cap Y=2) = 0$ et +$P(\hat{Y}=1)P(Y=2) = \frac{2}{9}\frac{1}{3} = \frac{2}{27}$ + +Bien qu'une \textit{balanced accuracy} égale à $\frac{1}{\#F}$ ne soit pas un critère de CCA, nous pouvons utiliser cette métrique pour savoir si il existe un classifieur qui soit un CCA. +En effet nous avons le resultat suivant : + +\begin{theorem} + En notant $BA(f)$ la \textit{balanced accuracy} de $f$. + \begin{equation*} + \forall f~BA(f)=\frac{1}{\#F} \iff + \forall f~\text{$f$ est un CCA} + \end{equation*} +\end{theorem} + +\begin{proof} + L'implication réciproque est une conséquence directe de la Propriété~\ref{prop:CCA_BA}. + + Pour le sens directe, nous allons montrer la contraposée, c'est à dire l'assertion suivante : + \begin{equation*} + \exists f~\text{$f$ n'est pas un CCA} \implies + \exists f~BA(f)\neq \frac{1}{\#F} + \end{equation*} + + Nous avons donc $E$ un ensemble et $F$ un ensemble fini. + Nous avons les variables aléatoires $X:\Omega\rightarrow E$ + et $Y:\Omega\rightarrow \mathcal{P}(F)$. + Nous supposons que nous avons $f:(E,\mathcal{E})\rightarrow (F,\mathcal{F})$, une fonction mesurable qui ne soit pas un CCA pour prédire $Y$ en utilisant $X$. + + Nous avons donc $(A,B)\in{\mathcal{P}(F)}^2$ tel que + \begin{equation*} + P(f\circ X\in A\cap Y\in B)\neq P(f\circ X\in A)P(Y\in B) + \end{equation*} + + Or + \begin{equation*} + P(f\circ X\in A\cap Y\in B) = \sum_{a\in A}\sum_{b\in B}P(f\circ X=a\cap Y=b) + \end{equation*} + et + \begin{equation*} + P(f\circ X\in A)P(\cap Y\in B) = \sum_{a\in A}\sum_{b\in B}P(f\circ X=a)P(Y=b) + \end{equation*} + Ainsi + \begin{equation*} + \exists (a,b)\in A\times B~ + P(f\circ X=a\cap Y=b)\neq P(f\circ X=a)P(Y=b) + \end{equation*} + + Nous définisson les fonctions suivante pour tout $z$ et $z'$, éléments de $F$ : + \begin{equation*} + h_{z,z'}:\left\{ + \begin{matrix} + F\rightarrow F\\ + y\mapsto \left\{ + \begin{matrix} + &z&\text{si}&y=z'\\ + &z'&\text{si}&y=z\\ + &y&\text{sinon}& + \end{matrix} + \right. + \end{matrix} + \right. + \end{equation*} + + $h_{z,z'}$ vas nous permetre et permuter les inférences faitent par $f$. + Ainsi à partir de $f$ nous créons de nouveaux classifieurs. + Soit $\mathcal{H}=\{h_{z,z'}\mid (z,z')\in F^2\}$ nous allons montrer qu'il existe $\#F$-uplet de $\mathcal{H}$, $u$, tel que le classifieur $u_{\#F-1}\circ\cdots\circ u_0\circ f$ ai une \textit{balanced accuracy} différent de $\frac{1}{\#F}$. + + Considérons la matrice + \begin{equation*} + M_f(i,j) = P(f\circ X=y_i\mid Y=y_j) + \end{equation*} + Où $y_\square:\#F\rightarrow F$ est une bijection. + Alors la \textit{balanced accuracy} de $f$ est égale $\text{Tr}(M)$. + $h_{z,z'}$ peut aussi s'exprimer en terme matriciel. + La fonction suivainte est une bijection : + \begin{equation*} + \Phi:\left\{ + \begin{matrix} + \mathcal{H}\rightarrow\mathcal{H}'\\ + h_{y_i,y_j}\mapsto H_{i,j} + \end{matrix} + \right. + \end{equation*} + Où $\mathcal{H}'=\{H_{i,j}\mid(i,j)\in\#F^2\}$ avec + \begin{equation*} + H_{i,j} = \left( + \begin{matrix} + %1&&&&&&&&&\\ + \ddots&&&&&&&&\\ + &1&&&&&&&\\ + &&0&&&&1&&\\ + &&&1&&&&&\\ + &&&&\ddots&&&&\\ + &&&&&1&&&\\ + &&1&&&&0&&\\ + &&&&&&&1&\\ + &&&&&&&&\ddots\\ + %&&&&&&&&&&1 + \end{matrix} + \right) + \begin{matrix} + \\ + \\ + i\\ + \\ + \\ + \\ + j\\ + \\ + \\ + \end{matrix} + \end{equation*} + + De plus, $M_{h_{y_i,y_j}\circ f}$ correspond à intervertire les lignes des $M_f$, + c'est-à dire que $M_{h_{y_i,y_j}\circ f} = H_{i,j}M_f$. + En effet, $h_{y_i,y_j}$ est une bijection telle que + $h_{y_i,y_j}^{-1} = h_{y_i,y_j}$. + Alors, soit $(k,l)\in\#F^2$, + \begin{align*} + &M_{h_{y_i,y_j}\circ f}(k,l)\\ + =&P\left(h_{y_i,y_j}\circ f\circ X=y_k\mid Y=y_l\right)\\ + =&P\left(f\circ X=h_{y_i,y_j}(y_k)\mid Y=y_l\right)\\ + =&\left\{ + \begin{matrix} + P\left(f\circ X=y_i\mid Y=y_l\right)&\text{si}& k=j\\ + P\left(f\circ X=y_j\mid Y=y_l\right)&\text{si}&k=i\\ + P\left(f\circ X=y_k\mid Y=y_l\right)&\text{sinon}& + \end{matrix} + \right.\\ + =&\left\{ + \begin{matrix} + M(i,l)&\text{si}&k=j\\ + M(j,l)&\text{si}&k=i\\ + M(k,l)&\text{sinon}& + \end{matrix} + \right.\\ + &=H_{i,j}M_f(k,l) + \end{align*} + +Ainsi l'existence de $u$ est équivalante à l'existance d'une matrice $H = H_{i_{\#F-1},j_{\#F-1}}\cdots H_{i_0,j_0}$ telle que $\text{Tr}(HM_f)\neq 1$. +Montrons l'existence d'une telle matrice $H$. + +Commencons par montrer que pour chaque ligne de $M_f$ il est possible de choisir arbitrairement l'élement de la ligne qui sera dans la diagonale de $HM_f$ tant qu'on ne choisit pas deux fois un élément dans une même colone. +C'est-à dire montrons que +\begin{align*} + \{\{M(i,\varphi(i))\mid i\in\#F\}\mid \text{$\varphi$ est une bijection sur $\#F$}\}\\ + \subset\{\text{Diag}(HM_f)\mid \exists I\in \left(\mathcal{H}'\right)^{\#F}~H=I_{\#F-1}\cdots I_0\} +\end{align*} +Soit $\varphi$ une bijection sur $\#F$, nous posons +\begin{equation*} + \psi:\left\{ + \begin{matrix} + \#F\rightarrow \#F\\ + i\mapsto \left\{ + \begin{matrix} + \varphi^{-1}(i)&\text{si}&\varphi^{-1}(i)\geq i\\ + \varphi^{-1}\left(\varphi^{-1}(i)\right)&\text{sinon}& + \end{matrix} + \right. + \end{matrix} + \right. +\end{equation*} +Nous posons +\begin{equation} + \label{eq:fini-H} + H=H_{\psi(\#F-1),\#F-1}\cdots H_{\psi(1),1}H_{\psi(0),0} +\end{equation} +Pour montrer l'inclusion précédente, il suffit alors de montrer que +\begin{equation*} +\{M(i,\varphi(i))\mid i\in\#F\} = +\text{Diag}(HM_f) +\end{equation*} +Montrons donc que +$\forall i\in\#F~M_f(i,\varphi(i))=HM_f(\varphi(i),\varphi(i))$. +Soit $i\in\#F$. +$H$ intervertis les lignes de $M_f$, la colone $\varphi(i)$ est à la même place dans $M_f$ et dans $HM_f$. +Il suffit donc de montrer que la $i$ème ligne de $M_f$ est la $\varphi(i)$ème de $HM_f$. +Isolons les termes qui modifient la position de la $i$ème ligne de $H$. +Si $i\geq\varphi(i)$ alors +\begin{align*} + &HM_f(\varphi(i),\varphi(i))\\ + =&H_{\psi(\varphi(i)),\varphi(i)}M_f(\varphi(i),\varphi(i))\\ + =&H_{i,\varphi(i)}M_f(\varphi(i),\varphi(i))\\ + =&M_f(i,\varphi(i)) +\end{align*} +si $i<\varphi(i)$ alors +\begin{align*} + &HM_f(\varphi(i),\varphi(i))\\ + =&H_{\psi(\varphi(i)),\varphi(i)}H_{\varphi^{-1}(i),i}M_f(\varphi(i),\varphi(i))\\ + =&H_{\varphi^{-1}(i),\varphi(i)}H_{\varphi^{-1}(i),i}M_f(\varphi(i),\varphi(i))\\ + =&M_f(i,\varphi(i)) +\end{align*} + +Ainsi grâce à l'Equation~\ref{eq:fini-H}, pour toute bijection sur $\#F$ nous pouvons construir une suite de $\#F$ permutations de lignes telle que la diagonale de la matrice résultante des permutations contienent les éléments sélectionés par la bijections. +Nous allons montrer qu'il existe une séléction d'éléments telle que la somme de ses éléments soit différente de $1$. +Pour ce faire, nous allons montrer la proposition ($\dag$) : si toutes les séléctions donnent une somme égale à $1$ alors necessairement tous les élement de chaque ligne de $M_f$ sont égaux entre eux. + +Supposons donc, que pour toutes les bijections $\varphi$ sur $\#F$, nous ayons +\begin{equation*} + \sum_{i\in\#F}M_f(i,\varphi(i)) = 1 +\end{equation*} +Nous savons qu'il existe $\#F!$ bijections sur $\#F$. +De plus, +\begin{equation*} + \forall j\in\#F~\sum_{i\in\#F}M_f(i,j)= + \sum_{i\in\#F}P(f\circ X=y_i\mid Y=y_j) =1 +\end{equation*} + +Ces deux conditions impliquent que pour toute ligne $i$ et colone $j$ : +\begin{align*} + &\sum_{\varphi\in B(i,j)}\sum_{k\in\#F}M_f(k,\varphi(k)) + +\sum_{k\in\#F}M_f(k,j) = (\#F-1)!+1\\ + \iff& + ((\#F-1)!+1)M(i,j)+ + \sum_{k\in\#F\backslash\{i\}}M_f(k,j) + + \sum_{\varphi\in B(i,j)}M_f(k,\varphi(k))\\ + &= (\#F-1)!+1\\ + \iff& + ((\#F-1)!+1)M(i,j)+ + \sum_{k\in\#F\backslash\{i\}}M_f(k,j) + \sum_{l\in\#F}M_f(k,l) + = (\#F-1)!+1\\ + \iff& + M(i,j) + = + \frac{1}{(\#F-1)!+1} + \left( + (\#F-1)!+1- + \sum_{k\in\#F\backslash\{i\}} + \sum_{l\in\#F}M_f(k,l) + \right) +\end{align*} + +Ainsi $\exists u \forall j\in\#F~M(i,j)= u$, cela achève la preuve de la proposition ($\dag$). +Or dans notre cas nous avons $(a,b)\in A\times B$ +\begin{equation*} + P(f\circ X=a\cap Y=b)\neq P(f\circ X=a)P(Y=b) +\end{equation*} +Ainsi, comme nous avons $(i,j)\in\#F^2$ tel que $y_i=a \wedge y_j=b$, +\begin{equation*} + P(f\circ X=y_i\mid Y=y_j)\neq P(f\circ X=y_i) +\end{equation*} +Et donc, il existe $k\in\#F$ tel que +\begin{equation*} + P(f\circ X=y_i\mid Y=y_j)\neq P(f\circ X=y_i\mid Y=y_k) +\end{equation*} +C'est à dire que $M_f(i,j)=\neq M_f(i,k)$. + +D'après la contraposée de la propostion ($\dag$), nous avons une selection $\varphi$ telle que +$\sum_{i\in\#F}M(\varphi(i),\varphi(i))\neq 1$. +Donc en définisant $H$ de la même manière qu'à l'Equation~\ref{eq:fini-H} nous avons $\text{Tr}(HM_f)\neq 1$. +Il existe alors un $\#F$-uplet $u\in\mathcal{H}^{\#F}$ tel que +, pour +\begin{equation*} + g = u_{\#F-1}\circ\cdots\circ u_0\circ f +\end{equation*} +\begin{equation*} + BA(g)\neq \frac{1}{\#F} +\end{equation*} + + + +\end{proof} + +Nous allons construire un classifieur qui maximise la \textit{balanced accuracy}. + + diff --git a/classification_finie/finit_classif.tex b/classification_finie/finit_classif.tex index f518cdc..df1fb9f 100644 --- a/classification_finie/finit_classif.tex +++ b/classification_finie/finit_classif.tex @@ -377,6 +377,7 @@ Nous cherchons donc le maximum de chaque ligne de $M$ ce qui fait que nous n'avo Nous formalisons cette idée dans le théorème suivant : \begin{theorem} + \label{th:fini-em} Soit $e_i$ le $n$-uplet de $\mathbb{N}$ suivant : \begin{equation*} e_i:\left\{ diff --git a/conclusion.tex b/conclusion.tex new file mode 100644 index 0000000..6d67ca2 --- /dev/null +++ b/conclusion.tex @@ -0,0 +1 @@ +L'IA c'est comme une boîte de chocolat, on sait jamais lequel on vas avoir. diff --git a/folio.tex b/folio.tex new file mode 100644 index 0000000..50e6def --- /dev/null +++ b/folio.tex @@ -0,0 +1,57 @@ + +\newgeometry{top=.8cm,bottom=1cm,right=1.5cm,left=1.5cm} + +\begin{center} +\includegraphics[height=1.9cm]{INSA.png} +\end{center} + +\vspace{.3cm} +\footnotesize +\centering +\begin{tabular}{|p{8.6cm}p{8.6cm}|} + \multicolumn{2}{p{17.2cm}}{\center{\normalsize{\underline{FOLIO ADMINISTRATIF}}}}\\[-.2cm] + \multicolumn{2}{p{17.2cm}}{\center{\normalsize{\dotuline{THESE DE L’INSA LYON, MEMBRE DE L’UNIVERSITE DE LYON}}}}\\ + \multicolumn{2}{p{17.2cm}}{}\\ + \hline + &\\ + NOM : \textbf{Aalmoes}&DATE de SOUTENANCE : \textbf{(Date)}\\ + (avec précision du nom de jeune fille, le cas échéant)&\\ + &\\ + Prénoms : \textbf{Jan}&\\ + &\\ + \multicolumn{2}{|p{17.2cm}|}{TITRE : \textbf{Intelligence artificielle pour des services moraux}}\\ + &\\ + &\\ + &\\ + &\\ + NATURE : \textbf{Doctorat}&Numéro d'ordre : \textbf{(donné au moment du dépôt)}\\ + &\\ + \multicolumn{2}{|p{17.2cm}|}{\'Ecole Doctorale : \textbf{Informatique et mathématiques de Lyon}}\\ + &\\ + Spécialité : \textbf{Mathématiques}&\\ + &\\ + &\\ + R\'ESUM\'E :&\\ + \multicolumn{2}{|p{17.2cm}|}{\lipsum[4]}\\ + \multicolumn{2}{|p{17.2cm}|}{\lipsum[3]}\\ + \multicolumn{2}{|p{17.2cm}|}{\lipsum[2]}\\ + &\\ + \multicolumn{2}{|p{17.2cm}|}{MOTS-CL\'ES : \textbf{Intelligence articielle, Equitée, Confidentialité, Privacy, Fairness}}\\ + &\\ + &\\ + \multicolumn{2}{|p{17.2cm}|}{ + \begin{tabular}{@{}ll}%@{} pour avoir aucune bordure + Laboratoire(s) de recherche : &\textbf{CITI}\\ + \end{tabular}}\\ + &\\ + &\\ + \multicolumn{2}{|p{17.2cm}|}{Directeur de thèse : \textbf{Methieu Cunche}}\\ + &\\ + &\\ + \multicolumn{2}{|p{17.2cm}|}{Président du Jury : \textbf{(président, nommé au moment de la soutenance)}}\\ + &\\ + \multicolumn{2}{|p{17.2cm}|}{Composition du Jury :}\\ + \multicolumn{2}{|p{17.2cm}|}{\hspace{1cm}\textbf{(Jury)}}\\ + &\\ + \hline +\end{tabular} diff --git a/garde.tex b/garde.tex new file mode 100644 index 0000000..2349f57 --- /dev/null +++ b/garde.tex @@ -0,0 +1,68 @@ +\newgeometry{top=1.85cm,bottom=2.5cm,right=1.6cm,left=1.85cm} + + +\begin{titlepage} + +\begin{tabular}{cc} + \includegraphics[height=3cm]{INSA.png} + \includegraphics[height=3cm]{partenaire.png} +\end{tabular} + +\vspace{1cm} + +\small +N° d'ordre NNT : $xxx$\\[-.4cm] + + +\begin{center} + +\Large + +\scalebox{1}[.9]{\textbf{THESE de DOCTORAT DE L’INSA LYON,}}\\[-.2cm] +\scalebox{1}[.9]{\textbf{membre de l’Université de Lyon}}\\[.5cm] + +\normalsize + +%délivré en partenariat international avec\\ +%\textbf{(Nom Etablissement)}\\[.5cm] + +\textbf{Ecole Doctorale} N° accréditation\\ +\textbf{(Nom complet Ecole Doctorale)}\\[.4cm] +\textbf{Spécialité/ discipline de doctorat : Mathématiques}\\[2.1cm] + + +\normalsize +Soutenue publiquement clos le jj/mm/aaaa, par :\\ +\Large +\scalebox{1}[.9]{\textbf{Jan Aalmoes}}\\[.7cm] + +\hrulefill\\[.3cm] +\Huge +\textbf{Intelligence artificielle pour des services moraux} + +\hrulefill\\[2cm] + + +\end{center} + +\normalsize +Devant le jury composé de :\\[.3cm] + +\small + +\begin{tabular}{lllll} +&&&&\\ +NOM&Prénom&grade/qualité&établissement/entreprise&\textcolor{red}{Président.e (à préciser après la soutenance)} \\ +NOM&Prénom&grade/qualité&établissement/entreprise&\textcolor{red}{Rapporteur.e}\\ +NOM&Prénom&grade/qualité&établissement/entreprise&\textcolor{red}{Rapporteur.e}\\ +NOM&Prénom&grade/qualité&établissement/entreprise&\textcolor{red}{Examinateur.rice}\\ +NOM&Prénom&grade/qualité&établissement/entreprise&\textcolor{red}{Examinateur.rice}\\ +&&&&\\ +NOM&Prénom&grade/qualité&établissement/entreprise&Directeur.rice de thèse\\ +NOM&Prénom&grade/qualité&établissement/entreprise&\textcolor{red}{Co-directeur.rice de thèse}\\ +NOM&Prénom&grade/qualité&établissement/entreprise&\textcolor{red}{Invité.e}\\ +\end{tabular} + + + +\end{titlepage} diff --git a/macros.tex b/macros.tex new file mode 100644 index 0000000..4a4fa69 --- /dev/null +++ b/macros.tex @@ -0,0 +1,4 @@ + +\newcommand{\AIA}{\textsc{AdaptAIA}\xspace} +\newcommand{\AIAHard}{\textsc{AdaptAIA-H}\xspace} +\newcommand{\AIASoft}{\textsc{AdaptAIA-S}\xspace} diff --git a/main.pdf b/main.pdf index eb83a0b..735118c 100644 Binary files a/main.pdf and b/main.pdf differ diff --git a/main.tex b/main.tex index 46c5c0d..8270611 100644 --- a/main.tex +++ b/main.tex @@ -31,7 +31,7 @@ breaklines=true %\input{aia/00macros} \input{theorem} - +\input{macros} \input{tikz_assets/data} \input{tikz_assets/param} @@ -59,8 +59,10 @@ breaklines=true \end{titlepage} \tableofcontents +\chapter*{Remerciements} +\input{remerciements} \chapter*{Avertissement} -\input{contexte/avertissement} +\input{avertissement} \chapter{Introduction} \section{Qu'est-ce que l'Intelligence Artificielle ?} \label{sec:contexte-ckoi} diff --git a/partenaire.png b/partenaire.png new file mode 100644 index 0000000..8c8fa9f Binary files /dev/null and b/partenaire.png differ diff --git a/remerciements.tex b/remerciements.tex new file mode 100644 index 0000000..225a1a0 --- /dev/null +++ b/remerciements.tex @@ -0,0 +1,24 @@ +Merci à ma épouse, Emeline, pour son soutien, ses conseils, ses rélectures de mon orthopgraphe et pour m'avoir aidé avec le Théorème~\ref{th:fini-em}. + +Merci à Antoine Boutet et Mathieu Cunche pour leur encadrement. + +Merci les copains Samuel, Thomas, Léo, Bastien, Rémi, Adrien, Nathan, Amine, Abhi. + +Merci à toute l'équipe Privatics de l'INRIA pour les super séminaires toujour passionants. + +Merci à Frederic LeMouel, à Linda Soumari, et à tout le laboratoir CITI de l'INSA Lyon pour leur accompagnement. + +Merci à Sébastien Gambs pour son acceuil chaleureux à l'Université de Québec à Montréal. + +Merci à Cécile Mercadier et Clément Marteau d'avoir cru en moi. + +Merci à Mr.Noyer, Romain Bondil, Ludovic Menneteau, Bijan Mohammadi et Andro Mikelic ainsi que tous les enseignants qui ont su me montrer la beauté des mathématiques. + +Merci à ma mère Joëlle et mon père Pieter pour ne m'avoir jamais laché. + +Merci à ma petite soeur Claire pour avoir activement contribué à faire de moi qui je suis. + +Merci à Maryse et Jean-Claude pour leur bienveillance. + +Merci à Raclette et Cookie pour leur mignonerie. + diff --git a/synthetic/IEEEtran.cls b/synthetic/IEEEtran.cls new file mode 100644 index 0000000..8d2b1c6 --- /dev/null +++ b/synthetic/IEEEtran.cls @@ -0,0 +1,6347 @@ +%% +%% IEEEtran.cls 2015/08/26 version V1.8b +%% +%% This is the IEEEtran LaTeX class for authors of the Institute of +%% Electrical and Electronics Engineers (IEEE) Transactions journals and +%% conferences. +%% +%% Support sites: +%% http://www.michaelshell.org/tex/ieeetran/ +%% http://www.ctan.org/pkg/ieeetran +%% and +%% http://www.ieee.org/ +%% +%% Based on the original 1993 IEEEtran.cls, but with many bug fixes +%% and enhancements (from both JVH and MDS) over the 1996/7 version. +%% +%% +%% Contributors: +%% Gerry Murray (1993), Silvano Balemi (1993), +%% Jon Dixon (1996), Peter N"uchter (1996), +%% Juergen von Hagen (2000), and Michael Shell (2001-2014) +%% +%% +%% Copyright (c) 1993-2000 by Gerry Murray, Silvano Balemi, +%% Jon Dixon, Peter N"uchter, +%% Juergen von Hagen +%% and +%% Copyright (c) 2001-2015 by Michael Shell +%% +%% Current maintainer (V1.3 to V1.8b): Michael Shell +%% See: +%% http://www.michaelshell.org/ +%% for current contact information. +%% +%% Special thanks to Peter Wilson (CUA) and Donald Arseneau +%% for allowing the inclusion of the \@ifmtarg command +%% from their ifmtarg LaTeX package. +%% +%%************************************************************************* +%% Legal Notice: +%% This code is offered as-is without any warranty either expressed or +%% implied; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE! +%% User assumes all risk. +%% In no event shall the IEEE or any contributor to this code be liable for +%% any damages or losses, including, but not limited to, incidental, +%% consequential, or any other damages, resulting from the use or misuse +%% of any information contained here. +%% +%% All comments are the opinions of their respective authors and are not +%% necessarily endorsed by the IEEE. +%% +%% This work is distributed under the LaTeX Project Public License (LPPL) +%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used, +%% distributed and modified. A copy of the LPPL, version 1.3, is included +%% in the base LaTeX documentation of all distributions of LaTeX released +%% 2003/12/01 or later. +%% Retain all contribution notices and credits. +%% ** Modified files should be clearly indicated as such, including ** +%% ** renaming them and changing author support contact information. ** +%% +%% File list of work: IEEEtran.cls, IEEEtran_HOWTO.pdf, bare_adv.tex, +%% bare_conf.tex, bare_jrnl.tex, bare_conf_compsoc.tex, +%% bare_jrnl_compsoc.tex +%% +%% Major changes to the user interface should be indicated by an +%% increase in the version numbers. If a version is a beta, it will +%% be indicated with a BETA suffix, i.e., 1.4 BETA. +%% Small changes can be indicated by appending letters to the version +%% such as "IEEEtran_v14a.cls". +%% In all cases, \Providesclass, any \typeout messages to the user, +%% \IEEEtransversionmajor and \IEEEtransversionminor must reflect the +%% correct version information. +%% The changes should also be documented via source comments. +%%************************************************************************* +%% +% +% Available class options +% e.g., \documentclass[10pt,conference]{IEEEtran} +% +% *** choose only one from each category *** +% +% 9pt, 10pt, 11pt, 12pt +% Sets normal font size. The default is 10pt. +% +% conference, journal, technote, peerreview, peerreviewca +% determines format mode - conference papers, journal papers, +% correspondence papers (technotes), or peer review papers. The user +% should also select 9pt when using technote. peerreview is like +% journal mode, but provides for a single-column "cover" title page for +% anonymous peer review. The paper title (without the author names) is +% repeated at the top of the page after the cover page. For peer review +% papers, the \IEEEpeerreviewmaketitle command must be executed (will +% automatically be ignored for non-peerreview modes) at the place the +% cover page is to end, usually just after the abstract (keywords are +% not normally used with peer review papers). peerreviewca is like +% peerreview, but allows the author names to be entered and formatted +% as with conference mode so that author affiliation and contact +% information can be easily seen on the cover page. +% The default is journal. +% +% draft, draftcls, draftclsnofoot, final +% determines if paper is formatted as a widely spaced draft (for +% handwritten editor comments) or as a properly typeset final version. +% draftcls restricts draft mode to the class file while all other LaTeX +% packages (i.e., \usepackage{graphicx}) will behave as final - allows +% for a draft paper with visible figures, etc. draftclsnofoot is like +% draftcls, but does not display the date and the word "DRAFT" at the foot +% of the pages. If using one of the draft modes, the user will probably +% also want to select onecolumn. +% The default is final. +% +% letterpaper, a4paper, cspaper +% determines paper size: 8.5in X 11in, 210mm X 297mm or 7.875in X 10.75in. +% Changing the paper size in the standard journal and conference modes +% will not alter the typesetting of the document - only the margins will +% be affected. In particular, documents using the a4paper option will +% have reduced side margins (A4 is narrower than US letter) and a longer +% bottom margin (A4 is longer than US letter). For both cases, the top +% margins will be the same and the text will be horizontally centered. +% For the compsoc conference and draft modes, it is the margins that will +% remain constant, and thus the text area size will vary, with changes in +% the paper size. +% The cspaper option is the special ``trim'' paper size (7.875in x 10.75in) +% used in the actual publication of Computer Society journals. Under +% compsoc journal mode, this option does not alter the typesetting of the +% document. Authors should invoke the cspaper option only if requested to +% do so by the editors of the specific journal they are submitting to. +% For final submission to the IEEE, authors should generally use US letter +% (8.5 X 11in) paper unless otherwise instructed. Note that authors should +% ensure that all post-processing (ps, pdf, etc.) uses the same paper +% specificiation as the .tex document. Problems here are by far the number +% one reason for incorrect margins. IEEEtran will automatically set the +% default paper size under pdflatex (without requiring any change to +% pdftex.cfg), so this issue is more important to dvips users. Fix +% config.ps, config.pdf, or ~/.dvipsrc for dvips, or use the +% dvips -t papersize option instead as needed. For the cspaper option, +% the corresponding dvips paper name is "ieeecs". +% See the testflow documentation +% http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/testflow +% for more details on dvips paper size configuration. +% The default is letterpaper. +% +% oneside, twoside +% determines if layout follows single sided or two sided (duplex) +% printing. The only notable change is with the headings at the top of +% the pages. +% The default is oneside. +% +% onecolumn, twocolumn +% determines if text is organized into one or two columns per page. One +% column mode is usually used only with draft papers. +% The default is twocolumn. +% +% comsoc, compsoc, transmag +% Use the format of the IEEE Communications Society, IEEE Computer Society +% or IEEE Transactions on Magnetics, respectively. +% +% romanappendices +% Use the "Appendix I" convention when numbering appendices. IEEEtran.cls +% now defaults to Alpha "Appendix A" convention - the opposite of what +% v1.6b and earlier did. +% +% captionsoff +% disables the display of the figure/table captions. Some IEEE journals +% request that captions be removed and figures/tables be put on pages +% of their own at the end of an initial paper submission. The endfloat +% package can be used with this class option to achieve this format. +% +% nofonttune +% turns off tuning of the font interword spacing. Maybe useful to those +% not using the standard Times fonts or for those who have already "tuned" +% their fonts. +% The default is to enable IEEEtran to tune font parameters. +% +% +%---------- +% Available CLASSINPUTs provided (all are macros unless otherwise noted): +% \CLASSINPUTbaselinestretch +% \CLASSINPUTinnersidemargin +% \CLASSINPUToutersidemargin +% \CLASSINPUTtoptextmargin +% \CLASSINPUTbottomtextmargin +% +% Available CLASSINFOs provided: +% \ifCLASSINFOpdf (TeX if conditional) +% \CLASSINFOpaperwidth (macro) +% \CLASSINFOpaperheight (macro) +% \CLASSINFOnormalsizebaselineskip (length) +% \CLASSINFOnormalsizeunitybaselineskip (length) +% +% Available CLASSOPTIONs provided: +% all class option flags (TeX if conditionals) unless otherwise noted, +% e.g., \ifCLASSOPTIONcaptionsoff +% point size options provided as a single macro: +% \CLASSOPTIONpt +% which will be defined as 9, 10, 11, or 12 depending on the document's +% normalsize point size. +% also, class option peerreviewca implies the use of class option peerreview +% and classoption draft implies the use of class option draftcls + + + + + +\ProvidesClass{IEEEtran}[2015/08/26 V1.8b by Michael Shell] +\typeout{-- See the "IEEEtran_HOWTO" manual for usage information.} +\typeout{-- http://www.michaelshell.org/tex/ieeetran/} +\NeedsTeXFormat{LaTeX2e} + +% IEEEtran.cls version numbers, provided as of V1.3 +% These values serve as a way a .tex file can +% determine if the new features are provided. +% The version number of this IEEEtrans.cls can be obtained from +% these values. i.e., V1.4 +% KEEP THESE AS INTEGERS! i.e., NO {4a} or anything like that- +% (no need to enumerate "a" minor changes here) +\def\IEEEtransversionmajor{1} +\def\IEEEtransversionminor{8} + + +% hook to allow easy changeover to IEEEtran.cls/tools.sty error reporting +\def\@IEEEclspkgerror{\ClassError{IEEEtran}} + + +% These do nothing, but provide them like in article.cls +\newif\if@restonecol +\newif\if@titlepage + + +% class option conditionals +\newif\ifCLASSOPTIONonecolumn \CLASSOPTIONonecolumnfalse +\newif\ifCLASSOPTIONtwocolumn \CLASSOPTIONtwocolumntrue + +\newif\ifCLASSOPTIONoneside \CLASSOPTIONonesidetrue +\newif\ifCLASSOPTIONtwoside \CLASSOPTIONtwosidefalse + +\newif\ifCLASSOPTIONfinal \CLASSOPTIONfinaltrue +\newif\ifCLASSOPTIONdraft \CLASSOPTIONdraftfalse +\newif\ifCLASSOPTIONdraftcls \CLASSOPTIONdraftclsfalse +\newif\ifCLASSOPTIONdraftclsnofoot \CLASSOPTIONdraftclsnofootfalse + +\newif\ifCLASSOPTIONpeerreview \CLASSOPTIONpeerreviewfalse +\newif\ifCLASSOPTIONpeerreviewca \CLASSOPTIONpeerreviewcafalse + +\newif\ifCLASSOPTIONjournal \CLASSOPTIONjournaltrue +\newif\ifCLASSOPTIONconference \CLASSOPTIONconferencefalse +\newif\ifCLASSOPTIONtechnote \CLASSOPTIONtechnotefalse + +\newif\ifCLASSOPTIONnofonttune \CLASSOPTIONnofonttunefalse + +\newif\ifCLASSOPTIONcaptionsoff \CLASSOPTIONcaptionsofffalse + +\newif\ifCLASSOPTIONcomsoc \CLASSOPTIONcomsocfalse +\newif\ifCLASSOPTIONcompsoc \CLASSOPTIONcompsocfalse +\newif\ifCLASSOPTIONtransmag \CLASSOPTIONtransmagfalse + +\newif\ifCLASSOPTIONromanappendices \CLASSOPTIONromanappendicesfalse + + +% class info conditionals + +% indicates if pdf (via pdflatex) output +\newif\ifCLASSINFOpdf \CLASSINFOpdffalse + + +% V1.6b internal flag to show if using a4paper +\newif\if@IEEEusingAfourpaper \@IEEEusingAfourpaperfalse +% V1.6b internal flag to show if using cspaper +\newif\if@IEEEusingcspaper \@IEEEusingcspaperfalse + + +% IEEEtran class scratch pad registers +% dimen +\newdimen\@IEEEtrantmpdimenA +\newdimen\@IEEEtrantmpdimenB +\newdimen\@IEEEtrantmpdimenC +% count +\newcount\@IEEEtrantmpcountA +\newcount\@IEEEtrantmpcountB +\newcount\@IEEEtrantmpcountC +% token list +\newtoks\@IEEEtrantmptoksA + +% we use \CLASSOPTIONpt so that we can ID the point size (even for 9pt docs) +% as well as LaTeX's \@ptsize to retain some compatability with some +% external packages +\def\@ptsize{0} +% LaTeX does not support 9pt, so we set \@ptsize to 0 - same as that of 10pt +\DeclareOption{9pt}{\def\CLASSOPTIONpt{9}\def\@ptsize{0}} +\DeclareOption{10pt}{\def\CLASSOPTIONpt{10}\def\@ptsize{0}} +\DeclareOption{11pt}{\def\CLASSOPTIONpt{11}\def\@ptsize{1}} +\DeclareOption{12pt}{\def\CLASSOPTIONpt{12}\def\@ptsize{2}} + + + +\DeclareOption{letterpaper}{\setlength{\paperwidth}{8.5in}% + \setlength{\paperheight}{11in}% + \@IEEEusingAfourpaperfalse + \@IEEEusingcspaperfalse + \def\CLASSOPTIONpaper{letter}% + \def\CLASSINFOpaperwidth{8.5in}% + \def\CLASSINFOpaperheight{11in}} + + +\DeclareOption{a4paper}{\setlength{\paperwidth}{210mm}% + \setlength{\paperheight}{297mm}% + \@IEEEusingAfourpapertrue + \@IEEEusingcspaperfalse + \def\CLASSOPTIONpaper{a4}% + \def\CLASSINFOpaperwidth{210mm}% + \def\CLASSINFOpaperheight{297mm}} + +% special paper option for compsoc journals +\DeclareOption{cspaper}{\setlength{\paperwidth}{7.875in}% + \setlength{\paperheight}{10.75in}% + \@IEEEusingcspapertrue + \@IEEEusingAfourpaperfalse + \def\CLASSOPTIONpaper{ieeecs}% + \def\CLASSINFOpaperwidth{7.875in}% + \def\CLASSINFOpaperheight{10.75in}} + +\DeclareOption{oneside}{\@twosidefalse\@mparswitchfalse + \CLASSOPTIONonesidetrue\CLASSOPTIONtwosidefalse} +\DeclareOption{twoside}{\@twosidetrue\@mparswitchtrue + \CLASSOPTIONtwosidetrue\CLASSOPTIONonesidefalse} + +\DeclareOption{onecolumn}{\CLASSOPTIONonecolumntrue\CLASSOPTIONtwocolumnfalse} +\DeclareOption{twocolumn}{\CLASSOPTIONtwocolumntrue\CLASSOPTIONonecolumnfalse} + +% If the user selects draft, then this class AND any packages +% will go into draft mode. +\DeclareOption{draft}{\CLASSOPTIONdrafttrue\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofootfalse} +% draftcls is for a draft mode which will not affect any packages +% used by the document. +\DeclareOption{draftcls}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofootfalse} +% draftclsnofoot is like draftcls, but without the footer. +\DeclareOption{draftclsnofoot}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofoottrue} +\DeclareOption{final}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclsfalse + \CLASSOPTIONdraftclsnofootfalse} + +\DeclareOption{journal}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournaltrue\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{conference}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencetrue\CLASSOPTIONtechnotefalse} + +\DeclareOption{technote}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotetrue} + +\DeclareOption{peerreview}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{peerreviewca}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcatrue + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{nofonttune}{\CLASSOPTIONnofonttunetrue} + +\DeclareOption{captionsoff}{\CLASSOPTIONcaptionsofftrue} + +\DeclareOption{comsoc}{\CLASSOPTIONcomsoctrue\CLASSOPTIONcompsocfalse\CLASSOPTIONtransmagfalse} + +\DeclareOption{compsoc}{\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsoctrue\CLASSOPTIONtransmagfalse} + +\DeclareOption{transmag}{\CLASSOPTIONtransmagtrue\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsocfalse} + +\DeclareOption{romanappendices}{\CLASSOPTIONromanappendicestrue} + + +% default to US letter paper, 10pt, twocolumn, one sided, final, journal +\ExecuteOptions{letterpaper,10pt,twocolumn,oneside,final,journal} +% overrride these defaults per user requests +\ProcessOptions + + + +%% -- Command Argument Scanning Support Functions -- + +% Sets the category codes for punctuation to their normal values. +% For local use with argument scanning. +\def\IEEEnormalcatcodespunct{\catcode`\!=12 \catcode`\,=12 \catcode`\:=12 +\catcode`\;=12 \catcode`\`=12 \catcode`\'=12 \catcode`\"=12 \catcode`\.=12 +\catcode`\/=12 \catcode`\?=12 \catcode`\*=12 \catcode`\+=12 \catcode`\-=12 +\catcode`\<=12 \catcode`\>=12 \catcode`\(=12 \catcode`\)=12 \catcode`\[=12 +\catcode`\]=12 \catcode`\==12 \catcode`\|=12} +% Sets the category codes for numbers to their normal values. +% For local use with argument scanning. +\def\IEEEnormalcatcodesnum{\catcode`\0=12 \catcode`\1=12 \catcode`\2=12 +\catcode`\3=12 \catcode`\4=12 \catcode`\5=12 \catcode`\6=12 \catcode`\7=12 +\catcode`\8=12 \catcode`\9=12} +% combined action of \IEEEnormalcatcodespunct and \IEEEnormalcatcodesnum +\def\IEEEnormalcatcodes{\IEEEnormalcatcodespunct\IEEEnormalcatcodesnum} + + +% usage: \@IEEEextracttoken*{} +% \@IEEEextracttoken fully expands its argument (which it then stores in +% \@IEEEextracttokenarg) via \edef and then the meaning of the first +% nonbrace (but including the empty group) token found is assigned via \let +% to \@IEEEextractedtoken as well as stored in the macro +% \@IEEEextractedtokenmacro. Tokens that would otherwise be discarded during +% the acquisition of the first are stored in \@IEEEextractedtokensdiscarded, +% however their original relative brace nesting depths are not guaranteed to +% be preserved. +% If the argument is empty, or if a first nonbrace token does not exist (or +% is an empty group), \@IEEEextractedtoken will be \relax and +% \@IEEEextractedtokenmacro and \@IEEEextractedtokensdiscarded will be empty. +% +% For example: +% \@IEEEextracttoken{{{ab}{cd}}{{ef}g}} +% results in: +% +% \@IEEEextracttokenarg ==> a macro containing {{ab}{cd}}{{ef}g} +% \@IEEEextractedtoken ==> the letter a +% \@IEEEextractedtokenmacro ==> a macro containing a +% \@IEEEextractedtokensdiscarded ==> a macro containing bcd{ef}g +% +% the *-star form, \@IEEEextracttoken*, does not expand its argument +% contents during processing. +\def\@IEEEextracttoken{\@ifstar{\let\@IEEEextracttokendef=\def\@@IEEEextracttoken}{\let\@IEEEextracttokendef=\edef\@@IEEEextracttoken}} + +\def\@@IEEEextracttoken#1{\@IEEEextracttokendef\@IEEEextracttokenarg{#1}\relax +\def\@IEEEextractedtokensdiscarded{}\relax % initialize to empty +% if the macro is unchanged after being acquired as a single undelimited argument +% with anything after it being stripped off as a delimited argument +% we know we have one token without any enclosing braces. loop until this is true. +\let\@IEEEextracttokencurgroup\@IEEEextracttokenarg +\loop + % trap case of an empty argument as this would cause a problem with + % \@@@IEEEextracttoken's first (nondelimited) argument acquisition + \ifx\@IEEEextracttokencurgroup\@empty + \def\@IEEEextractedtokenmacro{}\relax + \else + \expandafter\@@@IEEEextracttoken\@IEEEextracttokencurgroup\@IEEEgeneralsequenceDELIMITER\relax + \fi + \ifx\@IEEEextractedtokenmacro\@IEEEextracttokencurgroup + \else + \let\@IEEEextracttokencurgroup=\@IEEEextractedtokenmacro +\repeat +% we can safely do a \let= here because there should be at most one token +% the relax is needed to handle the case of no token found +\expandafter\let\expandafter\@IEEEextractedtoken\@IEEEextractedtokenmacro\relax} + +\def\@@@IEEEextracttoken#1#2\@IEEEgeneralsequenceDELIMITER{\def\@IEEEextractedtokenmacro{#1}\relax +\def\@@IEEEextractedtokensdiscarded{#2}\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter +\@IEEEextractedtokensdiscarded\expandafter\expandafter\expandafter +{\expandafter\@@IEEEextractedtokensdiscarded\@IEEEextractedtokensdiscarded}} +%% +%% -- End of Command Argument Scanning Support Functions -- + + + +% Computer Society conditional execution command +\long\def\@IEEEcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\relax#1\relax\fi\relax} +% inverse +\long\def\@IEEEnotcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\else\relax#1\relax\fi\relax} +% compsoc conference +\long\def\@IEEEcompsocconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\relax#1\relax\fi\fi\relax} +% compsoc not conference +\long\def\@IEEEcompsocnotconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\else\relax#1\relax\fi\fi\relax} + + +% comsoc verify that newtxmath, mtpro2, mt11p or mathtime has been loaded +\def\@IEEEcomsocverifymathfont{\typeout{-- Verifying Times compatible math font.}\relax + \@ifpackageloaded{newtxmath}{\typeout{-- newtxmath loaded, OK.}}{\@@IEEEcomsocverifymathfont}} +\def\@@IEEEcomsocverifymathfont{\@ifpackageloaded{mtpro2}{\typeout{-- mtpro2 loaded, OK.}}{\@@@IEEEcomsocverifymathfont}} +\def\@@@IEEEcomsocverifymathfont{\@ifpackageloaded{mt11p}{\typeout{-- mt11p2 loaded, OK.}}{\@@@@IEEEcomsocverifymathfont}} +\def\@@@@IEEEcomsocverifymathfont{\@ifpackageloaded{mathtime}{\typeout{-- mathtime loaded, OK.}}{\@IEEEcomsocenforcemathfont}} + +% comsoc, if a Times math font was not loaded by user, enforce it +\def\@IEEEcomsocenforcemathfont{\typeout{** Times compatible math font not found, forcing.}\relax +\IfFileExists{newtxmath.sty}{\typeout{-- Found newtxmath, loading.}\RequirePackage{newtxmath}}{\@@IEEEcomsocenforcemathfont}} +\def\@@IEEEcomsocenforcemathfont{\IfFileExists{mtpro2.sty}{\typeout{-- Found mtpro2, loading.}\RequirePackage{mtpro2}}{\@@@IEEEcomsocenforcemathfont}} +\def\@@@IEEEcomsocenforcemathfont{\IfFileExists{mt11p.sty}{\typeout{-- Found mt11p, loading.}\RequirePackage{mt11p}}{\@@@@IEEEcomsocenforcemathfont}} +\def\@@@@IEEEcomsocenforcemathfont{\IfFileExists{mathtime.sty}{\typeout{-- Found mathtime, loading.}\RequirePackage{mathtime}}{\@@@@@IEEEcomsocenforcemathfont}} +% if no acceptable Times math font package found, error with newtxmath requirement +\def\@@@@@IEEEcomsocenforcemathfont{\typeout{** No Times compatible math font package found. newtxmath is required.}\RequirePackage{newtxmath}} + + +\ifCLASSOPTIONcomsoc + % ensure that if newtxmath is used, the cmintegrals option is also invoked + \PassOptionsToPackage{cmintegrals}{newtxmath} + % comsoc requires a Times like math font + % ensure this requirement is satisfied at document start + \AtBeginDocument{\@IEEEcomsocverifymathfont} +\fi + + + +% The IEEE uses Times Roman font, so we'll default to Times. +% These three commands make up the entire times.sty package. +\renewcommand{\sfdefault}{phv} +\renewcommand{\rmdefault}{ptm} +\renewcommand{\ttdefault}{pcr} + +% V1.7 compsoc nonconference papers, use Palatino/Palladio as the main text font, +% not Times Roman. +\@IEEEcompsocnotconfonly{\renewcommand{\rmdefault}{ppl}} + +% enable the selected main text font +\normalfont\selectfont + + +\ifCLASSOPTIONcomsoc + \typeout{-- Using IEEE Communications Society mode.} +\fi + +\ifCLASSOPTIONcompsoc + \typeout{-- Using IEEE Computer Society mode.} +\fi + + +% V1.7 conference notice message hook +\def\@IEEEconsolenoticeconference{\typeout{}% +\typeout{** Conference Paper **}% +\typeout{Before submitting the final camera ready copy, remember to:}% +\typeout{}% +\typeout{ 1. Manually equalize the lengths of two columns on the last page}% +\typeout{ of your paper;}% +\typeout{}% +\typeout{ 2. Ensure that any PostScript and/or PDF output post-processing}% +\typeout{ uses only Type 1 fonts and that every step in the generation}% +\typeout{ process uses the appropriate paper size.}% +\typeout{}} + + +% we can send console reminder messages to the user here +\AtEndDocument{\ifCLASSOPTIONconference\@IEEEconsolenoticeconference\fi} + + +% warn about the use of single column other than for draft mode +\ifCLASSOPTIONtwocolumn\else% + \ifCLASSOPTIONdraftcls\else% + \typeout{** ATTENTION: Single column mode is not typically used with IEEE publications.}% + \fi% +\fi + + +% V1.7 improved paper size setting code. +% Set pdfpage and dvips paper sizes. Conditional tests are similar to that +% of ifpdf.sty. Retain within {} to ensure tested macros are never altered, +% even if only effect is to set them to \relax. +% if \pdfoutput is undefined or equal to relax, output a dvips special +{\@ifundefined{pdfoutput}{\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}}{% +% pdfoutput is defined and not equal to \relax +% check for pdfpageheight existence just in case someone sets pdfoutput +% under non-pdflatex. If exists, set them regardless of value of \pdfoutput. +\@ifundefined{pdfpageheight}{\relax}{\global\pdfpagewidth\paperwidth +\global\pdfpageheight\paperheight}% +% if using \pdfoutput=0 under pdflatex, send dvips papersize special +\ifcase\pdfoutput +\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}% +\else +% we are using pdf output, set CLASSINFOpdf flag +\global\CLASSINFOpdftrue +\fi}} + +% let the user know the selected papersize +\typeout{-- Using \CLASSINFOpaperwidth\space x \CLASSINFOpaperheight\space +(\CLASSOPTIONpaper)\space paper.} + +\ifCLASSINFOpdf +\typeout{-- Using PDF output.} +\else +\typeout{-- Using DVI output.} +\fi + + +% The idea hinted here is for LaTeX to generate markleft{} and markright{} +% automatically for you after you enter \author{}, \journal{}, +% \journaldate{}, journalvol{}, \journalnum{}, etc. +% However, there may be some backward compatibility issues here as +% well as some special applications for IEEEtran.cls and special issues +% that may require the flexible \markleft{}, \markright{} and/or \markboth{}. +% We'll leave this as an open future suggestion. +%\newcommand{\journal}[1]{\def\@journal{#1}} +%\def\@journal{} + + + +% pointsize values +% used with ifx to determine the document's normal size +\def\@IEEEptsizenine{9} +\def\@IEEEptsizeten{10} +\def\@IEEEptsizeeleven{11} +\def\@IEEEptsizetwelve{12} + + + +% FONT DEFINITIONS (No sizexx.clo file needed) +% V1.6 revised font sizes, displayskip values and +% revised normalsize baselineskip to reduce underfull vbox problems +% on the 58pc = 696pt = 9.5in text height we want +% normalsize #lines/column baselineskip (aka leading) +% 9pt 63 11.0476pt (truncated down) +% 10pt 58 12pt (exact) +% 11pt 52 13.3846pt (truncated down) +% 12pt 50 13.92pt (exact) +% + +% we need to store the nominal baselineskip for the given font size +% in case baselinestretch ever changes. +% this is a dimen, so it will not hold stretch or shrink +\newdimen\@IEEEnormalsizeunitybaselineskip +\@IEEEnormalsizeunitybaselineskip\baselineskip + + + +%% ******* WARNING! ******* +%% +%% Authors should not alter font sizes, baselineskip ("leading"), +%% margins or other spacing values in an attempt to squeeze more +%% material on each page. +%% +%% The IEEE's own typesetting software will restore the correct +%% values when re-typesetting/proofing the submitted document, +%% possibly resulting in unexpected article over length charges. +%% +%% ******* WARNING! ******* + + +% 9pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\typeout{-- This is a 9 point document.} +\def\normalsize{\@setfontsize{\normalsize}{9}{11.0476pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.0476pt} +\normalsize +\abovedisplayskip 1.5ex plus 3pt minus 1pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 3pt +\belowdisplayshortskip 1.5ex plus 3pt minus 1pt +\def\small{\@setfontsize{\small}{8.5}{10pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}} +\def\tiny{\@setfontsize{\tiny}{5}{6pt}} +% sublargesize is the same as large - 10pt +\def\sublargesize{\@setfontsize{\sublargesize}{10}{12pt}} +\def\large{\@setfontsize{\large}{10}{12pt}} +\def\Large{\@setfontsize{\Large}{12}{14pt}} +\def\LARGE{\@setfontsize{\LARGE}{14}{17pt}} +\def\huge{\@setfontsize{\huge}{17}{20pt}} +\def\Huge{\@setfontsize{\Huge}{20}{24pt}} +\fi +% +% 10pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\typeout{-- This is a 10 point document.} +\def\normalsize{\@setfontsize{\normalsize}{10}{12.00pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{12pt} +\normalsize +\abovedisplayskip 1.5ex plus 4pt minus 2pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4pt +\belowdisplayshortskip 1.5ex plus 4pt minus 2pt +\def\small{\@setfontsize{\small}{9}{10pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}} +\def\tiny{\@setfontsize{\tiny}{5}{6pt}} +% sublargesize is a tad smaller than large - 11pt +\def\sublargesize{\@setfontsize{\sublargesize}{11}{13.4pt}} +\def\large{\@setfontsize{\large}{12}{14pt}} +\def\Large{\@setfontsize{\Large}{14}{17pt}} +\def\LARGE{\@setfontsize{\LARGE}{17}{20pt}} +\def\huge{\@setfontsize{\huge}{20}{24pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi +% +% 11pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\typeout{-- This is an 11 point document.} +\def\normalsize{\@setfontsize{\normalsize}{11}{13.3846pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.3846pt} +\normalsize +\abovedisplayskip 1.5ex plus 5pt minus 3pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5pt +\belowdisplayshortskip 1.5ex plus 5pt minus 3pt +\def\small{\@setfontsize{\small}{10}{12pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}} +\def\tiny{\@setfontsize{\tiny}{6}{7pt}} +% sublargesize is the same as large - 12pt +\def\sublargesize{\@setfontsize{\sublargesize}{12}{14pt}} +\def\large{\@setfontsize{\large}{12}{14pt}} +\def\Large{\@setfontsize{\Large}{14}{17pt}} +\def\LARGE{\@setfontsize{\LARGE}{17}{20pt}} +\def\huge{\@setfontsize{\huge}{20}{24pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi +% +% 12pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\typeout{-- This is a 12 point document.} +\def\normalsize{\@setfontsize{\normalsize}{12}{13.92pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.92pt} +\normalsize +\abovedisplayskip 1.5ex plus 6pt minus 4pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6pt +\belowdisplayshortskip 1.5ex plus 6pt minus 4pt +\def\small{\@setfontsize{\small}{10}{12pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}} +\def\tiny{\@setfontsize{\tiny}{6}{7pt}} +% sublargesize is the same as large - 14pt +\def\sublargesize{\@setfontsize{\sublargesize}{14}{17pt}} +\def\large{\@setfontsize{\large}{14}{17pt}} +\def\Large{\@setfontsize{\Large}{17}{20pt}} +\def\LARGE{\@setfontsize{\LARGE}{20}{24pt}} +\def\huge{\@setfontsize{\huge}{22}{26pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi + + + +% V1.8a compsoc font sizes +% compsoc font sizes use bp "Postscript" point units (1/72in) +% rather than the traditional pt (1/72.27) +\ifCLASSOPTIONcompsoc +% -- compsoc defaults -- +% ** will override some of these values later ** +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{11bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\def\small{\@setfontsize{\small}{8.5bp}{10bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{8bp}{9bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{7bp}{8bp}} +\def\tiny{\@setfontsize{\tiny}{5bp}{6bp}} +% sublargesize is the same as large - 10bp +\def\sublargesize{\@setfontsize{\sublargesize}{10bp}{12bp}} +\def\large{\@setfontsize{\large}{10bp}{12bp}} +\def\Large{\@setfontsize{\Large}{12bp}{14bp}} +\def\LARGE{\@setfontsize{\LARGE}{14bp}{17bp}} +\def\huge{\@setfontsize{\huge}{17bp}{20bp}} +\def\Huge{\@setfontsize{\Huge}{20bp}{24bp}} +\fi +% +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\def\normalsize{\@setfontsize{\normalsize}{10bp}{12bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{12bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\def\small{\@setfontsize{\small}{9bp}{10bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{8bp}{9bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{7bp}{8bp}} +\def\tiny{\@setfontsize{\tiny}{5bp}{6bp}} +% sublargesize is a tad smaller than large - 11bp +\def\sublargesize{\@setfontsize{\sublargesize}{11bp}{13.5bp}} +\def\large{\@setfontsize{\large}{12bp}{14bp}} +\def\Large{\@setfontsize{\Large}{14bp}{17bp}} +\def\LARGE{\@setfontsize{\LARGE}{17bp}{20bp}} +\def\huge{\@setfontsize{\huge}{20bp}{24bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.5bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.5bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\def\small{\@setfontsize{\small}{10bp}{12bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{9bp}{10.5bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{8bp}{9bp}} +\def\tiny{\@setfontsize{\tiny}{6bp}{7bp}} +% sublargesize is the same as large - 12bp +\def\sublargesize{\@setfontsize{\sublargesize}{12bp}{14bp}} +\def\large{\@setfontsize{\large}{12bp}{14bp}} +\def\Large{\@setfontsize{\Large}{14bp}{17bp}} +\def\LARGE{\@setfontsize{\LARGE}{17bp}{20bp}} +\def\huge{\@setfontsize{\huge}{20bp}{24bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14bp}}% +\setlength{\@IEEEnormalsizeunitybaselineskip}{14bp}% +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\def\small{\@setfontsize{\small}{10bp}{12bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{9bp}{10.5bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{8bp}{9bp}} +\def\tiny{\@setfontsize{\tiny}{6bp}{7bp}} +% sublargesize is the same as large - 14bp +\def\sublargesize{\@setfontsize{\sublargesize}{14bp}{17bp}} +\def\large{\@setfontsize{\large}{14bp}{17bp}} +\def\Large{\@setfontsize{\Large}{17bp}{20bp}} +\def\LARGE{\@setfontsize{\LARGE}{20bp}{24bp}} +\def\huge{\@setfontsize{\huge}{22bp}{26bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% -- override defaults: compsoc journals use special normalsizes -- +\ifCLASSOPTIONconference +% +% compsoc conferences +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{10.8bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{10.8bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\fi +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\def\normalsize{\@setfontsize{\normalsize}{10bp}{11.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\fi +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\fi +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14.4bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{14.4bp} +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\fi +% +% compsoc nonconferences +\else +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{10.8bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{10.8bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\fi +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +% the official spec is 9.5bp with 11.4bp leading for 10pt, +% but measurements of proofs suggest upto 11.723bp leading +% here we'll use 11.54bp which gives 61 lines per column +% with the standard compsoc margins +\def\normalsize{\@setfontsize{\normalsize}{9.5bp}{11.54bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.54bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\fi +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\fi +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14.4bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{14.4bp} +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\fi +\fi\fi + + + + +% V1.6 The Computer Modern Fonts will issue a substitution warning for +% 24pt titles (24.88pt is used instead, but the default and correct +% Times font will scale exactly as needed) increase the substitution +% tolerance to turn off this warning. +% +% V1.8a, the compsoc bp font sizes can also cause bogus font substitution +% warnings with footnote or scriptsize math and the $\bullet$ itemized +% list of \IEEEcompsocitemizethanks. So, increase this to 1.5pt or more. +\def\fontsubfuzz{1.7bp} + + +% warn the user in case they forget to use the 9pt option with +% technote +\ifCLASSOPTIONtechnote% + \ifx\CLASSOPTIONpt\@IEEEptsizenine\else% + \typeout{** ATTENTION: Technotes are normally 9pt documents.}% + \fi% +\fi + + +% V1.7 +% Improved \textunderscore to provide a much better fake _ when used with +% OT1 encoding. Under OT1, detect use of pcr or cmtt \ttfamily and use +% available true _ glyph for those two typewriter fonts. +\def\@IEEEstringptm{ptm} % Times Roman family +\def\@IEEEstringppl{ppl} % Palatino Roman family +\def\@IEEEstringphv{phv} % Helvetica Sans Serif family +\def\@IEEEstringpcr{pcr} % Courier typewriter family +\def\@IEEEstringcmtt{cmtt} % Computer Modern typewriter family +\DeclareTextCommandDefault{\textunderscore}{\leavevmode +\ifx\f@family\@IEEEstringpcr\string_\else +\ifx\f@family\@IEEEstringcmtt\string_\else +\ifx\f@family\@IEEEstringptm\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else +\ifx\f@family\@IEEEstringppl\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else +\ifx\f@family\@IEEEstringphv\kern -0.03em\vbox{\hrule\@width 0.62em\@height 0.52pt\kern -0.33ex}\kern -0.03em\else +\kern 0.09em\vbox{\hrule\@width 0.6em\@height 0.44pt\kern -0.63pt\kern -0.42ex}\kern 0.09em\fi\fi\fi\fi\fi\relax} + + + + +% set the default \baselinestretch +\def\baselinestretch{1} +\ifCLASSOPTIONdraftcls + \def\baselinestretch{1.5}% default baselinestretch for draft modes +\fi + + +% process CLASSINPUT baselinestretch +\ifx\CLASSINPUTbaselinestretch\@IEEEundefined +\else + \edef\baselinestretch{\CLASSINPUTbaselinestretch} % user CLASSINPUT override + \typeout{** ATTENTION: Overriding \string\baselinestretch\space to + \baselinestretch\space via \string\CLASSINPUT.} +\fi + +\small\normalsize % make \baselinestretch take affect + + + + +% store the normalsize baselineskip +\newdimen\CLASSINFOnormalsizebaselineskip +\CLASSINFOnormalsizebaselineskip=\baselineskip\relax +% and the normalsize unity (baselinestretch=1) baselineskip +% we could save a register by giving the user access to +% \@IEEEnormalsizeunitybaselineskip. However, let's protect +% its read only internal status +\newdimen\CLASSINFOnormalsizeunitybaselineskip +\CLASSINFOnormalsizeunitybaselineskip=\@IEEEnormalsizeunitybaselineskip\relax +% store the nominal value of jot +\newdimen\IEEEnormaljot +\IEEEnormaljot=0.25\baselineskip\relax + +% set \jot +\jot=\IEEEnormaljot\relax + + + + +% V1.6, we are now going to fine tune the interword spacing +% The default interword glue for Times under TeX appears to use a +% nominal interword spacing of 25% (relative to the font size, i.e., 1em) +% a maximum of 40% and a minimum of 19%. +% For example, 10pt text uses an interword glue of: +% +% 2.5pt plus 1.49998pt minus 0.59998pt +% +% However, the IEEE allows for a more generous range which reduces the need +% for hyphenation, especially for two column text. Furthermore, the IEEE +% tends to use a little bit more nominal space between the words. +% The IEEE's interword spacing percentages appear to be: +% 35% nominal +% 23% minimum +% 50% maximum +% (They may even be using a tad more for the largest fonts such as 24pt.) +% +% for bold text, the IEEE increases the spacing a little more: +% 37.5% nominal +% 23% minimum +% 55% maximum + +% here are the interword spacing ratios we'll use +% for medium (normal weight) +\def\@IEEEinterspaceratioM{0.35} +\def\@IEEEinterspaceMINratioM{0.23} +\def\@IEEEinterspaceMAXratioM{0.50} + +% for bold +\def\@IEEEinterspaceratioB{0.375} +\def\@IEEEinterspaceMINratioB{0.23} +\def\@IEEEinterspaceMAXratioB{0.55} + + +% compsoc nonconference papers use Palatino, +% tweak settings to better match the proofs +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference\else +% for medium (normal weight) +\def\@IEEEinterspaceratioM{0.28} +\def\@IEEEinterspaceMINratioM{0.21} +\def\@IEEEinterspaceMAXratioM{0.47} +% for bold +\def\@IEEEinterspaceratioB{0.305} +\def\@IEEEinterspaceMINratioB{0.21} +\def\@IEEEinterspaceMAXratioB{0.52} +\fi\fi + + +% command to revise the interword spacing for the current font under TeX: +% \fontdimen2 = nominal interword space +% \fontdimen3 = interword stretch +% \fontdimen4 = interword shrink +% since all changes to the \fontdimen are global, we can enclose these commands +% in braces to confine any font attribute or length changes +\def\@@@IEEEsetfontdimens#1#2#3{{% +\setlength{\@IEEEtrantmpdimenB}{\f@size pt}% grab the font size in pt, could use 1em instead. +\setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}% +\fontdimen2\font=\@IEEEtrantmpdimenA\relax +\addtolength{\@IEEEtrantmpdimenA}{-#2\@IEEEtrantmpdimenB}% +\fontdimen3\font=-\@IEEEtrantmpdimenA\relax +\setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}% +\addtolength{\@IEEEtrantmpdimenA}{-#3\@IEEEtrantmpdimenB}% +\fontdimen4\font=\@IEEEtrantmpdimenA\relax}} + +% revise the interword spacing for each font weight +\def\@@IEEEsetfontdimens{{% +\mdseries +\@@@IEEEsetfontdimens{\@IEEEinterspaceratioM}{\@IEEEinterspaceMAXratioM}{\@IEEEinterspaceMINratioM}% +\bfseries +\@@@IEEEsetfontdimens{\@IEEEinterspaceratioB}{\@IEEEinterspaceMAXratioB}{\@IEEEinterspaceMINratioB}% +}} + +% revise the interword spacing for each font shape +% \slshape is not often used for IEEE work and is not altered here. The \scshape caps are +% already a tad too large in the free LaTeX fonts (as compared to what the IEEE uses) so we +% won't alter these either. +\def\@IEEEsetfontdimens{{% +\normalfont +\@@IEEEsetfontdimens +\normalfont\itshape +\@@IEEEsetfontdimens +}} + +% command to revise the interword spacing for each font size (and shape +% and weight). Only the \rmfamily is done here as \ttfamily uses a +% fixed spacing and \sffamily is not used as the main text of IEEE papers. +\def\@IEEEtunefonts{{\selectfont\rmfamily +\tiny\@IEEEsetfontdimens +\scriptsize\@IEEEsetfontdimens +\footnotesize\@IEEEsetfontdimens +\small\@IEEEsetfontdimens +\normalsize\@IEEEsetfontdimens +\sublargesize\@IEEEsetfontdimens +\large\@IEEEsetfontdimens +\LARGE\@IEEEsetfontdimens +\huge\@IEEEsetfontdimens +\Huge\@IEEEsetfontdimens}} + +% if the nofonttune class option is not given, revise the interword spacing +% now - in case IEEEtran makes any default length measurements, and make +% sure all the default fonts are loaded +\ifCLASSOPTIONnofonttune\else +\@IEEEtunefonts +\fi + +% and again at the start of the document in case the user loaded different fonts +\AtBeginDocument{\ifCLASSOPTIONnofonttune\else\@IEEEtunefonts\fi} + + + + + +% -- V1.8a page setup commands -- + +% The default sample text for calculating margins +% Note that IEEE publications use \scriptsize for headers and footers. +\def\IEEEdefaultsampletext{\normalfont\normalsize gT} +\def\IEEEdefaultheadersampletext{\normalfont\scriptsize T}% IEEE headers default to uppercase +\def\IEEEdefaultfootersampletext{\normalfont\scriptsize gT} + + + +% usage: \IEEEsettextwidth{inner margin}{outer margin} +% Sets \textwidth to allow the specified inner and outer margins +% for the current \paperwidth. +\def\IEEEsettextwidth#1#2{\@IEEEtrantmpdimenA\paperwidth +\@IEEEtrantmpdimenB#1\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\@IEEEtrantmpdimenB#2\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\textwidth\@IEEEtrantmpdimenA} + + + +% usage: \IEEEsetsidemargin{mode: i, o, c, a}{margin/offset} +% Sets \oddsidemargin and \evensidemargin to yield the specified margin +% of the given mode. +% The available modes are: +% i = inner margin +% o = outer margin +% c = centered, with the given offset +% a = adjust the margins using the given offset +% For the offsets, positive values increase the inner margin. +% \textwidth should be set properly for the given margins before calling this +% function. +\def\IEEEsetsidemargin#1#2{\@IEEEtrantmpdimenA #2\relax +\@IEEEextracttoken{#1}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `i'}{Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}\relax + \let\@IEEEextractedtoken=i\relax + \def\@IEEEextractedtokenmacro{i}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetsidemargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken c\relax + \oddsidemargin\paperwidth + \advance\oddsidemargin by -\textwidth + \divide\oddsidemargin by 2\relax + \advance\oddsidemargin by -1in\relax + \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken o\relax + \oddsidemargin\paperwidth + \advance\oddsidemargin by -\textwidth + \advance\oddsidemargin by -\@IEEEtrantmpdimenA + \advance\oddsidemargin by -1in\relax +\else + \if\@IEEEextractedtoken i\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `i'}% + {Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}% + \fi + \oddsidemargin\@IEEEtrantmpdimenA + \advance\oddsidemargin by -1in\relax +\fi\fi\fi +% odd and even side margins both mean "inner" for single sided pages +\evensidemargin\oddsidemargin +% but are mirrors of each other when twosided is in effect +\if@twoside + \evensidemargin\paperwidth + \advance\evensidemargin by -\textwidth + \advance\evensidemargin by -\oddsidemargin + % have to compensate for both the builtin 1in LaTex offset + % and the fact we already subtracted this offset from \oddsidemargin + \advance\evensidemargin -2in\relax +\fi} + + + +% usage: \IEEEsettextheight[sample text]{top text margin}{bottom text margin} +% Sets \textheight based on the specified top margin and bottom margin. +% Takes into consideration \paperheight, \topskip, and (by default) the +% the actual height and depth of the \IEEEdefaultsampletext text. +\def\IEEEsettextheight{\@ifnextchar [{\@IEEEsettextheight}{\@IEEEsettextheight[\IEEEdefaultsampletext]}} +\def\@IEEEsettextheight[#1]#2#3{\textheight\paperheight\relax + \@IEEEtrantmpdimenA #2\relax + \advance \textheight by -\@IEEEtrantmpdimenA% subtract top margin + \@IEEEtrantmpdimenA #3\relax + \advance \textheight by -\@IEEEtrantmpdimenA% subtract bottom margin + \advance \textheight by \topskip% add \topskip + % subtract off everything above the top, and below the bottom, baselines + \settoheight{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance \textheight by -\@IEEEtrantmpdimenA + \settodepth{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance \textheight by -\@IEEEtrantmpdimenA} + + + +\newdimen\IEEEquantizedlength +\IEEEquantizedlength 0sp\relax +\newdimen\IEEEquantizedlengthdiff +\IEEEquantizedlengthdiff 0sp\relax +\def\IEEEquantizedlengthint{0} + +% usage: \IEEEquantizelength{mode: d, c, i}{base unit}{length} +% Sets the length \IEEEquantizedlength to be an integer multiple of the given +% (nonzero) base unit such that \IEEEquantizedlength approximates the given +% length. +% \IEEEquantizedlengthdiff is a length equal to the difference between the +% \IEEEquantizedlength and the given length. +% \IEEEquantizedlengthint is a macro containing the integer number of base units +% in \IEEEquantizedlength. +% i.e., \IEEEquantizedlength = \IEEEquantizedlengthint * base unit +% The mode determines how \IEEEquantizedlength is quantized: +% d = always decrease (always round down \IEEEquantizeint) +% c = use the closest match +% i = always increase (always round up \IEEEquantizeint) +% In anycase, if the given length is already quantized, +% \IEEEquantizedlengthdiff will be set to zero. +\def\IEEEquantizelength#1#2#3{\begingroup +% work in isolation so as not to externally disturb the \@IEEEtrantmp +% variables +% load the argument values indirectly via \IEEEquantizedlengthdiff +% in case the user refers to our \@IEEEtrantmpdimenX, \IEEEquantizedlength, +% etc. in the arguments. we also will work with these as counters, +% i.e., in sp units +% A has the base unit +\IEEEquantizedlengthdiff #2\relax\relax\relax\relax +\@IEEEtrantmpcountA\IEEEquantizedlengthdiff +% B has the input length +\IEEEquantizedlengthdiff #3\relax\relax\relax\relax +\@IEEEtrantmpcountB\IEEEquantizedlengthdiff +\@IEEEtrantmpdimenA\the\@IEEEtrantmpcountA sp\relax +\@IEEEtrantmpdimenB\the\@IEEEtrantmpcountB sp\relax +% \@IEEEtrantmpcountC will have the quantized int +% \IEEEquantizedlength will have the quantized length +% \@IEEEtrantmpdimenC will have the quantized diff +% initialize them to zero as this is what will be +% exported if an error occurs +\@IEEEtrantmpcountC 0\relax +\IEEEquantizedlength 0sp\relax +\@IEEEtrantmpdimenC 0sp\relax +% extract mode +\@IEEEextracttoken{#1}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + Defaulting to `d'}{Valid modes for \string\IEEEquantizelength\space are: d, c and i.}\relax + \let\@IEEEextractedtoken=d\relax + \def\@IEEEextractedtokenmacro{d}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEquantizelength\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% check for base unit is zero error +\ifnum\@IEEEtrantmpcountA=0\relax +\@IEEEclspkgerror{Base unit is zero in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + \string\IEEEquantizedlength\space and \string\IEEEquantizedlengthdiff\space are set to zero}{Division by zero is not allowed.}\relax +\else% base unit is nonzero + % \@IEEEtrantmpcountC carries the number of integer units + % in the quantized length (integer length \ base) + \@IEEEtrantmpcountC\@IEEEtrantmpcountB\relax + \divide\@IEEEtrantmpcountC by \@IEEEtrantmpcountA\relax + % \IEEEquantizedlength has the (rounded down) quantized length + % = base * int + \IEEEquantizedlength\@IEEEtrantmpdimenA\relax + \multiply\IEEEquantizedlength by \@IEEEtrantmpcountC\relax + % \@IEEEtrantmpdimenC has the difference + % = quantized length - length + \@IEEEtrantmpdimenC\IEEEquantizedlength\relax + \advance\@IEEEtrantmpdimenC by -\@IEEEtrantmpdimenB\relax + % trap special case of length being already quantized + % to avoid a roundup under i option + \ifdim\@IEEEtrantmpdimenC=0sp\relax + \else % length not is already quantized + % set dimenA to carry the upper quantized (absolute value) difference: + % quantizedlength + base - length + \advance\@IEEEtrantmpdimenA by \IEEEquantizedlength\relax + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB\relax + % set dimenB to carry the lower quantized (absolute value) difference: + % length - quantizedlength + \advance\@IEEEtrantmpdimenB by -\IEEEquantizedlength\relax + % handle each mode + \if\@IEEEextractedtoken c\relax + % compare upper and lower amounts, select upper if lower > upper + \ifdim\@IEEEtrantmpdimenB>\@IEEEtrantmpdimenA\relax + % use upper + \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax + \advance\@IEEEtrantmpcountC by 1\relax + \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA + \else% <=. uselower + % no need to do anything for lower, use output values already setup + \fi + \else% not mode c + \if\@IEEEextractedtoken i\relax + % always round up under i mode + \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax + \advance\@IEEEtrantmpcountC by 1\relax + \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA + \else + \if\@IEEEextractedtoken d\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + Defaulting to `d'}% + {Valid modes for \string\IEEEquantizelength\space are: d, c, and i.}\relax + \fi % if d + % no need to do anything for d, use output values already setup + \fi\fi % if i, c + \fi % if length is already quantized +\fi% if base unit is zero +% globally assign the results to macros we use here to escape the enclosing +% group without needing to call \global on any of the \@IEEEtrantmp variables. +% \@IEEEtrantmpcountC has the quantized int +% \IEEEquantizedlength has the quantized length +% \@IEEEtrantmpdimenC has the quantized diff +\xdef\@IEEEquantizedlengthintmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlength\relax +\xdef\@IEEEquantizedlengthmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\@IEEEtrantmpdimenC\relax +\xdef\@IEEEquantizedlengthdiffmacro{\the\@IEEEtrantmpcountC}\relax +\endgroup +% locally assign the outputs here from the macros +\expandafter\IEEEquantizedlength\@IEEEquantizedlengthmacro sp\relax +\expandafter\IEEEquantizedlengthdiff\@IEEEquantizedlengthdiffmacro sp\relax +\edef\IEEEquantizedlengthint{\@IEEEquantizedlengthintmacro}\relax} + + + +\newdimen\IEEEquantizedtextheightdiff +\IEEEquantizedtextheightdiff 0sp\relax + +% usage: \IEEEquantizetextheight[base unit]{mode: d, c, i} +% Sets \textheight to be an integer multiple of the current \baselineskip +% (or the optionally specified base unit) plus the first (\topskip) line. +% \IEEEquantizedtextheightdiff is a length equal to the difference between +% the new quantized and original \textheight. +% \IEEEquantizedtextheightlpc is a macro containing the integer number of +% lines per column under the quantized \textheight. i.e., +% \textheight = \IEEEquantizedtextheightlpc * \baselineskip + \topskip +% The mode determines how \textheight is quantized: +% d = always decrease (always round down the number of lines per column) +% c = use the closest match +% i = always increase (always round up the number of lines per column) +% In anycase, if \textheight is already quantized, it will remain unchanged, +% and \IEEEquantizedtextheightdiff will be set to zero. +% Depends on: \IEEEquantizelength +\def\IEEEquantizetextheight{\@ifnextchar [{\@IEEEquantizetextheight}{\@IEEEquantizetextheight[\baselineskip]}} +\def\@IEEEquantizetextheight[#1]#2{\begingroup +% use our \IEEEquantizedtextheightdiff as a scratch pad +% we need to subtract off \topskip before quantization +\IEEEquantizedtextheightdiff\textheight +\advance\IEEEquantizedtextheightdiff by -\topskip\relax +\IEEEquantizelength{#2}{#1}{\IEEEquantizedtextheightdiff} +% add back \topskip line +\advance\IEEEquantizedlength by \topskip +\@IEEEtrantmpcountC\IEEEquantizedlengthint\relax +\advance\@IEEEtrantmpcountC by 1\relax +% globally assign the results to macros we use here to escape the enclosing +% group without needing to call \global on any of the \@IEEEtrantmp variables. +\xdef\@IEEEquantizedtextheightlpcmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlength\relax +\xdef\@IEEEquantizedtextheightmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlengthdiff\relax +\xdef\@IEEEquantizedtextheightdiffmacro{\the\@IEEEtrantmpcountC}\relax +\endgroup +% locally assign the outputs here from the macros +\textheight\@IEEEquantizedtextheightmacro sp\relax +\IEEEquantizedtextheightdiff\@IEEEquantizedtextheightdiffmacro sp\relax +\edef\IEEEquantizedtextheightlpc{\@IEEEquantizedtextheightlpcmacro}} + + + +% usage: \IEEEsettopmargin[sample text]{mode: t, b, c, a, q}{margin/offset} +% Sets \topmargin based on the specified vertical margin. +% Takes into consideration the base 1in offset, \headheight, \headsep, +% \topskip, and (by default) the the actual height (or, for the bottom, depth) +% of the \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin +% b = bottom margin +% c = vertically centered, with the given offset +% a = adjust the vertical margins using the given offset +% q = adjust the margins using \IEEEquantizedtextheightdiff and the given offset +% For the offsets, positive values increase the top margin. +% \headheight, \headsep, \topskip and \textheight should be set properly for the +% given margins before calling this function. +\def\IEEEsettopmargin{\@ifnextchar [{\@IEEEsettopmargin}{\@IEEEsettopmargin[\IEEEdefaultsampletext]}} +\def\@IEEEsettopmargin[#1]#2#3{\@IEEEtrantmpdimenA #3\relax +\@IEEEextracttoken{#2}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsettopmargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken q\relax + % we need to adjust by half the \IEEEquantizedtextheightdiff value + \@IEEEtrantmpdimenB\IEEEquantizedtextheightdiff\relax + \divide\@IEEEtrantmpdimenB by 2\relax + % a positive \IEEEquantizedtextheightdiff means we need to reduce \topmargin + % because \textheight has been lenghtened + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken c\relax + \topmargin\paperheight + \advance\topmargin by -\textheight + % \textheight includes \topskip, but we should not count topskip whitespace here, backout + \advance \topmargin by \topskip + \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \divide\topmargin by 2\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken b\relax + \topmargin\paperheight + \advance\topmargin by -\textheight + % \textheight includes \topskip, but we should not count topskip whitespace here, backout + \advance \topmargin by \topskip + \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \advance\topmargin by -\@IEEEtrantmpdimenA\relax +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax + \fi + \topmargin\@IEEEtrantmpdimenA\relax + \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by \@IEEEtrantmpdimenB\relax +\fi\fi % if t, b, c +% convert desired top margin into actual \topmargin +% this is not done for the q or a modes because they are only adjustments +\advance \topmargin by -\topskip +\advance \topmargin by -1in +\advance \topmargin by -\headheight +\advance \topmargin by -\headsep +\fi\fi % if q, a +} + + + +% usage: \IEEEsetheadermargin[header sample][text sample]{mode: t, b, c, a}{margin/offset} +% Differentially adjusts \topmargin and \headsep (such that their sum is unchanged) +% based on the specified header margin. +% Takes into consideration the base 1in offset, \headheight, \topskip, and (by default) +% the actual height (or depth) of the \IEEEdefaultheadersampletext and +% \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin (top of the header text to the top of the page) +% b = bottom margin (bottom of the header text to the top of the main text) +% c = vertically centered between the main text and the top of the page, +% with the given offset +% a = adjust the vertical position using the given offset +% For the offsets, positive values move the header downward. +% \headheight, \headsep, \topskip and \topmargin should be set properly before +% calling this function. +\def\IEEEsetheadermargin{\@ifnextchar [{\@IEEEsetheadermargin}{\@IEEEsetheadermargin[\IEEEdefaultheadersampletext]}} +\def\@IEEEsetheadermargin[#1]{\@ifnextchar [{\@@IEEEsetheadermargin[#1]}{\@@IEEEsetheadermargin[#1][\IEEEdefaultsampletext]}} +\def\@@IEEEsetheadermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax +\@IEEEextracttoken{#3}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsetheadermargin\space are: t, b, c, and a.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetheadermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + % No need to do anything here and can pass through the adjustment + % value as is. The end adjustment of \topmargin and \headsep will + % do all that is needed +\else +\if\@IEEEextractedtoken c\relax + % get the bottom margin + \@IEEEtrantmpdimenB\headsep\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \advance\@IEEEtrantmpdimenB by \topskip + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header bottom margin + % subtract from it the top header margin + \advance\@IEEEtrantmpdimenB -1in\relax % take into consideration the system 1in offset of the top margin + \advance\@IEEEtrantmpdimenB by -\topmargin + \advance\@IEEEtrantmpdimenB by -\headheight + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the difference between the bottom and top margins + % we need to adjust by half this amount to center the header + \divide\@IEEEtrantmpdimenB by 2\relax + % and add to offset + \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB +\else +\if\@IEEEextractedtoken b\relax + \@IEEEtrantmpdimenB\headsep\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \advance\@IEEEtrantmpdimenB by \topskip + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header bottom margin + % get the difference between the actual and the desired + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA + \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsetheadermargin\space are: t, b, c and a.}\relax + \fi + \@IEEEtrantmpdimenB 1in\relax % take into consideration the system 1in offset of the top margin + \advance\@IEEEtrantmpdimenB by \topmargin + \advance\@IEEEtrantmpdimenB by \headheight + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header top margin + % get the difference between the desired and the actual + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\fi\fi % if t, b, c +\fi % if a +% advance \topmargin by the needed amount and reduce \headsep by the same +% so as not to disturb the location of the main text +\advance\topmargin by \@IEEEtrantmpdimenA\relax +\advance\headsep by -\@IEEEtrantmpdimenA\relax +} + + + +% usage: \IEEEsetfootermargin[footer sample][text sample]{mode: t, b, c, a}{margin/offset} +% Adjusts \footskip based on the specified footer margin. +% Takes into consideration the base 1in offset, \paperheight, \headheight, +% \headsep, \textheight and (by default) the actual height (or depth) of the +% \IEEEdefaultfootersampletext and \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin (top of the footer text to the bottom of the main text) +% b = bottom margin (bottom of the footer text to the bottom of page) +% c = vertically centered between the main text and the bottom of the page, +% with the given offset +% a = adjust the vertical position using the given offset +% For the offsets, positive values move the footer downward. +% \headheight, \headsep, \topskip, \topmargin, and \textheight should be set +% properly before calling this function. +\def\IEEEsetfootermargin{\@ifnextchar [{\@IEEEsetfootermargin}{\@IEEEsetfootermargin[\IEEEdefaultfootersampletext]}} +\def\@IEEEsetfootermargin[#1]{\@ifnextchar [{\@@IEEEsetfootermargin[#1]}{\@@IEEEsetfootermargin[#1][\IEEEdefaultsampletext]}} +\def\@@IEEEsetfootermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax +\@IEEEextracttoken{#3}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsetfootermargin\space are: t, b, c, and a.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetfootermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + % No need to do anything here and can pass through the adjustment + % value as is. The end adjustment of \footskip will do all that + % is needed +\else +\if\@IEEEextractedtoken c\relax + % calculate the bottom margin + \@IEEEtrantmpdimenB 1in\relax % system 1in offset + \advance\@IEEEtrantmpdimenB\topmargin\relax + \advance\@IEEEtrantmpdimenB\headheight\relax + \advance\@IEEEtrantmpdimenB\headsep\relax + \advance\@IEEEtrantmpdimenB\textheight\relax + \advance\@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB + \@IEEEtrantmpdimenB\paperheight + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin + % now subtract off the footer top margin + \advance\@IEEEtrantmpdimenB -\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the difference between the bottom + % and top footer margins + % our adjustment must be half this value to center the footer + \divide\@IEEEtrantmpdimenB by 2\relax + % add to the offset + \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB +\else +\if\@IEEEextractedtoken b\relax + % calculate the bottom margin + \@IEEEtrantmpdimenB 1in\relax % system 1in offset + \advance\@IEEEtrantmpdimenB\topmargin\relax + \advance\@IEEEtrantmpdimenB\headheight\relax + \advance\@IEEEtrantmpdimenB\headsep\relax + \advance\@IEEEtrantmpdimenB\textheight\relax + \advance\@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB + \@IEEEtrantmpdimenB\paperheight + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin + % get the difference between the actual and the desired + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA + \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsetfootermargin\space are: t, b, c and a.}\relax + \fi + \@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer top margin + % get the difference between the desired and the actual + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\fi\fi % if t, b, c +\fi % if a +% advance \footskip by the needed amount +\advance\footskip by \@IEEEtrantmpdimenA\relax +} + +% -- End V1.8a page setup commands -- + + + + + +% V1.6 +% LaTeX is a little to quick to use hyphenations +% So, we increase the penalty for their use and raise +% the badness level that triggers an underfull hbox +% warning. The author may still have to tweak things, +% but the appearance will be much better "right out +% of the box" than that under V1.5 and prior. +% TeX default is 50 +\hyphenpenalty=750 +\ifCLASSOPTIONcompsoc +\hyphenpenalty 500 +\fi +% If we didn't adjust the interword spacing, 2200 might be better. +% The TeX default is 1000 +\hbadness=1350 +% The IEEE does not use extra spacing after punctuation +\frenchspacing + +% V1.7 increase this a tad to discourage equation breaks +\binoppenalty=1000 % default 700 +\relpenalty=800 % default 500 + +% v1.8a increase these to discourage widows and orphans +\clubpenalty=1000 % default 150 +\widowpenalty=1000 % default 150 +\displaywidowpenalty=1000 % default 50 + + +% margin note stuff +\marginparsep 10pt +\marginparwidth 20pt +\marginparpush 25pt + + +% if things get too close, go ahead and let them touch +\lineskip 0pt +\normallineskip 0pt +\lineskiplimit 0pt +\normallineskiplimit 0pt + +% The distance from the lower edge of the text body to the +% footline +\footskip 0.4in + +% normally zero, should be relative to font height. +% put in a little rubber to help stop some bad breaks (underfull vboxes) +\parskip 0ex plus 0.2ex minus 0.1ex + +\parindent 1.0em +\ifCLASSOPTIONcompsoc + \parindent 1.5em +\fi + +\headheight 12pt +\headsep 18pt +% use the normal font baselineskip +% so that \topskip is unaffected by changes in \baselinestretch +\topskip=\@IEEEnormalsizeunitybaselineskip + + +% V1.8 \maxdepth defaults to 4pt, but should be font size dependent +\maxdepth=0.5\@IEEEnormalsizeunitybaselineskip +\textheight 58pc % 9.63in, 696pt + +% set the default top margin to 58pt +% which results in a \topmargin of -49.59pt for 10pt documents +\IEEEsettopmargin{t}{58pt} +% tweak textheight to a perfect integer number of lines/column. +% standard is: 9pt/63 lpc; 10pt/58 lpc; 11pt/52 lpc; 12pt/50 lpc +\IEEEquantizetextheight{c} +% tweak top margin so that the error is shared equally at the top and bottom +\IEEEsettopmargin{q}{0sp} + + +\columnsep 1pc +\textwidth 43pc % 2 x 21pc + 1pc = 43pc + +% set the default side margins to center the text +\IEEEsetsidemargin{c}{0pt} + + +% adjust margins for default conference mode +\ifCLASSOPTIONconference + \textheight 9.25in % The standard for conferences (668.4975pt) + \IEEEsettopmargin{t}{0.75in} + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/61 lpc; 10pt/56 lpc; 11pt/50 lpc; 12pt/48 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} +\fi + + +% compsoc text sizes, margins and spacings +\ifCLASSOPTIONcompsoc + \columnsep 12bp + % CS specs for \textwdith are 6.875in + % \textwidth 6.875in + % however, measurements from proofs show they are using 3.5in columns + \textwidth 7in + \advance\textwidth by \columnsep + % set the side margins to center the text + \IEEEsetsidemargin{c}{0pt} + % top/bottom margins to center + % could just set \textheight to 9.75in for all the different paper sizes + % and then quantize, but we'll do it the long way here to allow for easy + % future per-paper size adjustments + \IEEEsettextheight{0.625in}{0.625in}% 11in - 2 * 0.625in = 9.75in is the standard text height for compsoc journals + \IEEEsettopmargin{t}{0.625in} + \if@IEEEusingcspaper + \IEEEsettextheight{0.5in}{0.5in}% 10.75in - 2 * 0.5in = 9.75in + \IEEEsettopmargin{t}{0.5in} + \fi + \if@IEEEusingAfourpaper + \IEEEsettextheight{24.675mm}{24.675mm}% 297mm - 2 * 24.675mm = 247.650mm (9.75in) + \IEEEsettopmargin{t}{24.675mm} + \fi + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/65 lpc; 10pt/61 lpc; 11pt/53 lpc; 12pt/49 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} + +% compsoc conference + \ifCLASSOPTIONconference + % compsoc conference use a larger value for columnsep + \columnsep 0.25in + \IEEEsettextwidth{0.75in}{0.75in} + % set the side margins to center the text (0.75in for letterpaper) + \IEEEsetsidemargin{c}{0pt} + % compsoc conferences want 1in top and bottom margin + \IEEEsettextheight{1in}{1in} + \IEEEsettopmargin{t}{1in} + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/58 lpc; 10pt/53 lpc; 11pt/48 lpc; 12pt/46 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} + \fi +\fi + + + +% draft mode settings override that of all other modes +% provides a nice 1in margin all around the paper and extra +% space between the lines for editor's comments +\ifCLASSOPTIONdraftcls + % we want 1in side margins regardless of paper type + \IEEEsettextwidth{1in}{1in} + \IEEEsetsidemargin{c}{0pt} + % want 1in top and bottom margins + \IEEEsettextheight{1in}{1in} + \IEEEsettopmargin{t}{1in} + % digitize textheight to be an integer number of lines. + % this may cause the top and bottom margins to be off a tad + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} +\fi + + + +% process CLASSINPUT inner/outer margin +% if inner margin defined, but outer margin not, set outer to inner. +\ifx\CLASSINPUTinnersidemargin\@IEEEundefined +\else + \ifx\CLASSINPUToutersidemargin\@IEEEundefined + \edef\CLASSINPUToutersidemargin{\CLASSINPUTinnersidemargin} + \fi +\fi + +\ifx\CLASSINPUToutersidemargin\@IEEEundefined +\else + % if outer margin defined, but inner margin not, set inner to outer. + \ifx\CLASSINPUTinnersidemargin\@IEEEundefined + \edef\CLASSINPUTinnersidemargin{\CLASSINPUToutersidemargin} + \fi + \IEEEsettextwidth{\CLASSINPUTinnersidemargin}{\CLASSINPUToutersidemargin} + \IEEEsetsidemargin{i}{\CLASSINPUTinnersidemargin} + \typeout{** ATTENTION: Overriding inner side margin to \CLASSINPUTinnersidemargin\space and + outer side margin to \CLASSINPUToutersidemargin\space via \string\CLASSINPUT.} +\fi + + + +% process CLASSINPUT top/bottom text margin +% if toptext margin defined, but bottomtext margin not, set bottomtext to toptext margin +\ifx\CLASSINPUTtoptextmargin\@IEEEundefined +\else + \ifx\CLASSINPUTbottomtextmargin\@IEEEundefined + \edef\CLASSINPUTbottomtextmargin{\CLASSINPUTtoptextmargin} + \fi +\fi + +\ifx\CLASSINPUTbottomtextmargin\@IEEEundefined +\else + % if bottomtext margin defined, but toptext margin not, set toptext to bottomtext margin + \ifx\CLASSINPUTtoptextmargin\@IEEEundefined + \edef\CLASSINPUTtoptextmargin{\CLASSINPUTbottomtextmargin} + \fi + \IEEEsettextheight{\CLASSINPUTtoptextmargin}{\CLASSINPUTbottomtextmargin} + \IEEEsettopmargin{t}{\CLASSINPUTtoptextmargin} + \typeout{** ATTENTION: Overriding top text margin to \CLASSINPUTtoptextmargin\space and + bottom text margin to \CLASSINPUTbottomtextmargin\space via \string\CLASSINPUT.} +\fi + + + +% default to center header and footer text in the margins +\IEEEsetheadermargin{c}{0pt} +\IEEEsetfootermargin{c}{0pt} + +% adjust header and footer positions for compsoc journals +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONjournal + \IEEEsetheadermargin{b}{\@IEEEnormalsizeunitybaselineskip} + \IEEEsetfootermargin{t}{\@IEEEnormalsizeunitybaselineskip} + \fi +\fi + + +% V1.8a display lines per column info message on user's console +\def\IEEEdisplayinfolinespercolumn{\@IEEEtrantmpdimenA=\textheight +% topskip represents only one line even if > baselineskip +\advance\@IEEEtrantmpdimenA by -1\topskip +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenA +\@IEEEtrantmpcountB=\@IEEEtrantmpdimenA +\divide\@IEEEtrantmpcountB by \baselineskip +% need to add one line to include topskip (first) line +\advance\@IEEEtrantmpcountB by 1 +% save lines per column value as text +\edef\@IEEEnumlinespercolumninfotxt{\the\@IEEEtrantmpcountB} +% backout topskip advance to allow direct \@IEEEtrantmpcountA comparison +\advance\@IEEEtrantmpcountB by -1 +% restore value as text height (without topskip) rather than just as number of lines +\multiply\@IEEEtrantmpcountB by \baselineskip +% is the column height an integer number of lines per column? +\ifnum\@IEEEtrantmpcountA=\@IEEEtrantmpcountB +\edef\@IEEEnumlinespercolumnexactinfotxt{exact} +\else +\@IEEEtrantmpdimenA\@IEEEtrantmpcountA sp\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpcountB sp\relax +\edef\@IEEEnumlinespercolumnexactinfotxt{approximate, difference = \the\@IEEEtrantmpdimenA} +\fi +\typeout{-- Lines per column: \@IEEEnumlinespercolumninfotxt\space (\@IEEEnumlinespercolumnexactinfotxt).}} +% delay execution till start of document to allow for user changes +\AtBeginDocument{\IEEEdisplayinfolinespercolumn} + + + +% LIST SPACING CONTROLS + +% Controls the amount of EXTRA spacing +% above and below \trivlist +% Both \list and IED lists override this. +% However, \trivlist will use this as will most +% things built from \trivlist like the \center +% environment. +\topsep 0.5\baselineskip + +% Controls the additional spacing around lists preceded +% or followed by blank lines. the IEEE does not increase +% spacing before or after paragraphs so it is set to zero. +% \z@ is the same as zero, but faster. +\partopsep \z@ + +% Controls the spacing between paragraphs in lists. +% The IEEE does not increase spacing before or after paragraphs +% so this is also zero. +% With IEEEtran.cls, global changes to +% this value DO affect lists (but not IED lists). +\parsep \z@ + +% Controls the extra spacing between list items. +% The IEEE does not put extra spacing between items. +% With IEEEtran.cls, global changes to this value DO affect +% lists (but not IED lists). +\itemsep \z@ + +% \itemindent is the amount to indent the FIRST line of a list +% item. It is auto set to zero within the \list environment. To alter +% it, you have to do so when you call the \list. +% However, the IEEE uses this for the theorem environment +% There is an alternative value for this near \leftmargini below +\itemindent -1em + +% \leftmargin, the spacing from the left margin of the main text to +% the left of the main body of a list item is set by \list. +% Hence this statement does nothing for lists. +% But, quote and verse do use it for indention. +\leftmargin 2em + +% we retain this stuff from the older IEEEtran.cls so that \list +% will work the same way as before. However, itemize, enumerate and +% description (IED) could care less about what these are as they +% all are overridden. +\leftmargini 2em +%\itemindent 2em % Alternative values: sometimes used. +%\leftmargini 0em +\leftmarginii 1em +\leftmarginiii 1.5em +\leftmarginiv 1.5em +\leftmarginv 1.0em +\leftmarginvi 1.0em +\labelsep 0.5em +\labelwidth \z@ + + +% The old IEEEtran.cls behavior of \list is retained. +% However, the new V1.3 IED list environments override all the +% @list stuff (\@listX is called within \list for the +% appropriate level just before the user's list_decl is called). +% \topsep is now 2pt as the IEEE puts a little extra space around +% lists - used by those non-IED macros that depend on \list. +% Note that \parsep and \itemsep are not redefined as in +% the sizexx.clo \@listX (which article.cls uses) so global changes +% of these values DO affect \list +% +\def\@listi{\leftmargin\leftmargini \topsep 2pt plus 1pt minus 1pt} +\let\@listI\@listi +\def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi% + \advance\labelwidth-\labelsep \topsep 2pt} + + +% The IEEE uses 5) not 5. +\def\labelenumi{\theenumi)} \def\theenumi{\arabic{enumi}} + +% The IEEE uses a) not (a) +\def\labelenumii{\theenumii)} \def\theenumii{\alph{enumii}} + +% The IEEE uses iii) not iii. +\def\labelenumiii{\theenumiii)} \def\theenumiii{\roman{enumiii}} + +% The IEEE uses A) not A. +\def\labelenumiv{\theenumiv)} \def\theenumiv{\Alph{enumiv}} + +% exactly the same as in article.cls +\def\p@enumii{\theenumi} +\def\p@enumiii{\theenumi(\theenumii)} +\def\p@enumiv{\p@enumiii\theenumiii} + +% itemized list label styles +\def\labelitemi{$\scriptstyle\bullet$} +\def\labelitemii{\textbf{--}} +\def\labelitemiii{$\ast$} +\def\labelitemiv{$\cdot$} + + + +% **** V1.3 ENHANCEMENTS **** +% Itemize, Enumerate and Description (IED) List Controls +% *************************** +% +% +% The IEEE seems to use at least two different values by +% which ITEMIZED list labels are indented to the right +% For The Journal of Lightwave Technology (JLT) and The Journal +% on Selected Areas in Communications (JSAC), they tend to use +% an indention equal to \parindent. For Transactions on Communications +% they tend to indent ITEMIZED lists a little more--- 1.3\parindent. +% We'll provide both values here for you so that you can choose +% which one you like in your document using a command such as: +% setlength{\IEEEilabelindent}{\IEEEilabelindentB} +\newdimen\IEEEilabelindentA +\IEEEilabelindentA \parindent + +\newdimen\IEEEilabelindentB +\IEEEilabelindentB 1.3\parindent +% However, we'll default to using \parindent +% which makes more sense to me +\newdimen\IEEEilabelindent +\IEEEilabelindent \IEEEilabelindentA + + +% This controls the default amount the enumerated list labels +% are indented to the right. +% Normally, this is the same as the paragraph indention +\newdimen\IEEEelabelindent +\IEEEelabelindent \parindent + +% This controls the default amount the description list labels +% are indented to the right. +% Normally, this is the same as the paragraph indention +\newdimen\IEEEdlabelindent +\IEEEdlabelindent \parindent + +% This is the value actually used within the IED lists. +% The IED environments automatically set its value to +% one of the three values above, so global changes do +% not have any effect +\newdimen\IEEElabelindent +\IEEElabelindent \parindent + +% The actual amount labels will be indented is +% \IEEElabelindent multiplied by the factor below +% corresponding to the level of nesting depth +% This provides a means by which the user can +% alter the effective \IEEElabelindent for deeper +% levels +% There may not be such a thing as correct "standard IEEE" +% values. What the IEEE actually does may depend on the specific +% circumstances. +% The first list level almost always has full indention. +% The second levels I've seen have only 75% of the normal indentation +% Three level or greater nestings are very rare. I am guessing +% that they don't use any indentation. +\def\IEEElabelindentfactori{1.0} % almost always one +\def\IEEElabelindentfactorii{0.75} % 0.0 or 1.0 may be used in some cases +\def\IEEElabelindentfactoriii{0.0} % 0.75? 0.5? 0.0? +\def\IEEElabelindentfactoriv{0.0} +\def\IEEElabelindentfactorv{0.0} +\def\IEEElabelindentfactorvi{0.0} + +% value actually used within IED lists, it is auto +% set to one of the 6 values above +% global changes here have no effect +\def\IEEElabelindentfactor{1.0} + +% This controls the default spacing between the end of the IED +% list labels and the list text, when normal text is used for +% the labels. +% compsoc uses a larger value here, but we'll set that later +% in the class so that this code block area can be extracted +% as-is for IEEEtrantools.sty +\newdimen\IEEEiednormlabelsep +\IEEEiednormlabelsep 0.6em + +% This controls the default spacing between the end of the IED +% list labels and the list text, when math symbols are used for +% the labels (nomenclature lists). The IEEE usually increases the +% spacing in these cases +\newdimen\IEEEiedmathlabelsep +\IEEEiedmathlabelsep 1.2em + +% This controls the extra vertical separation put above and +% below each IED list. the IEEE usually puts a little extra spacing +% around each list. However, this spacing is barely noticeable. +% compsoc uses a larger value here, but we'll set that later +% in the class so that this code block area can be extracted +% as-is for IEEEtrantools.sty +\newskip\IEEEiedtopsep +\IEEEiedtopsep 2pt plus 1pt minus 1pt + + +% This command is executed within each IED list environment +% at the beginning of the list. You can use this to set the +% parameters for some/all your IED list(s) without disturbing +% global parameters that affect things other than lists. +% i.e., renewcommand{\IEEEiedlistdecl}{\setlength{\labelsep}{5em}} +% will alter the \labelsep for the next list(s) until +% \IEEEiedlistdecl is redefined. +\def\IEEEiedlistdecl{\relax} + +% This command provides an easy way to set \leftmargin based +% on the \labelwidth, \labelsep and the argument \IEEElabelindent +% Usage: \IEEEcalcleftmargin{width-to-indent-the-label} +% output is in the \leftmargin variable, i.e., effectively: +% \leftmargin = argument + \labelwidth + \labelsep +% Note controlled spacing here, shield end of lines with % +\def\IEEEcalcleftmargin#1{\setlength{\leftmargin}{#1}% +\addtolength{\leftmargin}{\labelwidth}% +\addtolength{\leftmargin}{\labelsep}} + +% This command provides an easy way to set \labelwidth to the +% width of the given text. It is the same as +% \settowidth{\labelwidth}{label-text} +% and useful as a shorter alternative. +% Typically used to set \labelwidth to be the width +% of the longest label in the list +\def\IEEEsetlabelwidth#1{\settowidth{\labelwidth}{#1}} + +% When this command is executed, IED lists will use the +% IEEEiedmathlabelsep label separation rather than the normal +% spacing. To have an effect, this command must be executed via +% the \IEEEiedlistdecl or within the option of the IED list +% environments. +\def\IEEEusemathlabelsep{\setlength{\labelsep}{\IEEEiedmathlabelsep}} + +% A flag which controls whether the IED lists automatically +% calculate \leftmargin from \IEEElabelindent, \labelwidth and \labelsep +% Useful if you want to specify your own \leftmargin +% This flag must be set (\IEEEnocalcleftmargintrue or \IEEEnocalcleftmarginfalse) +% via the \IEEEiedlistdecl or within the option of the IED list +% environments to have an effect. +\newif\ifIEEEnocalcleftmargin +\IEEEnocalcleftmarginfalse + +% A flag which controls whether \IEEElabelindent is multiplied by +% the \IEEElabelindentfactor for each list level. +% This flag must be set via the \IEEEiedlistdecl or within the option +% of the IED list environments to have an effect. +\newif\ifIEEEnolabelindentfactor +\IEEEnolabelindentfactorfalse + + +% internal variable to indicate type of IED label +% justification +% 0 - left; 1 - center; 2 - right +\def\@IEEEiedjustify{0} + + +% commands to allow the user to control IED +% label justifications. Use these commands within +% the IED environment option or in the \IEEEiedlistdecl +% Note that changing the normal list justifications +% is nonstandard and the IEEE may not like it if you do so! +% I include these commands as they may be helpful to +% those who are using these enhanced list controls for +% other non-IEEE related LaTeX work. +% itemize and enumerate automatically default to right +% justification, description defaults to left. +\def\IEEEiedlabeljustifyl{\def\@IEEEiedjustify{0}}%left +\def\IEEEiedlabeljustifyc{\def\@IEEEiedjustify{1}}%center +\def\IEEEiedlabeljustifyr{\def\@IEEEiedjustify{2}}%right + + + + +% commands to save to and restore from the list parameter copies +% this allows us to set all the list parameters within +% the list_decl and prevent \list (and its \@list) +% from overriding any of our parameters +% V1.6 use \edefs instead of dimen's to conserve dimen registers +% Note controlled spacing here, shield end of lines with % +\def\@IEEEsavelistparams{\edef\@IEEEiedtopsep{\the\topsep}% +\edef\@IEEEiedlabelwidth{\the\labelwidth}% +\edef\@IEEEiedlabelsep{\the\labelsep}% +\edef\@IEEEiedleftmargin{\the\leftmargin}% +\edef\@IEEEiedpartopsep{\the\partopsep}% +\edef\@IEEEiedparsep{\the\parsep}% +\edef\@IEEEieditemsep{\the\itemsep}% +\edef\@IEEEiedrightmargin{\the\rightmargin}% +\edef\@IEEEiedlistparindent{\the\listparindent}% +\edef\@IEEEieditemindent{\the\itemindent}} + +% Note controlled spacing here +\def\@IEEErestorelistparams{\topsep\@IEEEiedtopsep\relax% +\labelwidth\@IEEEiedlabelwidth\relax% +\labelsep\@IEEEiedlabelsep\relax% +\leftmargin\@IEEEiedleftmargin\relax% +\partopsep\@IEEEiedpartopsep\relax% +\parsep\@IEEEiedparsep\relax% +\itemsep\@IEEEieditemsep\relax% +\rightmargin\@IEEEiedrightmargin\relax% +\listparindent\@IEEEiedlistparindent\relax% +\itemindent\@IEEEieditemindent\relax} + + +% v1.6b provide original LaTeX IED list environments +% note that latex.ltx defines \itemize and \enumerate, but not \description +% which must be created by the base classes +% save original LaTeX itemize and enumerate +\let\LaTeXitemize\itemize +\let\endLaTeXitemize\enditemize +\let\LaTeXenumerate\enumerate +\let\endLaTeXenumerate\endenumerate + +% provide original LaTeX description environment from article.cls +\newenvironment{LaTeXdescription} + {\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\endlist} +\newcommand*\descriptionlabel[1]{\hspace\labelsep + \normalfont\bfseries #1} + + +% override LaTeX's default IED lists +\def\itemize{\@IEEEitemize} +\def\enditemize{\@endIEEEitemize} +\def\enumerate{\@IEEEenumerate} +\def\endenumerate{\@endIEEEenumerate} +\def\description{\@IEEEdescription} +\def\enddescription{\@endIEEEdescription} + +% provide the user with aliases - may help those using packages that +% override itemize, enumerate, or description +\def\IEEEitemize{\@IEEEitemize} +\def\endIEEEitemize{\@endIEEEitemize} +\def\IEEEenumerate{\@IEEEenumerate} +\def\endIEEEenumerate{\@endIEEEenumerate} +\def\IEEEdescription{\@IEEEdescription} +\def\endIEEEdescription{\@endIEEEdescription} + + +% V1.6 we want to keep the IEEEtran IED list definitions as our own internal +% commands so they are protected against redefinition +\def\@IEEEitemize{\@ifnextchar[{\@@IEEEitemize}{\@@IEEEitemize[\relax]}} +\def\@IEEEenumerate{\@ifnextchar[{\@@IEEEenumerate}{\@@IEEEenumerate[\relax]}} +\def\@IEEEdescription{\@ifnextchar[{\@@IEEEdescription}{\@@IEEEdescription[\relax]}} +\def\@endIEEEitemize{\endlist} +\def\@endIEEEenumerate{\endlist} +\def\@endIEEEdescription{\endlist} + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran itemized list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEitemize[#1]{% + \ifnum\@itemdepth>3\relax\@toodeep\else% + \ifnum\@listdepth>5\relax\@toodeep\else% + \advance\@itemdepth\@ne% + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{2}% right justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEilabelindent% + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % calculate the label width + % the user can override this later if + % they specified a \labelwidth + \settowidth{\labelwidth}{\csname labelitem\romannumeral\the\@itemdepth\endcsname}% + \@IEEEsavelistparams% save our list parameters + \list{\csname\@itemitem\endcsname}{% + \@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % IEEElabelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}% + \fi}\fi\fi}% + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran enumerate list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEenumerate[#1]{% + \ifnum\@enumdepth>3\relax\@toodeep\else% + \ifnum\@listdepth>5\relax\@toodeep\else% + \advance\@enumdepth\@ne% + \edef\@enumctr{enum\romannumeral\the\@enumdepth}% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{2}% right justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEelabelindent% + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % calculate the label width + % We'll set it to the width suitable for all labels using + % normalfont 1) to 9) + % The user can override this later + \settowidth{\labelwidth}{9)}% + \@IEEEsavelistparams% save our list parameters + \list{\csname label\@enumctr\endcsname}{\usecounter{\@enumctr}% + \@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % IEEElabelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}% + \fi}\fi\fi}% + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran description list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEdescription[#1]{% + \ifnum\@listdepth>5\relax\@toodeep\else% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{0}% left justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEdlabelindent% + % assume normal labelsep + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % Bogus label width in case the user forgets + % to set it. + % TIP: If you want to see what a variable's width is you + % can use the TeX command \showthe\width-variable to + % display it on the screen during compilation + % (This might be helpful to know when you need to find out + % which label is the widest) + \settowidth{\labelwidth}{Hello}% + \@IEEEsavelistparams% save our list parameters + \list{}{\@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % labelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}\relax% + \fi}\fi} + +% v1.6b we use one makelabel that does justification as needed. +\def\@IEEEiedmakelabel#1{\relax\if\@IEEEiedjustify 0\relax +\makebox[\labelwidth][l]{\normalfont #1}\else +\if\@IEEEiedjustify 1\relax +\makebox[\labelwidth][c]{\normalfont #1}\else +\makebox[\labelwidth][r]{\normalfont #1}\fi\fi} + + +% compsoc uses a larger value for the normal labelsep +% and also extra spacing above and below each list +\ifCLASSOPTIONcompsoc + \IEEEiednormlabelsep 1.2em + \IEEEiedtopsep 6pt plus 3pt minus 3pt +\fi + + +% VERSE and QUOTE +% V1.7 define environments with newenvironment +\newenvironment{verse}{\let\\=\@centercr + \list{}{\itemsep\z@ \itemindent -1.5em \listparindent \itemindent + \rightmargin\leftmargin\advance\leftmargin 1.5em}\item\relax} + {\endlist} +\newenvironment{quotation}{\list{}{\listparindent 1.5em \itemindent\listparindent + \rightmargin\leftmargin \parsep 0pt plus 1pt}\item\relax} + {\endlist} +\newenvironment{quote}{\list{}{\rightmargin\leftmargin}\item\relax} + {\endlist} + + +% \titlepage +% provided only for backward compatibility. \maketitle is the correct +% way to create the title page. +\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \else \newpage \fi \thispagestyle{empty}\c@page\z@} +\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi} + +% standard values from article.cls +\arraycolsep 5pt +\arrayrulewidth .4pt +\doublerulesep 2pt + +\tabcolsep 6pt +\tabbingsep 0.5em + + +%% FOOTNOTES +% +%\skip\footins 10pt plus 4pt minus 2pt +% V1.6 respond to changes in font size +% space added above the footnotes (if present) +\skip\footins 0.9\baselineskip plus 0.4\baselineskip minus 0.2\baselineskip + +% V1.6, we need to make \footnotesep responsive to changes +% in \baselineskip or strange spacings will result when in +% draft mode. Here is a little LaTeX secret - \footnotesep +% determines the height of an invisible strut that is placed +% *above* the baseline of footnotes after the first. Since +% LaTeX considers the space for characters to be 0.7\baselineskip +% above the baseline and 0.3\baselineskip below it, we need to +% use 0.7\baselineskip as a \footnotesep to maintain equal spacing +% between all the lines of the footnotes. The IEEE often uses a tad +% more, so use 0.8\baselineskip. This slightly larger value also helps +% the text to clear the footnote marks. Note that \thanks in IEEEtran +% uses its own value of \footnotesep which is set in \maketitle. +{\footnotesize +\global\footnotesep 0.8\baselineskip} + + +\skip\@mpfootins = \skip\footins +\fboxsep = 3pt +\fboxrule = .4pt +% V1.6 use 1em, then use LaTeX2e's \@makefnmark +% Note that the IEEE normally *left* aligns the footnote marks, so we don't need +% box resizing tricks here. +\long\def\@makefntext#1{\parindent 1em\indent\hbox{\@makefnmark}#1}% V1.6 use 1em +% V1.7 compsoc does not use superscipts for footnote marks +\ifCLASSOPTIONcompsoc +\def\@IEEEcompsocmakefnmark{\hbox{\normalfont\@thefnmark.\ }} +\long\def\@makefntext#1{\parindent 1em\indent\hbox{\@IEEEcompsocmakefnmark}#1} +\fi + +% The IEEE does not use footnote rules +\def\footnoterule{} + +% V1.7 for compsoc, the IEEE uses a footnote rule only for \thanks. We devise a "one-shot" +% system to implement this. +\newif\if@IEEEenableoneshotfootnoterule +\@IEEEenableoneshotfootnoterulefalse +\ifCLASSOPTIONcompsoc +\def\footnoterule{\relax\if@IEEEenableoneshotfootnoterule +\kern-5pt +\hbox to \columnwidth{\hfill\vrule width 0.5\columnwidth height 0.4pt\hfill} +\kern4.6pt +\global\@IEEEenableoneshotfootnoterulefalse +\else +\relax +\fi} +\fi + +% V1.6 do not allow LaTeX to break a footnote across multiple pages +\interfootnotelinepenalty=10000 + +% V1.6 discourage breaks within equations +% Note that amsmath normally sets this to 10000, +% but LaTeX2e normally uses 100. +\interdisplaylinepenalty=2500 + +% default allows section depth up to /paragraph +\setcounter{secnumdepth}{4} + +% technotes do not allow /paragraph +\ifCLASSOPTIONtechnote + \setcounter{secnumdepth}{3} +\fi +% neither do compsoc conferences +\@IEEEcompsocconfonly{\setcounter{secnumdepth}{3}} + + +\newcounter{section} +\newcounter{subsection}[section] +\newcounter{subsubsection}[subsection] +\newcounter{paragraph}[subsubsection] + +% used only by IEEEtran's IEEEeqnarray as other packages may +% have their own, different, implementations +\newcounter{IEEEsubequation}[equation] + +% as shown when called by user from \ref, \label and in table of contents +\def\theequation{\arabic{equation}} % 1 +\def\theIEEEsubequation{\theequation\alph{IEEEsubequation}} % 1a (used only by IEEEtran's IEEEeqnarray) +\ifCLASSOPTIONcompsoc +% compsoc is all arabic +\def\thesection{\arabic{section}} +\def\thesubsection{\thesection.\arabic{subsection}} +\def\thesubsubsection{\thesubsection.\arabic{subsubsection}} +\def\theparagraph{\thesubsubsection.\arabic{paragraph}} +\else +\def\thesection{\Roman{section}} % I +% V1.7, \mbox prevents breaks around - +\def\thesubsection{\mbox{\thesection-\Alph{subsection}}} % I-A +% V1.7 use I-A1 format used by the IEEE rather than I-A.1 +\def\thesubsubsection{\thesubsection\arabic{subsubsection}} % I-A1 +\def\theparagraph{\thesubsubsection\alph{paragraph}} % I-A1a +\fi + +% From Heiko Oberdiek. Because of the \mbox in \thesubsection, we need to +% tell hyperref to disable the \mbox command when making PDF bookmarks. +% This done already with hyperref.sty version 6.74o and later, but +% it will not hurt to do it here again for users of older versions. +\@ifundefined{pdfstringdefPreHook}{\let\pdfstringdefPreHook\@empty}{}% +\g@addto@macro\pdfstringdefPreHook{\let\mbox\relax} + + +% Main text forms (how shown in main text headings) +% V1.6, using \thesection in \thesectiondis allows changes +% in the former to automatically appear in the latter +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONconference% compsoc conference + \def\thesectiondis{\thesection.} + \def\thesubsectiondis{\thesectiondis\arabic{subsection}.} + \def\thesubsubsectiondis{\thesubsectiondis\arabic{subsubsection}.} + \def\theparagraphdis{\thesubsubsectiondis\arabic{paragraph}.} + \else% compsoc not conferencs + \def\thesectiondis{\thesection} + \def\thesubsectiondis{\thesectiondis.\arabic{subsection}} + \def\thesubsubsectiondis{\thesubsectiondis.\arabic{subsubsection}} + \def\theparagraphdis{\thesubsubsectiondis.\arabic{paragraph}} + \fi +\else% not compsoc + \def\thesectiondis{\thesection.} % I. + \def\thesubsectiondis{\Alph{subsection}.} % B. + \def\thesubsubsectiondis{\arabic{subsubsection})} % 3) + \def\theparagraphdis{\alph{paragraph})} % d) +\fi + +% just like LaTeX2e's \@eqnnum +\def\theequationdis{{\normalfont \normalcolor (\theequation)}}% (1) +% IEEEsubequation used only by IEEEtran's IEEEeqnarray +\def\theIEEEsubequationdis{{\normalfont \normalcolor (\theIEEEsubequation)}}% (1a) +% redirect LaTeX2e's equation number display and all that depend on +% it, through IEEEtran's \theequationdis +\def\@eqnnum{\theequationdis} + + + +% V1.7 provide string macros as article.cls does +\def\contentsname{Contents} +\def\listfigurename{List of Figures} +\def\listtablename{List of Tables} +\def\refname{References} +\def\indexname{Index} +\def\figurename{Fig.} +\def\tablename{TABLE} +\@IEEEcompsocconfonly{\def\figurename{Figure}} +\def\partname{Part} +\def\appendixname{Appendix} +\def\abstractname{Abstract} +% IEEE specific names +\def\IEEEkeywordsname{Index Terms} +\def\IEEEproofname{Proof} + + +% LIST OF FIGURES AND TABLES AND TABLE OF CONTENTS +% +\def\@pnumwidth{1.55em} +\def\@tocrmarg{2.55em} +\def\@dotsep{4.5} +\setcounter{tocdepth}{3} + +% adjusted some spacings here so that section numbers will not easily +% collide with the section titles. +% VIII; VIII-A; and VIII-A.1 are usually the worst offenders. +% MDS 1/2001 +\def\tableofcontents{\section*{\contentsname}\@starttoc{toc}} +\def\l@section#1#2{\addpenalty{\@secpenalty}\addvspace{1.0em plus 1pt}% + \@tempdima 2.75em \begingroup \parindent \z@ \rightskip \@pnumwidth% + \parfillskip-\@pnumwidth {\bfseries\leavevmode #1}\hfil\hbox to\@pnumwidth{\hss #2}\par% + \endgroup} +% argument format #1:level, #2:labelindent,#3:labelsep +\def\l@subsection{\@dottedtocline{2}{2.75em}{3.75em}} +\def\l@subsubsection{\@dottedtocline{3}{6.5em}{4.5em}} +% must provide \l@ defs for ALL sublevels EVEN if tocdepth +% is such as they will not appear in the table of contents +% these defs are how TOC knows what level these things are! +\def\l@paragraph{\@dottedtocline{4}{6.5em}{5.5em}} +\def\l@subparagraph{\@dottedtocline{5}{6.5em}{6.5em}} +\def\listoffigures{\section*{\listfigurename}\@starttoc{lof}} +\def\l@figure{\@dottedtocline{1}{0em}{2.75em}} +\def\listoftables{\section*{\listtablename}\@starttoc{lot}} +\let\l@table\l@figure + + +% Definitions for floats +% +% Normal Floats +% V1.8 floatsep et al. revised down by 0.15\baselineskip +% to account for the sideeffects of \topskip compensation +\floatsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip +\textfloatsep 1.55\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip +\@fptop 0pt plus 1fil +\@fpsep 0.75\baselineskip plus 2fil +\@fpbot 0pt plus 1fil +\def\topfraction{0.9} +\def\bottomfraction{0.4} +\def\floatpagefraction{0.8} +% V1.7, let top floats approach 90% of page +\def\textfraction{0.1} + +% Double Column Floats +\dblfloatsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip + +\dbltextfloatsep 1.55\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip +% Note that it would be nice if the rubber here actually worked in LaTeX2e. +% There is a long standing limitation in LaTeX, first discovered (to the best +% of my knowledge) by Alan Jeffrey in 1992. LaTeX ignores the stretchable +% portion of \dbltextfloatsep, and as a result, double column figures can and +% do result in an non-integer number of lines in the main text columns with +% underfull vbox errors as a consequence. A post to comp.text.tex +% by Donald Arseneau confirms that this had not yet been fixed in 1998. +% IEEEtran V1.6 will fix this problem for you in the titles, but it doesn't +% protect you from other double floats. Happy vspace'ing. + +\@dblfptop 0pt plus 1fil +\@dblfpsep 0.75\baselineskip plus 2fil +\@dblfpbot 0pt plus 1fil +\def\dbltopfraction{0.8} +\def\dblfloatpagefraction{0.8} +\setcounter{dbltopnumber}{4} + +\intextsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip +\setcounter{topnumber}{2} +\setcounter{bottomnumber}{2} +\setcounter{totalnumber}{4} + + + +% article class provides these, we should too. +\newlength\abovecaptionskip +\newlength\belowcaptionskip +% but only \abovecaptionskip is used above figure captions and *below* table +% captions +\setlength\abovecaptionskip{0.5\baselineskip} +% compsoc journals are a little more generous +\ifCLASSOPTIONcompsoc\ifCLASSOPTIONjournal + \setlength\abovecaptionskip{0.75\baselineskip} +\fi\fi +\setlength\belowcaptionskip{0pt} +% V1.6 create hooks in case the caption spacing ever needs to be +% overridden by a user +\def\@IEEEfigurecaptionsepspace{\vskip\abovecaptionskip\relax}% +\def\@IEEEtablecaptionsepspace{\vskip\abovecaptionskip\relax}% + + +% 1.6b revise caption system so that \@makecaption uses two arguments +% as with LaTeX2e. Otherwise, there will be problems when using hyperref. +\def\@IEEEtablestring{table} + + +% V1.8 compensate for \topskip so top of top figures align with tops of the first lines of main text +% here we calculate a space equal to the amount \topskip exceeds the main text height +% we hook in at \@floatboxreset +\def\@IEEEfiguretopskipspace{\ifdim\prevdepth=-1000pt\relax +\setlength{\@IEEEtrantmpdimenA}{1\topskip}\relax +\addtolength{\@IEEEtrantmpdimenA}{-0.7\@IEEEnormalsizeunitybaselineskip}\relax +\vspace*{\@IEEEtrantmpdimenA}\fi} +% V1.8 compensate for \topskip at the top of top tables so caption text is on main text baseline +% use a strut set on the caption baseline within \@makecaption +\def\@IEEEtabletopskipstrut{\ifdim\prevdepth=-1000pt\rule{0pt}{\topskip}\fi} +% the \ifdim\prevdepth checks are always expected to be true for IEEE style float caption ordering +% because top of figure content and top of captions in tables is the first thing on the vertical +% list of these floats +% thanks to Donald Arseneau for his 2000/11/11 post "Re: caption hacking" with info on this topic. + + +\ifCLASSOPTIONcompsoc +% V1.7 compsoc \@makecaption +\ifCLASSOPTIONconference% compsoc conference +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\footnotesize {#1.}\nobreakspace\scshape #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\footnotesize \noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, center +\else% +\hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}% +\fi\fi} +% +\else% nonconference compsoc +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\sffamily\footnotesize #1}\\{\normalfont\sffamily\footnotesize #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +\setbox\@tempboxa\hbox{\normalfont\sffamily\footnotesize {#1.}\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\sffamily\footnotesize {#1.}\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\sffamily\footnotesize \noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, left justify +\else% +\hbox to\hsize{\normalfont\sffamily\footnotesize\box\@tempboxa\hfil}% +\fi\fi} +\fi +% +\else% traditional noncompsoc \@makecaption +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\footnotesize #1}\\{\normalfont\footnotesize\scshape #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +% 3/2001 use footnotesize, not small; use two nonbreaking spaces, not one +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\footnotesize\noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, center if conference, left justify otherwise +\else% +\ifCLASSOPTIONconference \hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}% +\else \hbox to\hsize{\normalfont\footnotesize\box\@tempboxa\hfil}% +\fi\fi\fi} +\fi + + + +% V1.7 disable captions class option, do so in a way that retains operation of \label +% within \caption +\ifCLASSOPTIONcaptionsoff +\long\def\@makecaption#1#2{\vspace*{2em}\footnotesize\bgroup\par\addvspace{0.5\baselineskip}\centering{\footnotesize #1}\par\addvspace{0.5\baselineskip}\egroup% +\let\@IEEEtemporiglabeldefsave\label +\let\@IEEEtemplabelargsave\relax +\def\label##1{\gdef\@IEEEtemplabelargsave{##1}}% +\setbox\@tempboxa\hbox{#2}% +\let\label\@IEEEtemporiglabeldefsave +\ifx\@IEEEtemplabelargsave\relax\else\label{\@IEEEtemplabelargsave}\fi} +\fi + + +% V1.7 define end environments with \def not \let so as to work OK with +% preview-latex +\newcounter{figure} +\def\thefigure{\@arabic\c@figure} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename\nobreakspace\thefigure} +% V1.8 within figures add \@IEEEfiguretopskipspace compensation to LaTeX2e's \@floatboxreset +\def\figure{\def\@floatboxreset{\reset@font\normalsize\@setminipage\@IEEEfiguretopskipspace}\@float{figure}} +\def\endfigure{\end@float} +% V1.8 also add \@IEEEfiguretopskipspace compensation to \figure* +\@namedef{figure*}{\def\@floatboxreset{\reset@font\normalsize\@setminipage\@IEEEfiguretopskipspace}\@dblfloat{figure}} +\@namedef{endfigure*}{\end@dblfloat} + +\newcounter{table} +\ifCLASSOPTIONcompsoc +\def\thetable{\arabic{table}} +\else +\def\thetable{\@Roman\c@table} +\fi +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename\nobreakspace\thetable} +% V1.6 The IEEE uses 8pt text for tables +% within tables alter LaTeX2e's \@floatboxreset to use \footnotesize +\def\table{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@float{table}} +\def\endtable{\end@float} +% v1.6b double column tables need to default to footnotesize as well. +\@namedef{table*}{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@dblfloat{table}} +\@namedef{endtable*}{\end@dblfloat} + + + + +%% -- Command Argument Scanning Support Functions -- +%% V1.8a + +% usage: \@IEEEstripouterbraces*{} +% \@IEEEstripouterbraces fully expands its argument (which it then stores +% in \@IEEEstripouterbracesarg) via \edef, then removes any outer enclosing +% braces, and finally stores the result in the macro +% \@IEEEstrippedouterbraces. +% +% For example: +% \@IEEEstripouterbraces{{{{ab}c}}} +% results in: +% +% \@IEEEstripouterbracesarg ==> a macro containing {{{ab}c}} +% \@IEEEstrippedouterbraces ==> a macro containing {ab}c +% +% the *-star form,\@IEEEstripouterbraces*, does not expand the argument +% contents during processing +\def\@IEEEstripouterbraces{\@ifstar{\let\@IEEEstripouterbracesdef=\def\@@IEEEstripouterbraces}{\let\@IEEEstripouterbracesdef=\edef\@@IEEEstripouterbraces}} + +\def\@@IEEEstripouterbraces#1{\@IEEEstripouterbracesdef\@IEEEstripouterbracesarg{#1}\relax +% If the macro is unchanged after being acquired as a single delimited +% argument, we know we have one sequence of tokens without any enclosing +% braces. Loop until this is true. +\loop + \expandafter\@@@IEEEstripouterbraces\@IEEEstripouterbracesarg\@IEEEgeneralsequenceDELIMITER +\ifx\@IEEEstrippedouterbraces\@IEEEstripouterbracesarg +\else + \let\@IEEEstripouterbracesarg\@IEEEstrippedouterbraces +\repeat} + +\def\@@@IEEEstripouterbraces#1\@IEEEgeneralsequenceDELIMITER{\def\@IEEEstrippedouterbraces{#1}} + + + +% usage: \@IEEEextractgroup*{} +% \@IEEEextractgroup fully expands its argument (which it then stores in +% \@IEEEextractgrouparg) via \edef and then assigns the first "brace group" +% of tokens to the macro \@IEEEextractedgroup. +% The remaining groups, if any, are stored in the macro +% \@IEEEextractedgroupremain. If the argument does not contain the requisite +% groups, the respective macros will be defined to be empty. +% There is an asymmetry in that \@IEEEextractedgroup is stripped of its first +% outer grouping while \@IEEEextractedgroupremain retains even the outer +% grouping (if present) that originally identified it as a group. +% +% For example: +% \@IEEEextractgroup{{{ab}}{c{de}}} +% results in: +% +% \@IEEEextractgrouparg ==> a macro containing {{ab}}{c{de}} +% \@IEEEextractedgroup ==> a macro containing {ab} +% \@IEEEextractedgroupremain ==> a macro containing {c{de}} +% +% The *-star form, \@IEEEextractgroup*, does not expand its argument +% contents during processing. +\def\@IEEEextractgroup{\@ifstar{\let\@IEEEextractgroupdef=\def\@@IEEEextractgroup}{\let\@IEEEextractgroupdef=\edef\@@IEEEextractgroup}} + +\def\@@IEEEextractgroup#1{\@IEEEextractgroupdef\@IEEEextractgrouparg{#1}\relax +% trap the case of an empty extracted group as this would cause problems with +% \@IEEEextractgroupremain's argument acquisition +\ifx\@IEEEextractgrouparg\@empty + \def\@IEEEextractedgroup{}\relax + \def\@IEEEextractedgroupremain{}\relax +\else + % We have to use some dirty tricks here. We want to insert {} around + % whatever remains after the first group so that TeX's argument scanner + % will preserve any originally enclosing braces as well as provide an + % empty argument to acquire even if there isn't a second group. + % In this first of two dirty tricks, we put a } at the end of the structure + % we are going to extract from. The \ifnum0=`{\fi keeps TeX happy to allow + % what would otherwise be an unbalanced macro definition for + % \@@IEEEextractgroup to be acceptable to it. + \ifnum0=`{\fi\expandafter\@IEEEextractgroupremain\@IEEEextractgrouparg}\relax +\fi} + +% In the second part of the dirty tricks, we insert a leading { right after +% the first group is acquired, but before the remainder is. Again, the +% \ifnum0=`}\fi keeps TeX happy during definition time, but will disappear +% during run time. +\def\@IEEEextractgroupremain#1{\def\@IEEEextractedgroup{#1}\expandafter\@@IEEEextractgroupremain\expandafter{\ifnum0=`}\fi} + +\def\@@IEEEextractgroupremain#1{\def\@IEEEextractedgroupremain{#1}} + + + +% \@IEEEextracttoken relocated at top because margin setting commands rely on it + + + +% usage: \@IEEEextracttokengroups*{} +% \@IEEEextracttokengroups fully expands its argument (which it then stores +% in \@IEEEextracttokengroupsarg) and then assigns the first "brace group" of +% tokens (with the outermost braces removed) to the macro +% \@IEEEextractedfirstgroup. +% The meaning of the first nonbrace (but including the empty group) token +% within this first group is assigned via \let to \@IEEEextractedfirsttoken +% as well as stored in the macro \@IEEEextractedfirsttokenmacro. If a first +% nonbrace token does not exist (or is an empty group), these will be \relax +% and empty, respectively. Tokens that would otherwise be discarded during +% the acquisition of the first token in the first group are stored in +% \@IEEEextractedfirsttokensdiscarded, however their original relative brace +% nesting depths are not guaranteed to be preserved. +% The first group within this first group is stored in the macro +% \@IEEEextractedfirstfirstgroup. +% Likewise for the next group after the first: \@IEEEextractednextgroup, +% \@IEEEextractednextfirstgroup, \@IEEEextractednextgroupfirsttoken, +% \@IEEEextractednextgroupfirsttokenmacro, and +% \@IEEEextractednextfirsttokensdiscarded. +% All tokens/groups after the first group, including any enclosing braces, +% are stored in the macro \@IEEEextractedafterfirstgroupremain which will +% be empty if none exist. +% +% For example: +% \@IEEEextracttokengroups{{{ab}{cd}}{{ef}g}} +% will result in: +% +% \@IEEEextracttokengroupsarg ==> a macro containing {{ab}{cd}}{{ef}g} +% \@IEEEextractedfirstgroup ==> a macro containing {ab}{cd} +% \@IEEEextractedafterfirstgroupremain ==> a macro containing {{ef}g} +% \@IEEEextractedfirsttoken ==> the letter a +% \@IEEEextractedfirsttokenmacro ==> a macro containing a +% \@IEEEextractedfirsttokensdiscarded ==> a macro containing bcd +% \@IEEEextractedfirstfirstgroup ==> a macro containing ab +% \@IEEEextractednextgroup ==> a macro containing {ef}g +% \@IEEEextractednextfirsttoken ==> the letter e +% \@IEEEextractednextfirsttokenmacro ==> a macro containing e +% \@IEEEextractednextfirsttokensdiscarded ==> a macro containing fg +% \@IEEEextractednextfirstgroup ==> a macro containing ef +% +% If given an empty argument, \@IEEEextractedfirsttoken and +% \@IEEEextractednextfirsttoken will be set to \relax +% and all the macros will be empty. +% the *-star form, \@IEEEextracttokengroups*, does not expand its argument +% contents during processing. +% +% Depends on: \@IEEEextractgroup, \@IEEEextracttoken +\def\@IEEEextracttokengroups{\@ifstar{\let\@IEEEextracttokengroupsdef=\def\@@IEEEextracttokengroups}{\let\@IEEEextracttokengroupsdef=\edef\@@IEEEextracttokengroups}} +\def\@@IEEEextracttokengroups#1{\@IEEEextracttokengroupsdef\@IEEEextracttokengroupsarg{#1}\relax +% begin extraction, these functions are safe with empty arguments +% first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextracttokengroupsarg}\relax +\let\@IEEEextractedfirstgroup\@IEEEextractedgroup +\let\@IEEEextractedafterfirstgroupremain\@IEEEextractedgroupremain +\expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax +\let\@IEEEextractedfirsttoken\@IEEEextractedtoken +\let\@IEEEextractedfirsttokenmacro\@IEEEextractedtokenmacro +\let\@IEEEextractedfirsttokensdiscarded\@IEEEextractedtokensdiscarded +% first first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax +\let\@IEEEextractedfirstfirstgroup\@IEEEextractedgroup +% next group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedafterfirstgroupremain}\relax +\let\@IEEEextractednextgroup\@IEEEextractedgroup +\expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractednextgroup}\relax +\let\@IEEEextractednextfirsttoken\@IEEEextractedtoken +\let\@IEEEextractednextfirsttokenmacro\@IEEEextractedtokenmacro +\let\@IEEEextractednextfirsttokensdiscarded\@IEEEextractedtokensdiscarded +% next first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractednextgroup}\relax +\let\@IEEEextractednextfirstgroup\@IEEEextractedgroup} + + +%% -- End of Command Argument Scanning Support Functions -- + + + + +%% +%% START OF IEEEeqnarray DEFINITIONS +%% +%% Inspired by the concepts, examples, and previous works of LaTeX +%% coders and developers such as Donald Arseneau, Fred Bartlett, +%% David Carlisle, Tony Liu, Frank Mittelbach, Piet van Oostrum, +%% Roland Winkler and Mark Wooding. +%% I don't make the claim that my work here is even near their calibre. ;) + + +\newif\if@IEEEeqnarrayboxnojot% flag to indicate if the environment was called as the star form +\@IEEEeqnarrayboxnojotfalse + +\newif\if@advanceIEEEeqncolcnt% tracks if the environment should advance the col counter +% allows a way to make an \IEEEeqnarraybox that can be used within an \IEEEeqnarray +% used by IEEEeqnarraymulticol so that it can work properly in both +\@advanceIEEEeqncolcnttrue + +\newcount\@IEEEeqnnumcols % tracks how many IEEEeqnarray cols are defined +\newcount\@IEEEeqncolcnt % tracks how many IEEEeqnarray cols the user actually used + + +% The default math style used by the columns +\def\IEEEeqnarraymathstyle{\displaystyle} +% The default text style used by the columns +% default to using the current font +\def\IEEEeqnarraytextstyle{\relax} + +% like the iedlistdecl but for \IEEEeqnarray +\def\IEEEeqnarraydecl{\relax} +\def\IEEEeqnarrayboxdecl{\relax} + + + +% V1.8 flags to indicate that equation numbering is to persist +\newif\if@IEEEeqnumpersist% +\@IEEEeqnumpersistfalse +\newif\if@IEEEsubeqnumpersist% +\@IEEEsubeqnumpersistfalse +% +% V1.8 flags to indicate if (sub)equation number of last line was preadvanced +\newif\if@IEEEeqnumpreadv% +\@IEEEeqnumpreadvfalse +\newif\if@IEEEsubeqnumpreadv% +\@IEEEsubeqnumpreadvfalse + +\newcount\@IEEEsubeqnnumrollback% saves previous value of IEEEsubequation number in case we need to restore it + +% \yesnumber is the opposite of \nonumber +% a novel concept with the same def as the equationarray package +% However, we give IEEE versions too since some LaTeX packages such as +% the MDWtools mathenv.sty redefine \nonumber to something else. +% This command is intended for use in non-IEEEeqnarray math environments +\providecommand{\yesnumber}{\global\@eqnswtrue} + + +% IEEEyes/nonumber +% V1.8 add persistant * forms +% These commands can alter the type of equation an IEEEeqnarray line is. +\def\IEEEyesnumber{\@ifstar{\global\@IEEEeqnumpersisttrue\global\@IEEEsubeqnumpersistfalse\@IEEEyesnumber}{\@IEEEyesnumber}} + +\def\@IEEEyesnumber{\global\@eqnswtrue +\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray +\ifnum\c@IEEEsubequation>0\relax + \stepcounter{equation}\setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label +\fi +% even if we reached this eqn num via a preadv, it is legit now +\global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse +\fi} + +\def\IEEEnonumber{\@ifstar{\global\@IEEEeqnumpersistfalse\global\@IEEEsubeqnumpersistfalse\global\@eqnswfalse}{\global\@eqnswfalse}} + + +\def\IEEEyessubnumber{\@ifstar{\global\@IEEEsubeqnumpersisttrue\@IEEEyessubnumber}{\@IEEEyessubnumber}} +% +\def\@IEEEyessubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray + \ifnum\c@IEEEsubequation>0\relax% if it already is a subequation, we are good to go as-is + \else% if we are a regular equation we have to watch out for two cases + \if@IEEEeqnumpreadv% if this equation is the result of a preadvance, backout and bump the sub eqnnum + \global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\addtocounter{IEEEsubequation}{1}\relax + \else% non-preadvanced equations just need initialization of their sub eqnnum + \setcounter{IEEEsubequation}{1}\relax + \fi + \fi% fi already is subequation + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore + \global\@eqnswtrue +\fi} + + +\def\IEEEnosubnumber{\@ifstar{\global\@IEEEsubeqnumpersistfalse\@IEEEnosubnumber}{\@IEEEnosubnumber}} +% +\def\@IEEEnosubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray + \if@eqnsw % we do nothing unless we know we will display because we play with the counters here + % if it currently is a subequation, bump up to the next equation number and turn off the subequation + \ifnum\c@IEEEsubequation>0\relax\addtocounter{equation}{1}\setcounter{IEEEsubequation}{0}\relax + \fi + \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore + \gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi +\fi} + + + +% allows users to "push away" equations that get too close to the equation numbers +\def\IEEEeqnarraynumspace{\hphantom{\ifnum\c@IEEEsubequation>0\relax\theIEEEsubequationdis\else\theequationdis\fi}} + +% provides a way to span multiple columns within IEEEeqnarray environments +% will consider \if@advanceIEEEeqncolcnt before globally advancing the +% column counter - so as to work within \IEEEeqnarraybox +% usage: \IEEEeqnarraymulticol{number cols. to span}{col type}{cell text} +\long\def\IEEEeqnarraymulticol#1#2#3{\multispan{#1}\relax +% check if column is defined for the precolumn definition +% We have to be careful here because TeX scans for & even within an \iffalse +% where it does not expand macros. So, if we used only one \ifx and a #3 +% appeared in the false branch and the user inserted another alignment +% structure that uses & in the \IEEEeqnarraymulticol{}, TeX will not see that +% there is an inner alignment in the false branch yet still will see any & +% there and will think that they apply to the outer alignment resulting in an +% incomplete \ifx error. +% So, here we use separate checks for the pre and post parts in order to keep +% the #3 outside of all conditionals. +\relax\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax +\csname @IEEEeqnarraycolPRE#2\endcsname +\else% if not, error and use default type +\@IEEEclspkgerror{Invalid column type "#2" in \string\IEEEeqnarraymulticol.\MessageBreak +Using a default centering column instead}% +{You must define IEEEeqnarray column types before use.}% +\csname @IEEEeqnarraycolPRE@IEEEdefault\endcsname +\fi +% The ten \relax are to help prevent misleading error messages in case a user +% accidently inserted a macro that tries to acquire additional arguments. +#3\relax\relax\relax\relax\relax\relax\relax\relax\relax\relax +% check if column is defined for the postcolumn definition +\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax +\csname @IEEEeqnarraycolPOST#2\endcsname +\else% if not, use the default type +\csname @IEEEeqnarraycolPOST@IEEEdefault\endcsname +\fi +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by #1\relax\fi} + +% like \omit, but maintains track of the column counter for \IEEEeqnarray +\def\IEEEeqnarrayomit{\omit\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by 1\relax\fi} + + +% provides a way to define a letter referenced column type +% usage: \IEEEeqnarraydefcol{col. type letter/name}{pre insertion text}{post insertion text} +\def\IEEEeqnarraydefcol#1#2#3{\expandafter\def\csname @IEEEeqnarraycolPRE#1\endcsname{#2}% +\expandafter\def\csname @IEEEeqnarraycolPOST#1\endcsname{#3}% +\expandafter\def\csname @IEEEeqnarraycolDEF#1\endcsname{1}} + + +% provides a way to define a numerically referenced inter-column glue types +% usage: \IEEEeqnarraydefcolsep{col. glue number}{glue definition} +\def\IEEEeqnarraydefcolsep#1#2{\expandafter\def\csname @IEEEeqnarraycolSEP\romannumeral #1\endcsname{#2}% +\expandafter\def\csname @IEEEeqnarraycolSEPDEF\romannumeral #1\endcsname{1}} + + +\def\@IEEEeqnarraycolisdefined{1}% just a macro for 1, used for checking undefined column types + + +% expands and appends the given argument to the \@IEEEtrantmptoksA token list +% used to build up the \halign preamble +\def\@IEEEappendtoksA#1{\edef\@@IEEEappendtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA #1}}% +\@@IEEEappendtoksA} + +% also appends to \@IEEEtrantmptoksA, but does not expand the argument +% uses \toks8 as a scratchpad register +\def\@IEEEappendNOEXPANDtoksA#1{\toks8={#1}% +\edef\@@IEEEappendNOEXPANDtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA\the\toks8}}% +\@@IEEEappendNOEXPANDtoksA} + +% define some common column types for the user +% math +\IEEEeqnarraydefcol{l}{$\IEEEeqnarraymathstyle}{$\hfil} +\IEEEeqnarraydefcol{c}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} +\IEEEeqnarraydefcol{r}{\hfil$\IEEEeqnarraymathstyle}{$} +\IEEEeqnarraydefcol{L}{$\IEEEeqnarraymathstyle{}}{{}$\hfil} +\IEEEeqnarraydefcol{C}{\hfil$\IEEEeqnarraymathstyle{}}{{}$\hfil} +\IEEEeqnarraydefcol{R}{\hfil$\IEEEeqnarraymathstyle{}}{{}$} +% text +\IEEEeqnarraydefcol{s}{\IEEEeqnarraytextstyle}{\hfil} +\IEEEeqnarraydefcol{t}{\hfil\IEEEeqnarraytextstyle}{\hfil} +\IEEEeqnarraydefcol{u}{\hfil\IEEEeqnarraytextstyle}{} + +% vertical rules +\IEEEeqnarraydefcol{v}{}{\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{vv}{\vrule width\arrayrulewidth\hfil}{\hfil\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{V}{}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{VV}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth\hfil}% +{\hfil\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} + +% horizontal rules +\IEEEeqnarraydefcol{h}{}{\leaders\hrule height\arrayrulewidth\hfil} +\IEEEeqnarraydefcol{H}{}{\leaders\vbox{\hrule width\arrayrulewidth\vskip\doublerulesep\hrule width\arrayrulewidth}\hfil} + +% plain +\IEEEeqnarraydefcol{x}{}{} +\IEEEeqnarraydefcol{X}{$}{$} + +% the default column type to use in the event a column type is not defined +\IEEEeqnarraydefcol{@IEEEdefault}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} + + +% a zero tabskip (used for "-" col types) +\def\@IEEEeqnarraycolSEPzero{0pt plus 0pt minus 0pt} +% a centering tabskip (used for "+" col types) +\def\@IEEEeqnarraycolSEPcenter{1000pt plus 0pt minus 1000pt} + +% top level default tabskip glues for the start, end, and inter-column +% may be reset within environments not always at the top level, e.g., \IEEEeqnarraybox +\edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPcenter}% default start glue +\edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPcenter}% default end glue +\edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue + + + +% creates a vertical rule that extends from the bottom to the top a a cell +% Provided in case other packages redefine \vline some other way. +% usage: \IEEEeqnarrayvrule[rule thickness] +% If no argument is provided, \arrayrulewidth will be used for the rule thickness. +\newcommand\IEEEeqnarrayvrule[1][\arrayrulewidth]{\vrule\@width#1\relax} + +% creates a blank separator row +% usage: \IEEEeqnarrayseprow[separation length][font size commands] +% default is \IEEEeqnarrayseprow[0.25\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers +\def\IEEEeqnarrayseprow{\relax\@ifnextchar[{\@IEEEeqnarrayseprow}{\@IEEEeqnarrayseprow[0.25\normalbaselineskip]}} +\def\@IEEEeqnarrayseprow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprow[#1]}{\@@IEEEeqnarrayseprow[#1][\relax]}} +\def\@@IEEEeqnarrayseprow[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% +\ifx\@IEEEeqnarrayseprowARGONE\@empty% +% get the skip value, based on the font commands +% use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 +% assign within a bogus box to confine the font changes +{\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% +\else% +{\setbox0=\hbox{#2\relax\global\skip5=#1}}% +\fi% +\@IEEEeqnarrayhoptolastcolumn\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} + +% creates a blank separator row, but omits all the column templates +% usage: \IEEEeqnarrayseprowcut[separation length][font size commands] +% default is \IEEEeqnarrayseprowcut[0.25\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers +\def\IEEEeqnarrayseprowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarrayseprowcut}{\@IEEEeqnarrayseprowcut[0.25\normalbaselineskip]}} +\def\@IEEEeqnarrayseprowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprowcut[#1]}{\@@IEEEeqnarrayseprowcut[#1][\relax]}} +\def\@@IEEEeqnarrayseprowcut[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% +\ifx\@IEEEeqnarrayseprowARGONE\@empty% +% get the skip value, based on the font commands +% use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 +% assign within a bogus box to confine the font changes +{\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% +\else% +{\setbox0=\hbox{#2\relax\global\skip5=#1}}% +\fi% +\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} + + + +% draws a single rule across all the columns optional +% argument determines the rule width, \arrayrulewidth is the default +% updates column counter as needed and turns off struts +% usage: \IEEEeqnarrayrulerow[rule line thickness] +\def\IEEEeqnarrayrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarrayrulerow}{\@IEEEeqnarrayrulerow[\arrayrulewidth]}} +\def\@IEEEeqnarrayrulerow[#1]{\leaders\hrule height#1\hfil\relax% put in our rule +% turn off any struts +\IEEEeqnarraystrutsize{0pt}{0pt}[\relax]\relax} + + +% draws a double rule by using a single rule row, a separator row, and then +% another single rule row +% first optional argument determines the rule thicknesses, \arrayrulewidth is the default +% second optional argument determines the rule spacing, \doublerulesep is the default +% usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] +\def\IEEEeqnarraydblrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarraydblrulerow}{\@IEEEeqnarraydblrulerow[\arrayrulewidth]}} +\def\@IEEEeqnarraydblrulerow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerow[#1]}% +{\@@IEEEeqnarraydblrulerow[#1][\doublerulesep]}} +\def\@@IEEEeqnarraydblrulerow[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% +% we allow the user to say \IEEEeqnarraydblrulerow[][] +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]\relax% +\fi% +\def\@IEEEeqnarraydblrulerowARG{#2}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\\\IEEEeqnarrayseprow[\doublerulesep][\relax]% +\else% +\\\IEEEeqnarrayseprow[#2][\relax]% +\fi% +\\\multispan{\@IEEEeqnnumcols}% +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\def\@IEEEeqnarraydblrulerowARG{#1}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +} + +% draws a double rule by using a single rule row, a separator (cutting) row, and then +% another single rule row +% first optional argument determines the rule thicknesses, \arrayrulewidth is the default +% second optional argument determines the rule spacing, \doublerulesep is the default +% usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] +\def\IEEEeqnarraydblrulerowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarraydblrulerowcut}{\@IEEEeqnarraydblrulerowcut[\arrayrulewidth]}} +\def\@IEEEeqnarraydblrulerowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerowcut[#1]}% +{\@@IEEEeqnarraydblrulerowcut[#1][\doublerulesep]}} +\def\@@IEEEeqnarraydblrulerowcut[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% +% we allow the user to say \IEEEeqnarraydblrulerow[][] +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +\def\@IEEEeqnarraydblrulerowARG{#2}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\\\IEEEeqnarrayseprowcut[\doublerulesep][\relax]% +\else% +\\\IEEEeqnarrayseprowcut[#2][\relax]% +\fi% +\\\multispan{\@IEEEeqnnumcols}% +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\def\@IEEEeqnarraydblrulerowARG{#1}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +} + + + +% inserts a full row's worth of &'s +% relies on \@IEEEeqnnumcols to provide the correct number of columns +% uses \@IEEEtrantmptoksA, \count0 as scratch registers +\def\@IEEEeqnarrayhoptolastcolumn{\@IEEEtrantmptoksA={}\count0=1\relax% +\loop% add cols if the user did not use them all +\ifnum\count0<\@IEEEeqnnumcols\relax% +\@IEEEappendtoksA{&}% +\advance\count0 by 1\relax% update the col count +\repeat% +\the\@IEEEtrantmptoksA%execute the &'s +} + + + +\newif\if@IEEEeqnarrayISinner % flag to indicate if we are within the lines +\@IEEEeqnarrayISinnerfalse % of an IEEEeqnarray - after the IEEEeqnarraydecl + +\edef\@IEEEeqnarrayTHEstrutheight{0pt} % height and depth of IEEEeqnarray struts +\edef\@IEEEeqnarrayTHEstrutdepth{0pt} + +\edef\@IEEEeqnarrayTHEmasterstrutheight{0pt} % default height and depth of +\edef\@IEEEeqnarrayTHEmasterstrutdepth{0pt} % struts within an IEEEeqnarray + +\edef\@IEEEeqnarrayTHEmasterstrutHSAVE{0pt} % saved master strut height +\edef\@IEEEeqnarrayTHEmasterstrutDSAVE{0pt} % and depth + +\newif\if@IEEEeqnarrayusemasterstrut % flag to indicate that the master strut value +\@IEEEeqnarrayusemasterstruttrue % is to be used + + + +% saves the strut height and depth of the master strut +\def\@IEEEeqnarraymasterstrutsave{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% save values +\edef\@IEEEeqnarrayTHEmasterstrutHSAVE{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutDSAVE{\the\dimen2}} + +% restores the strut height and depth of the master strut +\def\@IEEEeqnarraymasterstrutrestore{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutHSAVE\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutDSAVE\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% restore values +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}} + + +% globally restores the strut height and depth to the +% master values and sets the master strut flag to true +\def\@IEEEeqnarraystrutreset{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% restore values +\xdef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\xdef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\global\@IEEEeqnarrayusemasterstruttrue} + + +% if the master strut is not to be used, make the current +% values of \@IEEEeqnarrayTHEstrutheight, \@IEEEeqnarrayTHEstrutdepth +% and the use master strut flag, global +% this allows user strut commands issued in the last column to be carried +% into the isolation/strut column +\def\@IEEEeqnarrayglobalizestrutstatus{\relax% +\if@IEEEeqnarrayusemasterstrut\else% +\xdef\@IEEEeqnarrayTHEstrutheight{\@IEEEeqnarrayTHEstrutheight}% +\xdef\@IEEEeqnarrayTHEstrutdepth{\@IEEEeqnarrayTHEstrutdepth}% +\global\@IEEEeqnarrayusemasterstrutfalse% +\fi} + + + +% usage: \IEEEeqnarraystrutsize{height}{depth}[font size commands] +% If called outside the lines of an IEEEeqnarray, sets the height +% and depth of both the master and local struts. If called inside +% an IEEEeqnarray line, sets the height and depth of the local strut +% only and sets the flag to indicate the use of the local strut +% values. If the height or depth is left blank, 0.7\normalbaselineskip +% and 0.3\normalbaselineskip will be used, respectively. +% The optional argument can be used to evaluate the lengths under +% a different font size and styles. If none is specified, the current +% font is used. +% uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 +\def\IEEEeqnarraystrutsize#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsize{#1}{#2}}{\@IEEEeqnarraystrutsize{#1}{#2}[\relax]}} +\def\@IEEEeqnarraystrutsize#1#2[#3]{\def\@IEEEeqnarraystrutsizeARG{#1}% +\ifx\@IEEEeqnarraystrutsizeARG\@empty% +{\setbox0=\hbox{#3\relax\global\skip3=0.7\normalbaselineskip}}% +\skip0=\skip3\relax% +\else% arg one present +{\setbox0=\hbox{#3\relax\global\skip3=#1\relax}}% +\skip0=\skip3\relax% +\fi% if null arg +\def\@IEEEeqnarraystrutsizeARG{#2}% +\ifx\@IEEEeqnarraystrutsizeARG\@empty% +{\setbox0=\hbox{#3\relax\global\skip3=0.3\normalbaselineskip}}% +\skip2=\skip3\relax% +\else% arg two present +{\setbox0=\hbox{#3\relax\global\skip3=#2\relax}}% +\skip2=\skip3\relax% +\fi% if null arg +% remove stretchability, just to be safe +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +\if@IEEEeqnarrayISinner% inner does not touch master strut size +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstrutfalse% do not use master +\else% outer, have to set master strut too +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstruttrue% use master strut +\fi} + + +% usage: \IEEEeqnarraystrutsizeadd{added height}{added depth}[font size commands] +% If called outside the lines of an IEEEeqnarray, adds the given height +% and depth to both the master and local struts. +% If called inside an IEEEeqnarray line, adds the given height and depth +% to the local strut only and sets the flag to indicate the use +% of the local strut values. +% In both cases, if a height or depth is left blank, 0pt is used instead. +% The optional argument can be used to evaluate the lengths under +% a different font size and styles. If none is specified, the current +% font is used. +% uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 +\def\IEEEeqnarraystrutsizeadd#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsizeadd{#1}{#2}}{\@IEEEeqnarraystrutsizeadd{#1}{#2}[\relax]}} +\def\@IEEEeqnarraystrutsizeadd#1#2[#3]{\def\@IEEEeqnarraystrutsizearg{#1}% +\ifx\@IEEEeqnarraystrutsizearg\@empty% +\skip0=0pt\relax% +\else% arg one present +{\setbox0=\hbox{#3\relax\global\skip3=#1}}% +\skip0=\skip3\relax% +\fi% if null arg +\def\@IEEEeqnarraystrutsizearg{#2}% +\ifx\@IEEEeqnarraystrutsizearg\@empty% +\skip2=0pt\relax% +\else% arg two present +{\setbox0=\hbox{#3\relax\global\skip3=#2}}% +\skip2=\skip3\relax% +\fi% if null arg +% remove stretchability, just to be safe +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +\if@IEEEeqnarrayISinner% inner does not touch master strut size +% get local strut size +\expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% +% add it to the user supplied values +\advance\dimen0 by \skip0\relax% +\advance\dimen2 by \skip2\relax% +% update the local strut size +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstrutfalse% do not use master +\else% outer, have to set master strut too +% get master strut size +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% add it to the user supplied values +\advance\dimen0 by \skip0\relax% +\advance\dimen2 by \skip2\relax% +% update the local and master strut sizes +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstruttrue% use master strut +\fi} + + +% allow user a way to see the struts +\newif\ifIEEEvisiblestruts +\IEEEvisiblestrutsfalse + +% inserts an invisible strut using the master or local strut values +% uses scratch registers \skip0, \skip2, \dimen0, \dimen2 +\def\@IEEEeqnarrayinsertstrut{\relax% +\if@IEEEeqnarrayusemasterstrut +% get master strut size +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +\else% +% get local strut size +\expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% +\fi% +% remove stretchability, probably not needed +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +% allow user to see struts if desired +\ifIEEEvisiblestruts% +\vrule width0.2pt height\dimen0 depth\dimen2\relax% +\else% +\vrule width0pt height\dimen0 depth\dimen2\relax\fi} + + +% creates an invisible strut, useable even outside \IEEEeqnarray +% if \IEEEvisiblestrutstrue, the strut will be visible and 0.2pt wide. +% usage: \IEEEstrut[height][depth][font size commands] +% default is \IEEEstrut[0.7\normalbaselineskip][0.3\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \dimen0, \dimen2, \skip0, \skip2 +\def\IEEEstrut{\relax\@ifnextchar[{\@IEEEstrut}{\@IEEEstrut[0.7\normalbaselineskip]}} +\def\@IEEEstrut[#1]{\relax\@ifnextchar[{\@@IEEEstrut[#1]}{\@@IEEEstrut[#1][0.3\normalbaselineskip]}} +\def\@@IEEEstrut[#1][#2]{\relax\@ifnextchar[{\@@@IEEEstrut[#1][#2]}{\@@@IEEEstrut[#1][#2][\relax]}} +\def\@@@IEEEstrut[#1][#2][#3]{\mbox{#3\relax% +\def\@IEEEstrutARG{#1}% +\ifx\@IEEEstrutARG\@empty% +\skip0=0.7\normalbaselineskip\relax% +\else% +\skip0=#1\relax% +\fi% +\def\@IEEEstrutARG{#2}% +\ifx\@IEEEstrutARG\@empty% +\skip2=0.3\normalbaselineskip\relax% +\else% +\skip2=#2\relax% +\fi% +% remove stretchability, probably not needed +\dimen0\skip0\relax% +\dimen2\skip2\relax% +\ifIEEEvisiblestruts% +\vrule width0.2pt height\dimen0 depth\dimen2\relax% +\else% +\vrule width0.0pt height\dimen0 depth\dimen2\relax\fi}} + + +% enables strut mode by setting a default strut size and then zeroing the +% \baselineskip, \lineskip, \lineskiplimit and \jot +\def\IEEEeqnarraystrutmode{\IEEEeqnarraystrutsize{0.7\normalbaselineskip}{0.3\normalbaselineskip}[\relax]% +\baselineskip=0pt\lineskip=0pt\lineskiplimit=0pt\jot=0pt} + + +% equation and subequation forms to use to setup hyperref's \@currentHref +\def\@IEEEtheHrefequation{equation.\theHequation} +\def\@IEEEtheHrefsubequation{equation.\theHequation\alph{IEEEsubequation}} + + +\def\IEEEeqnarray{\@IEEEeqnumpersisttrue\@IEEEsubeqnumpersistfalse\@IEEEeqnarray} +\def\endIEEEeqnarray{\end@IEEEeqnarray} + +\@namedef{IEEEeqnarray*}{\@IEEEeqnumpersistfalse\@IEEEsubeqnumpersistfalse\@IEEEeqnarray} +\@namedef{endIEEEeqnarray*}{\end@IEEEeqnarray} + + +% \IEEEeqnarray is an enhanced \eqnarray. +% The star form defaults to not putting equation numbers at the end of each row. +% usage: \IEEEeqnarray[decl]{cols} +\def\@IEEEeqnarray{\relax\@ifnextchar[{\@@IEEEeqnarray}{\@@IEEEeqnarray[\relax]}} +% We have to be careful here to normalize catcodes just before acquiring the +% cols as that specification may contain punctuation which could be subject +% to document catcode changes. +\def\@@IEEEeqnarray[#1]{\begingroup\IEEEnormalcatcodes\@@@IEEEeqnarray[#1]} +\def\@@@IEEEeqnarray[#1]#2{\endgroup + % default to showing the equation number or not based on whether or not + % the star form was involked + \if@IEEEeqnumpersist\global\@eqnswtrue + \else% not the star form + \global\@eqnswfalse + \fi% if star form + % provide a basic hyperref \theHequation if this has not already been setup (hyperref not loaded, or no section counter) + \@ifundefined{theHequation}{\def\theHequation{\arabic{equation}}}{}\relax + % provide dummy hyperref commands in case hyperref is not loaded + \providecommand{\Hy@raisedlink}[1]{}\relax + \providecommand{\hyper@anchorstart}[1]{}\relax + \providecommand{\hyper@anchorend}{}\relax + \providecommand{\@currentHref}{}\relax + \@IEEEeqnumpreadvfalse% reset eqnpreadv flag + \@IEEEsubeqnumpreadvfalse% reset subeqnpreadv flag + \@IEEEeqnarrayISinnerfalse% not yet within the lines of the halign + \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default + \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise + \IEEEvisiblestrutsfalse% diagnostic mode defaults to off + % no extra space unless the user specifically requests it + \lineskip=0pt\relax + \lineskiplimit=0pt\relax + \baselineskip=\normalbaselineskip\relax% + \jot=\IEEEnormaljot\relax% + \mathsurround\z@\relax% no extra spacing around math + \@advanceIEEEeqncolcnttrue% advance the col counter for each col the user uses, + % used in \IEEEeqnarraymulticol and in the preamble build + %V1.8 Here we preadvance to the next equation number. + % If the user later wants a continued subequation, we can roll back. + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation% + \stepcounter{equation}\@IEEEeqnumpreadvtrue% advance equation counter before first line + \setcounter{IEEEsubequation}{0}% no subequation yet + \let\@IEEEcurrentlabelsave\@currentlabel% save current label as we later change it globally + \let\@IEEEcurrentHrefsave\@currentHref% save current href label as we later change it globally + \def\@currentlabel{\p@equation\theequation}% redefine the ref label + \def\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \IEEEeqnarraydecl\relax% allow a way for the user to make global overrides + #1\relax% allow user to override defaults + \let\\\@IEEEeqnarraycr% replace newline with one that can put in eqn. numbers + \global\@IEEEeqncolcnt\z@% col. count = 0 for first line + \@IEEEbuildpreamble{#2}\relax% build the preamble and put it into \@IEEEtrantmptoksA + % put in the column for the equation number + \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first + \toks0={##}% + % advance the \@IEEEeqncolcnt for the isolation col, this helps with error checking + \@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}% + % add the isolation column + \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% + % advance the \@IEEEeqncolcnt for the equation number col, this helps with error checking + \@IEEEappendtoksA{&\global\advance\@IEEEeqncolcnt by 1\relax}% + % add the equation number col to the preamble + \@IEEEappendtoksA{\tabskip\z@skip\hb@xt@\z@\bgroup\hss\the\toks0\egroup}% + % note \@IEEEeqnnumcols does not count the equation col or isolation col + % set the starting tabskip glue as determined by the preamble build + \tabskip=\@IEEEBPstartglue\relax + % begin the display alignment + \@IEEEeqnarrayISinnertrue% commands are now within the lines + $$\everycr{}\halign to\displaywidth\bgroup + % "exspand" the preamble + \span\the\@IEEEtrantmptoksA\cr} + +% enter isolation/strut column (or the next column if the user did not use +% every column), record the strut status, complete the columns, do the strut if needed, +% restore counters (to backout any equation setup for a next line that was never used) +% to their correct values and exit +\def\end@IEEEeqnarray{\@IEEEeqnarrayglobalizestrutstatus&\@@IEEEeqnarraycr\egroup +\if@IEEEsubeqnumpreadv\global\advance\c@IEEEsubequation\m@ne\fi +\if@IEEEeqnumpreadv\global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\fi +\global\let\@currentlabel\@IEEEcurrentlabelsave% restore current label +\global\let\@currentHref\@IEEEcurrentHrefsave% restore current href label +$$\@ignoretrue} + + +% IEEEeqnarray uses a modifed \\ instead of the plain \cr to +% end rows. This allows for things like \\*[vskip amount] +% These "cr" macros are modified versions of those for LaTeX2e's eqnarray +% the {\ifnum0=`} braces must be kept away from the last column to avoid +% altering spacing of its math, so we use & to advance to the next column +% as there is an isolation/strut column after the user's columns +\def\@IEEEeqnarraycr{\@IEEEeqnarrayglobalizestrutstatus&% save strut status and advance to next column + {\ifnum0=`}\fi + \@ifstar{% + \global\@eqpen\@M\@IEEEeqnarrayYCR + }{% + \global\@eqpen\interdisplaylinepenalty \@IEEEeqnarrayYCR + }% +} + +\def\@IEEEeqnarrayYCR{\@testopt\@IEEEeqnarrayXCR\z@skip} + +\def\@IEEEeqnarrayXCR[#1]{% + \ifnum0=`{\fi}% + \@@IEEEeqnarraycr + \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}}% + +\def\@@IEEEeqnarraycr{\@IEEEtrantmptoksA={}% clear token register + \advance\@IEEEeqncolcnt by -1\relax% adjust col count because of the isolation column + \ifnum\@IEEEeqncolcnt>\@IEEEeqnnumcols\relax + \@IEEEclspkgerror{Too many columns within the IEEEeqnarray\MessageBreak + environment}% + {Use fewer \string &'s or put more columns in the IEEEeqnarray column\MessageBreak + specifications.}\relax% + \else + \loop% add cols if the user did not use them all + \ifnum\@IEEEeqncolcnt<\@IEEEeqnnumcols\relax + \@IEEEappendtoksA{&}% + \advance\@IEEEeqncolcnt by 1\relax% update the col count + \repeat + % this number of &'s will take us the the isolation column + \fi + % execute the &'s + \the\@IEEEtrantmptoksA% + % handle the strut/isolation column + \@IEEEeqnarrayinsertstrut% do the strut if needed + \@IEEEeqnarraystrutreset% reset the strut system for next line or IEEEeqnarray + &% and enter the equation number column + \if@eqnsw% only if we display something + \Hy@raisedlink{\hyper@anchorstart{\@currentHref}}% start a hyperref anchor + \global\@IEEEeqnumpreadvfalse\relax% displaying an equation number means + \global\@IEEEsubeqnumpreadvfalse\relax% the equation counters point to valid equations + % V1.8 Here we setup the counters, currentlabel and status for what would be the *next* + % equation line as would be the case under the current settings. However, there are two problems. + % One problem is that there might not ever be a next line. The second problem is that the user + % may later alter the meaning of a line with commands such as \IEEEyessubnumber. So, to handle + % these cases we have to record the current values of the (sub)equation counters and revert back + % to them if the next line is changed or never comes. The \if@IEEEeqnumpreadv, \if@IEEEsubeqnumpreadv + % and \@IEEEsubeqnnumrollback stuff tracks this. + % The logic to handle all this is surprisingly complex, but a nice feature of the approach here is + % that the equation counters and labels remain valid for what the line would be unless a + % \IEEEyessubnumber et al. later changes it. So, any hyperref links are always correct. + \ifnum\c@IEEEsubequation>0\relax% handle subequation + \theIEEEsubequationdis\relax + \if@IEEEsubeqnumpersist% setup for default type of next line + \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \else + % if no subeqnum persist, go ahead and setup for a new equation number + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation + \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax + \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi + \else% display a standard equation number + \theequationdis\relax + \setcounter{IEEEsubequation}{0}\relax% not really needed + \if@IEEEsubeqnumpersist% setup for default type of next line + % subequations that follow plain equations carry the same equation number e.g, 5, 5a rather than 5, 6a + \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \else + % if no subeqnum persist, go ahead and setup for a new equation number + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation + \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax + \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi + \fi% + \Hy@raisedlink{\hyper@anchorend}% end hyperref anchor + \fi% fi only if we display something + % reset the flags to indicate the default preferences of the display of equation numbers + \if@IEEEeqnumpersist\global\@eqnswtrue\else\global\@eqnswfalse\fi + \if@IEEEsubeqnumpersist\global\@eqnswtrue\fi% ditto for the subequation flag + % reset the number of columns the user actually used + \global\@IEEEeqncolcnt\z@\relax + % the real end of the line + \cr} + + + + + +% \IEEEeqnarraybox is like \IEEEeqnarray except the box form puts everything +% inside a vtop, vbox, or vcenter box depending on the letter in the second +% optional argument (t,b,c). Vbox is the default. Unlike \IEEEeqnarray, +% equation numbers are not displayed and \IEEEeqnarraybox can be nested. +% \IEEEeqnarrayboxm is for math mode (like \array) and does not put the vbox +% within an hbox. +% \IEEEeqnarrayboxt is for text mode (like \tabular) and puts the vbox within +% a \hbox{$ $} construct. +% \IEEEeqnarraybox will auto detect whether to use \IEEEeqnarrayboxm or +% \IEEEeqnarrayboxt depending on the math mode. +% The third optional argument specifies the width this box is to be set to - +% natural width is the default. +% The * forms do not add \jot line spacing +% usage: \IEEEeqnarraybox[decl][pos][width]{cols} +\def\IEEEeqnarrayboxm{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} +\def\endIEEEeqnarrayboxm{\end@IEEEeqnarraybox} +\@namedef{IEEEeqnarrayboxm*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarrayboxm*}{\end@IEEEeqnarraybox} + +\def\IEEEeqnarrayboxt{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} +\def\endIEEEeqnarrayboxt{\end@IEEEeqnarraybox} +\@namedef{IEEEeqnarrayboxt*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarrayboxt*}{\end@IEEEeqnarraybox} + +\def\IEEEeqnarraybox{\@IEEEeqnarrayboxnojotfalse\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% +\@IEEEeqnarraybox} +\def\endIEEEeqnarraybox{\end@IEEEeqnarraybox} + +\@namedef{IEEEeqnarraybox*}{\@IEEEeqnarrayboxnojottrue\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% +\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarraybox*}{\end@IEEEeqnarraybox} + +% flag to indicate if the \IEEEeqnarraybox needs to put things into an hbox{$ $} +% for \vcenter in non-math mode +\newif\if@IEEEeqnarrayboxHBOXSW% +\@IEEEeqnarrayboxHBOXSWfalse + +\def\@IEEEeqnarraybox{\relax\@ifnextchar[{\@@IEEEeqnarraybox}{\@@IEEEeqnarraybox[\relax]}} +% We have to be careful here to normalize catcodes just before acquiring the +% cols as that specification may contain punctuation which could be subject +% to document catcode changes. +\def\@@IEEEeqnarraybox[#1]{\relax\begingroup\IEEEnormalcatcodes\@ifnextchar[{\@@@IEEEeqnarraybox[#1]}{\@@@IEEEeqnarraybox[#1][b]}} +\def\@@@IEEEeqnarraybox[#1][#2]{\relax\@ifnextchar[{\@@@@IEEEeqnarraybox[#1][#2]}{\@@@@IEEEeqnarraybox[#1][#2][\relax]}} + +% #1 = decl; #2 = t,b,c; #3 = width, #4 = col specs +\def\@@@@IEEEeqnarraybox[#1][#2][#3]#4{\endgroup\@IEEEeqnarrayISinnerfalse % not yet within the lines of the halign + \@IEEEeqnarraymasterstrutsave% save current master strut values + \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default + \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise + \IEEEvisiblestrutsfalse% diagnostic mode defaults to off + % no extra space unless the user specifically requests it + \lineskip=0pt\relax% + \lineskiplimit=0pt\relax% + \baselineskip=\normalbaselineskip\relax% + \jot=\IEEEnormaljot\relax% + \mathsurround\z@\relax% no extra spacing around math + % the default end glues are zero for an \IEEEeqnarraybox + \edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPzero}% default start glue + \edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPzero}% default end glue + \edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue + \@advanceIEEEeqncolcntfalse% do not advance the col counter for each col the user uses, + % used in \IEEEeqnarraymulticol and in the preamble build + \IEEEeqnarrayboxdecl\relax% allow a way for the user to make global overrides + #1\relax% allow user to override defaults + \let\\\@IEEEeqnarrayboxcr% replace newline with one that allows optional spacing + \@IEEEbuildpreamble{#4}\relax% build the preamble and put it into \@IEEEtrantmptoksA + % add an isolation column to the preamble to stop \\'s {} from getting into the last col + \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first + \toks0={##}% + % add the isolation column to the preamble + \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% + % set the starting tabskip glue as determined by the preamble build + \tabskip=\@IEEEBPstartglue\relax + % begin the alignment + \everycr{}% + % use only the very first token to determine the positioning + \@IEEEextracttoken{#2}\relax + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: IEEEeqnarraybox position specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi + % \@IEEEextractedtoken has the first token, the rest are ignored + % if we need to put things into and hbox and go into math mode, do so now + \if@IEEEeqnarrayboxHBOXSW \leavevmode \hbox \bgroup $\fi% + % use the appropriate vbox type + \if\@IEEEextractedtoken t\relax\vtop\else\if\@IEEEextractedtoken c\relax% + \vcenter\else\vbox\fi\fi\bgroup% + \@IEEEeqnarrayISinnertrue% commands are now within the lines + \ifx#3\relax\halign\else\halign to #3\relax\fi% + \bgroup + % "exspand" the preamble + \span\the\@IEEEtrantmptoksA\cr} + +% carry strut status and enter the isolation/strut column, +% exit from math mode if needed, and exit +\def\end@IEEEeqnarraybox{\@IEEEeqnarrayglobalizestrutstatus% carry strut status +&% enter isolation/strut column +\@IEEEeqnarrayinsertstrut% do strut if needed +\@IEEEeqnarraymasterstrutrestore% restore the previous master strut values +% reset the strut system for next IEEEeqnarray +% (sets local strut values back to previous master strut values) +\@IEEEeqnarraystrutreset% +% ensure last line, exit from halign, close vbox +\crcr\egroup\egroup% +% exit from math mode and close hbox if needed +\if@IEEEeqnarrayboxHBOXSW $\egroup\fi} + + + +% IEEEeqnarraybox uses a modifed \\ instead of the plain \cr to +% end rows. This allows for things like \\[vskip amount] +% This "cr" macros are modified versions those for LaTeX2e's eqnarray +% For IEEEeqnarraybox, \\* is the same as \\ +% the {\ifnum0=`} braces must be kept away from the last column to avoid +% altering spacing of its math, so we use & to advance to the isolation/strut column +% carry strut status into isolation/strut column +\def\@IEEEeqnarrayboxcr{\@IEEEeqnarrayglobalizestrutstatus% carry strut status +&% enter isolation/strut column +\@IEEEeqnarrayinsertstrut% do strut if needed +% reset the strut system for next line or IEEEeqnarray +\@IEEEeqnarraystrutreset% +{\ifnum0=`}\fi% +\@ifstar{\@IEEEeqnarrayboxYCR}{\@IEEEeqnarrayboxYCR}} + +% test and setup the optional argument to \\[] +\def\@IEEEeqnarrayboxYCR{\@testopt\@IEEEeqnarrayboxXCR\z@skip} + +% IEEEeqnarraybox does not automatically increase line spacing by \jot +\def\@IEEEeqnarrayboxXCR[#1]{\ifnum0=`{\fi}% +\cr\noalign{\if@IEEEeqnarrayboxnojot\else\vskip\jot\fi\vskip#1\relax}} + + + +% usage: \@IEEEbuildpreamble{column specifiers} +% starts the halign preamble build +% the assembled preamble is put in \@IEEEtrantmptoksA +\def\@IEEEbuildpreamble#1{\@IEEEtrantmptoksA={}% clear token register +\let\@IEEEBPcurtype=u%current column type is not yet known +\let\@IEEEBPprevtype=s%the previous column type was the start +\let\@IEEEBPnexttype=u%next column type is not yet known +% ensure these are valid +\def\@IEEEBPcurglue={0pt plus 0pt minus 0pt}% +\def\@IEEEBPcurcolname{@IEEEdefault}% name of current column definition +% currently acquired numerically referenced glue +% use a name that is easier to remember +\let\@IEEEBPcurnum=\@IEEEtrantmpcountA% +\@IEEEBPcurnum=0% +% tracks number of columns in the preamble +\@IEEEeqnnumcols=0% +% record the default end glues +\edef\@IEEEBPstartglue{\@IEEEeqnarraycolSEPdefaultstart}% +\edef\@IEEEBPendglue{\@IEEEeqnarraycolSEPdefaultend}% +\edef\@IEEEedefMACRO{#1}\relax% fully expand the preamble to support macro containers +% now parse the user's column specifications +% \ignorespaces is used as a delimiter, need at least one trailing \relax because +% \@@IEEEbuildpreamble looks into the future +\expandafter\@@IEEEbuildpreamble\@IEEEedefMACRO\ignorespaces\relax\relax} + + +% usage: \@@IEEEbuildpreamble{current column}{next column} +% parses and builds the halign preamble +\def\@@IEEEbuildpreamble#1#2{\let\@@nextIEEEbuildpreamble=\@@IEEEbuildpreamble% +% use only the very first token to check the end +\@IEEEextracttokengroups{#1}\relax +\ifx\@IEEEextractedfirsttoken\ignorespaces\let\@@nextIEEEbuildpreamble=\@@IEEEfinishpreamble\else% +% identify current and next token type +\@IEEEgetcoltype{#1}{\@IEEEBPcurtype}{1}% current, error on invalid +\@IEEEgetcoltype{#2}{\@IEEEBPnexttype}{0}% next, no error on invalid next +% if curtype is a glue, get the glue def +\if\@IEEEBPcurtype g\@IEEEgetcurglue{#1}{\@IEEEBPcurglue}\fi% +% if curtype is a column, get the column def and set the current column name +\if\@IEEEBPcurtype c\@IEEEgetcurcol{#1}\fi% +% if curtype is a numeral, acquire the user defined glue +\if\@IEEEBPcurtype n\@IEEEprocessNcol{#1}\fi% +% process the acquired glue +\if\@IEEEBPcurtype g\@IEEEprocessGcol\fi% +% process the acquired col +\if\@IEEEBPcurtype c\@IEEEprocessCcol\fi% +% ready prevtype for next col spec. +\let\@IEEEBPprevtype=\@IEEEBPcurtype% +% be sure and put back the future token(s) as a group +\fi\@@nextIEEEbuildpreamble{#2}} + + +% usage: \@@IEEEfinishpreamble{discarded} +% executed just after preamble build is completed +% warn about zero cols, and if prevtype type = u, put in end tabskip glue +% argument is not used +\def\@@IEEEfinishpreamble#1{\ifnum\@IEEEeqnnumcols<1\relax +\@IEEEclspkgerror{No column specifiers declared for IEEEeqnarray}% +{At least one column type must be declared for each IEEEeqnarray.}% +\fi%num cols less than 1 +%if last type undefined, set default end tabskip glue +\if\@IEEEBPprevtype u\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue}\fi} + + +% usage: \@IEEEgetcoltype{col specifier}{\output}{error more} +% Identify and return the column specifier's type code in the given +% \output macro: +% n = number +% g = glue (any other char in catagory 12) +% c = letter +% e = \ignorespaces (end of sequence) +% u = undefined +% error mode: 0 = no error message, 1 = error on invalid char +\def\@IEEEgetcoltype#1#2#3{% +% use only the very first token to determine the type +\@IEEEextracttoken{#1}\relax +% \@IEEEextractedtoken has the first token, the rest are discarded +\let#2=u\relax% assume invalid until know otherwise +\ifx\@IEEEextractedtoken\ignorespaces\let#2=e\else +\ifcat\@IEEEextractedtoken\relax\else% screen out control sequences +\if0\@IEEEextractedtoken\let#2=n\else +\if1\@IEEEextractedtoken\let#2=n\else +\if2\@IEEEextractedtoken\let#2=n\else +\if3\@IEEEextractedtoken\let#2=n\else +\if4\@IEEEextractedtoken\let#2=n\else +\if5\@IEEEextractedtoken\let#2=n\else +\if6\@IEEEextractedtoken\let#2=n\else +\if7\@IEEEextractedtoken\let#2=n\else +\if8\@IEEEextractedtoken\let#2=n\else +\if9\@IEEEextractedtoken\let#2=n\else +\ifcat,\@IEEEextractedtoken\let#2=g\relax +\else\ifcat a\@IEEEextractedtoken\let#2=c\relax\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi +\if#2u\relax +\if0\noexpand#3\relax\else\@IEEEclspkgerror{Invalid character in column specifications}% +{Only letters, numerals and certain other symbols are allowed \MessageBreak +as IEEEeqnarray column specifiers.}\fi\fi} + + +% usage: \@IEEEgetcurcol{col specifier} +% verify the letter referenced column exists +% and return its name in \@IEEEBPcurcolname +% if column specifier is invalid, use the default column @IEEEdefault +\def\@IEEEgetcurcol#1{\expandafter\ifx\csname @IEEEeqnarraycolDEF#1\endcsname\@IEEEeqnarraycolisdefined% +\def\@IEEEBPcurcolname{#1}\else% invalid column name +\@IEEEclspkgerror{Invalid column type "#1" in column specifications.\MessageBreak +Using a default centering column instead}% +{You must define IEEEeqnarray column types before use.}% +\def\@IEEEBPcurcolname{@IEEEdefault}\fi} + + +% usage: \@IEEEgetcurglue{glue specifier}{\output} +% identify the predefined (punctuation) glue value +% and return it in the given output macro +\def\@IEEEgetcurglue#1#2{% +% ! = \! (neg small) -0.16667em (-3/18 em) +% , = \, (small) 0.16667em ( 3/18 em) +% : = \: (med) 0.22222em ( 4/18 em) +% ; = \; (large) 0.27778em ( 5/18 em) +% ' = \quad 1em +% " = \qquad 2em +% . = 0.5\arraycolsep +% / = \arraycolsep +% ? = 2\arraycolsep +% * = 1fil +% + = \@IEEEeqnarraycolSEPcenter +% - = \@IEEEeqnarraycolSEPzero +% Note that all em values are referenced to the math font (textfont2) fontdimen6 +% value for 1em. +% +% use only the very first token to determine the type +\@IEEEextracttoken{#1}\relax +\ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: IEEEeqnarray predefined inter-column glue type specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax +\fi +% get the math font 1em value +% LaTeX2e's NFSS2 does not preload the fonts, but \IEEEeqnarray needs +% to gain access to the math (\textfont2) font's spacing parameters. +% So we create a bogus box here that uses the math font to ensure +% that \textfont2 is loaded and ready. If this is not done, +% the \textfont2 stuff here may not work. +% Thanks to Bernd Raichle for his 1997 post on this topic. +{\setbox0=\hbox{$\displaystyle\relax$}}% +% fontdimen6 has the width of 1em (a quad). +\@IEEEtrantmpdimenA=\fontdimen6\textfont2\relax% +% identify the glue value based on the first token +% we discard anything after the first +\if!\@IEEEextractedtoken\@IEEEtrantmpdimenA=-0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if,\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if:\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.22222\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if;\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.27778\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if'\@IEEEextractedtoken\@IEEEtrantmpdimenA=1\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if"\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if.\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.5\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else +\if/\@IEEEextractedtoken\edef#2{\the\arraycolsep}\else +\if?\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else +\if *\@IEEEextractedtoken\edef#2{0pt plus 1fil minus 0pt}\else +\if+\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPcenter}\else +\if-\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPzero}\else +\edef#2{\@IEEEeqnarraycolSEPzero}% +\@IEEEclspkgerror{Invalid predefined inter-column glue type "#1" in\MessageBreak +column specifications. Using a default value of\MessageBreak +0pt instead}% +{Only !,:;'"./?*+ and - are valid predefined glue types in the\MessageBreak +IEEEeqnarray column specifications.}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + + +% usage: \@IEEEprocessNcol{digit} +% process a numerical digit from the column specification +% and look up the corresponding user defined glue value +% can transform current type from n to g or a as the user defined glue is acquired +\def\@IEEEprocessNcol#1{\if\@IEEEBPprevtype g% +\@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak +specifications. Ignoring consecutive glue specifiers\MessageBreak +after the first}% +{You cannot have two or more glue types next to each other\MessageBreak +in the IEEEeqnarray column specifications.}% +\let\@IEEEBPcurtype=a% abort this glue, future digits will be discarded +\@IEEEBPcurnum=0\relax% +\else% if we previously aborted a glue +\if\@IEEEBPprevtype a\@IEEEBPcurnum=0\let\@IEEEBPcurtype=a%maintain digit abortion +\else%acquire this number +% save the previous type before the numerical digits started +\if\@IEEEBPprevtype n\else\let\@IEEEBPprevsavedtype=\@IEEEBPprevtype\fi% +\multiply\@IEEEBPcurnum by 10\relax% +\advance\@IEEEBPcurnum by #1\relax% add in number, \relax is needed to stop TeX's number scan +\if\@IEEEBPnexttype n\else%close acquisition +\expandafter\ifx\csname @IEEEeqnarraycolSEPDEF\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname\@IEEEeqnarraycolisdefined% +\edef\@IEEEBPcurglue{\csname @IEEEeqnarraycolSEP\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname}% +\else%user glue not defined +\@IEEEclspkgerror{Invalid user defined inter-column glue type "\number\@IEEEBPcurnum" in\MessageBreak +column specifications. Using a default value of\MessageBreak +0pt instead}% +{You must define all IEEEeqnarray numerical inter-column glue types via\MessageBreak +\string\IEEEeqnarraydefcolsep \space before they are used in column specifications.}% +\edef\@IEEEBPcurglue{\@IEEEeqnarraycolSEPzero}% +\fi% glue defined or not +\let\@IEEEBPcurtype=g% change the type to reflect the acquired glue +\let\@IEEEBPprevtype=\@IEEEBPprevsavedtype% restore the prev type before this number glue +\@IEEEBPcurnum=0\relax%ready for next acquisition +\fi%close acquisition, get glue +\fi%discard or acquire number +\fi%prevtype glue or not +} + + +% process an acquired glue +% add any acquired column/glue pair to the preamble +\def\@IEEEprocessGcol{\if\@IEEEBPprevtype a\let\@IEEEBPcurtype=a%maintain previous glue abortions +\else +% if this is the start glue, save it, but do nothing else +% as this is not used in the preamble, but before +\if\@IEEEBPprevtype s\edef\@IEEEBPstartglue{\@IEEEBPcurglue}% +\else%not the start glue +\if\@IEEEBPprevtype g%ignore if back to back glues +\@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak +specifications. Ignoring consecutive glue specifiers\MessageBreak +after the first}% +{You cannot have two or more glue types next to each other\MessageBreak +in the IEEEeqnarray column specifications.}% +\let\@IEEEBPcurtype=a% abort this glue +\else% not a back to back glue +\if\@IEEEBPprevtype c\relax% if the previoustype was a col, add column/glue pair to preamble +\ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi +\toks0={##}% +% make preamble advance col counter if this environment needs this +\if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi +% insert the column defintion into the preamble, being careful not to expand +% the column definition +\@IEEEappendtoksA{\tabskip=\@IEEEBPcurglue}% +\@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname}% +\@IEEEappendtoksA{\the\toks0}% +\@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\endgroup}% +\advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble +\else% error: non-start glue with no pending column +\@IEEEclspkgerror{Inter-column glue specifier without a prior column\MessageBreak +type in the column specifications. Ignoring this glue\MessageBreak +specifier}% +{Except for the first and last positions, glue can be placed only\MessageBreak +between column types.}% +\let\@IEEEBPcurtype=a% abort this glue +\fi% previous was a column +\fi% back-to-back glues +\fi% is start column glue +\fi% prev type not a +} + + +% process an acquired letter referenced column and, if necessary, add it to the preamble +\def\@IEEEprocessCcol{\if\@IEEEBPnexttype g\else +\if\@IEEEBPnexttype n\else +% we have a column followed by something other than a glue (or numeral glue) +% so we must add this column to the preamble now +\ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi%col separator for those after the first +\if\@IEEEBPnexttype e\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue\relax}\else%put in end glue +\@IEEEappendtoksA{\tabskip=\@IEEEeqnarraycolSEPdefaultmid\relax}\fi% or default mid glue +\toks0={##}% +% make preamble advance col counter if this environment needs this +\if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi +% insert the column definition into the preamble, being careful not to expand +% the column definition +\@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname}% +\@IEEEappendtoksA{\the\toks0}% +\@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\endgroup}% +\advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble +\fi%next type not numeral +\fi%next type not glue +} + + +%% +%% END OF IEEEeqnarray DEFINITIONS +%% + + + + + +% set up the running headers and footers +% +% header and footer font and size specifications +\def\@IEEEheaderstyle{\normalfont\scriptsize} +\def\@IEEEfooterstyle{\normalfont\scriptsize} +% +% compsoc uses sans-serif headers and footers +\ifCLASSOPTIONcompsoc + \def\@IEEEheaderstyle{\normalfont\sffamily\scriptsize} + \def\@IEEEfooterstyle{\normalfont\sffamily\scriptsize} +\fi + + +% standard page style, ps@headings +\def\ps@headings{% default to standard twoside headers, no footers +% will change later if the mode requires otherwise +\def\@oddhead{\hbox{}\@IEEEheaderstyle\rightmark\hfil\thepage}\relax +\def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\let\@oddfoot\@empty +\let\@evenfoot\@empty +\ifCLASSOPTIONtechnote + % technote twoside + \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax + \def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\fi +\ifCLASSOPTIONdraftcls + % draft footers + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax +\fi +% oneside +\if@twoside\else + % standard one side headers + \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax + \let\@evenhead\@empty + \ifCLASSOPTIONdraftcls + % oneside draft footers + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \let\@evenfoot\@empty + \fi +\fi +% turn off headers for conferences +\ifCLASSOPTIONconference + \let\@oddhead\@empty + \let\@evenhead\@empty +\fi +% turn off footers for draftclsnofoot +\ifCLASSOPTIONdraftclsnofoot + \let\@oddfoot\@empty + \let\@evenfoot\@empty +\fi} + + +% title page style, ps@IEEEtitlepagestyle +\def\ps@IEEEtitlepagestyle{% default title page headers, no footers +\def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax +\def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\let\@oddfoot\@empty +\let\@evenfoot\@empty +% will change later if the mode requires otherwise +\ifCLASSOPTIONdraftcls + % draft footers + \ifCLASSOPTIONdraftclsnofoot\else + % but only if not draftclsnofoot + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax + \fi +\else + % all nondraft mode footers + \if@IEEEusingpubid + % for title pages that are using a pubid + % do not repeat pubid on the title page if using a peer review cover page + \ifCLASSOPTIONpeerreview\else + % for noncompsoc papers, the pubid uses footnotesize and + % is at the same vertical position as where the last baseline would normally be + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \ifCLASSOPTIONcompsoc + % for compsoc papers, the pubid is at the same vertical position as the normal footer + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \fi + \fi + \fi +\fi +% turn off headers for conferences +\ifCLASSOPTIONconference + \let\@oddhead\@empty + \let\@evenhead\@empty +\fi} + + +% peer review cover page style, ps@IEEEpeerreviewcoverpagestyle +\def\ps@IEEEpeerreviewcoverpagestyle{% default peer review cover no headers, no footers +\let\@oddhead\@empty +\let\@evenhead\@empty +\let\@oddfoot\@empty +\let\@evenfoot\@empty +% will change later if the mode requires otherwise +\ifCLASSOPTIONdraftcls + % draft footers + \ifCLASSOPTIONdraftclsnofoot\else + % but only if not draftclsnofoot + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax + \fi +\else + % all nondraft mode footers + \if@IEEEusingpubid + % for peer review cover pages that are using a pubid + % for noncompsoc papers, the pubid uses footnotesize and + % is at the same vertical position as where the last baseline would normally be + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \ifCLASSOPTIONcompsoc + % for compsoc papers, the pubid is at the same vertical position as the normal footer + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \fi + \fi +\fi} + + + +%% Defines the command for putting the header. +%% Note that all the text is forced into uppercase, if you have some text +%% that needs to be in lower case, for instance et. al., then either manually +%% set \leftmark and \rightmark or use \MakeLowercase{et. al.} within the +%% arguments to \markboth. +%% V1.7b add \protect to work with Babel +\def\markboth#1#2{\def\leftmark{\MakeUppercase{\protect#1}}% +\def\rightmark{\MakeUppercase{\protect#2}}} + +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} + + + + +%% CITATION AND BIBLIOGRAPHY COMMANDS +%% +%% V1.6 no longer supports the older, nonstandard \shortcite and \citename setup stuff +% +% +% Modify Latex2e \@citex to separate citations with "], [" +\def\@citex[#1]#2{% + \let\@citea\@empty + \@cite{\@for\@citeb:=#2\do + {\@citea\def\@citea{], [}% + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi + \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}% + \G@refundefinedtrue + \@latex@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {\hbox{\csname b@\@citeb\endcsname}}}}{#1}} + +% V1.6 we create hooks for the optional use of Donald Arseneau's +% cite.sty package. cite.sty is "smart" and will notice that the +% following format controls are already defined and will not +% redefine them. The result will be the proper sorting of the +% citation numbers and auto detection of 3 or more entry "ranges" - +% all in IEEE style: [1], [2], [5]--[7], [12] +% This also allows for an optional note, i.e., \cite[mynote]{..}. +% If the \cite with note has more than one reference, the note will +% be applied to the last of the listed references. It is generally +% desired that if a note is given, only one reference is listed in +% that \cite. +% Thanks to Mr. Arseneau for providing the required format arguments +% to produce the IEEE style. +\def\citepunct{], [} +\def\citedash{]--[} + +% V1.7 default to using same font for urls made by url.sty +\AtBeginDocument{\csname url@samestyle\endcsname} + +% V1.6 class files should always provide these +\def\newblock{\hskip .11em\@plus.33em\@minus.07em} +\let\@openbib@code\@empty +% V1.8b article.cls is now providing these too +% we do not use \@mkboth, nor alter the page style +\newenvironment{theindex} + {\if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi + \twocolumn[\section*{\indexname}]% + \parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \columnseprule \z@ + \columnsep 35\p@ + \let\item\@idxitem} + {\if@restonecol\onecolumn\else\clearpage\fi} +\newcommand\@idxitem{\par\hangindent 40\p@} +\newcommand\subitem{\@idxitem \hspace*{20\p@}} +\newcommand\subsubitem{\@idxitem \hspace*{30\p@}} +\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} + + + +% Provide support for the control entries of IEEEtran.bst V1.00 and later. +% V1.7 optional argument allows for a different aux file to be specified in +% order to handle multiple bibliographies. For example, with multibib.sty: +% \newcites{sec}{Secondary Literature} +% \bstctlcite[@auxoutsec]{BSTcontrolhak} +\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}} +\def\@bstctlcite[#1]#2{\@bsphack + \@for\@citeb:=#2\do{% + \edef\@citeb{\expandafter\@firstofone\@citeb}% + \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}% + \@esphack} + +% \IEEEnoauxwrite{} allows for citations that do not add to or affect +% the order of the existing citation list. Can be useful for \cite +% within \thanks{}. +\DeclareRobustCommand{\IEEEnoauxwrite}[1]{\relax +\if@filesw +\@fileswfalse +#1\relax\relax\relax\relax\relax +\@fileswtrue +\else +#1\relax\relax\relax\relax\relax +\fi} + +% V1.6 provide a way for a user to execute a command just before +% a given reference number - used to insert a \newpage to balance +% the columns on the last page +\edef\@IEEEtriggerrefnum{0} % the default of zero means that + % the command is not executed +\def\@IEEEtriggercmd{\newpage} + +% allow the user to alter the triggered command +\long\def\IEEEtriggercmd#1{\long\def\@IEEEtriggercmd{#1}} + +% allow user a way to specify the reference number just before the +% command is executed +\def\IEEEtriggeratref#1{\@IEEEtrantmpcountA=#1% +\edef\@IEEEtriggerrefnum{\the\@IEEEtrantmpcountA}}% + +% trigger command at the given reference +\def\@IEEEbibitemprefix{\@IEEEtrantmpcountA=\@IEEEtriggerrefnum\relax% +\advance\@IEEEtrantmpcountA by -1\relax% +\ifnum\c@enumiv=\@IEEEtrantmpcountA\relax\@IEEEtriggercmd\relax\fi} + + +\def\@biblabel#1{[#1]} + +% compsoc journals and conferences left align the reference numbers +\@IEEEcompsoconly{\def\@biblabel#1{[#1]\hfill}} + +% controls bib item spacing +\def\IEEEbibitemsep{0pt plus .5pt} + +\@IEEEcompsocconfonly{\def\IEEEbibitemsep{0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}} + + +\def\thebibliography#1{\section*{\refname}% + \addcontentsline{toc}{section}{\refname}% + % V1.6 add some rubber space here and provide a command trigger + \footnotesize\vskip 0.3\baselineskip plus 0.1\baselineskip minus 0.1\baselineskip% + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep\relax + \itemsep \IEEEbibitemsep\relax + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \let\@IEEElatexbibitem\bibitem% + \def\bibitem{\@IEEEbibitemprefix\@IEEElatexbibitem}% +\def\newblock{\hskip .11em plus .33em minus .07em}% +% originally: +% \sloppy\clubpenalty4000\widowpenalty4000% +% by adding the \interlinepenalty here, we make it more +% difficult, but not impossible, for LaTeX to break within a reference. +% The IEEE almost never breaks a reference (but they do it more often with +% technotes). You may get an underfull vbox warning around the bibliography, +% but the final result will be much more like what the IEEE will publish. +% MDS 11/2000 +\ifCLASSOPTIONtechnote\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty100% +\else\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty500\fi% + \sfcode`\.=1000\relax} +\let\endthebibliography=\endlist + + + + +% TITLE PAGE COMMANDS +% +% +% \IEEEmembership is used to produce the sublargesize italic font used to indicate author +% IEEE membership. compsoc uses a large size sans slant font +\def\IEEEmembership#1{{\@IEEEnotcompsoconly{\sublargesize}\normalfont\@IEEEcompsoconly{\sffamily}\textit{#1}}} + + +% \IEEEauthorrefmark{} produces a footnote type symbol to indicate author affiliation. +% When given an argument of 1 to 9, \IEEEauthorrefmark{} follows the standard LaTeX footnote +% symbol sequence convention. However, for arguments 10 and above, \IEEEauthorrefmark{} +% reverts to using lower case roman numerals, so it cannot overflow. Do note that you +% cannot use \footnotemark[] in place of \IEEEauthorrefmark{} within \author as the footnote +% symbols will have been turned off to prevent \thanks from creating footnote marks. +% \IEEEauthorrefmark{} produces a symbol that appears to LaTeX as having zero vertical +% height - this allows for a more compact line packing, but the user must ensure that +% the interline spacing is large enough to prevent \IEEEauthorrefmark{} from colliding +% with the text above. +% V1.7 make this a robust command +% V1.8 transmag uses an arabic author affiliation symbol +\ifCLASSOPTIONtransmag +\DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize #1}}} +\else +\DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or% + \mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger% + \or \ddagger\ddagger \else\textsuperscript{\expandafter\romannumeral#1}\fi}}}} +\fi + + +% FONT CONTROLS AND SPACINGS FOR CONFERENCE MODE AUTHOR NAME AND AFFILIATION BLOCKS +% +% The default font styles for the author name and affiliation blocks (confmode) +\def\@IEEEauthorblockNstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize} +\def\@IEEEauthorblockAstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\@IEEEcompsocconfonly{\itshape}\normalsize} +% The default if the user does not use an author block +\def\@IEEEauthordefaulttextstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize} + +% adjustment spacing from title (or special paper notice) to author name blocks (confmode) +% can be negative +\def\@IEEEauthorblockconfadjspace{-0.25em} +% compsoc conferences need more space here +\@IEEEcompsocconfonly{\def\@IEEEauthorblockconfadjspace{0.75\@IEEEnormalsizeunitybaselineskip}} + +% spacing between name and affiliation blocks (confmode) +% This can be negative. +% The IEEE doesn't want any added spacing here, but I will leave these +% controls in place in case they ever change their mind. +% Personally, I like 0.75ex. +%\def\@IEEEauthorblockNtopspace{0.75ex} +%\def\@IEEEauthorblockAtopspace{0.75ex} +\def\@IEEEauthorblockNtopspace{0.0ex} +\def\@IEEEauthorblockAtopspace{0.0ex} +\ifCLASSOPTIONtransmag +% transmag uses one line of space above first affiliation block +\def\@IEEEauthorblockAtopspace{1\@IEEEnormalsizeunitybaselineskip} +\fi + +% baseline spacing within name and affiliation blocks (confmode) +% must be positive, spacings below certain values will make +% the position of line of text sensitive to the contents of the +% line above it i.e., whether or not the prior line has descenders, +% subscripts, etc. For this reason it is a good idea to keep +% these above 2.6ex +\def\@IEEEauthorblockNinterlinespace{2.6ex} +\def\@IEEEauthorblockAinterlinespace{2.75ex} + +% This tracks the required strut size. +% See the \@IEEEauthorhalign command for the actual default value used. +\def\@IEEEauthorblockXinterlinespace{2.7ex} + +% variables to retain font size and style across groups +% values given here have no effect as they will be overwritten later +\gdef\@IEEESAVESTATEfontsize{10} +\gdef\@IEEESAVESTATEfontbaselineskip{12} +\gdef\@IEEESAVESTATEfontencoding{OT1} +\gdef\@IEEESAVESTATEfontfamily{ptm} +\gdef\@IEEESAVESTATEfontseries{m} +\gdef\@IEEESAVESTATEfontshape{n} + +% saves the current font attributes +\def\@IEEEcurfontSAVE{\global\let\@IEEESAVESTATEfontsize\f@size% +\global\let\@IEEESAVESTATEfontbaselineskip\f@baselineskip% +\global\let\@IEEESAVESTATEfontencoding\f@encoding% +\global\let\@IEEESAVESTATEfontfamily\f@family% +\global\let\@IEEESAVESTATEfontseries\f@series% +\global\let\@IEEESAVESTATEfontshape\f@shape} + +% restores the saved font attributes +\def\@IEEEcurfontRESTORE{\fontsize{\@IEEESAVESTATEfontsize}{\@IEEESAVESTATEfontbaselineskip}% +\fontencoding{\@IEEESAVESTATEfontencoding}% +\fontfamily{\@IEEESAVESTATEfontfamily}% +\fontseries{\@IEEESAVESTATEfontseries}% +\fontshape{\@IEEESAVESTATEfontshape}% +\selectfont} + + +% variable to indicate if the current block is the first block in the column +\newif\if@IEEEprevauthorblockincol \@IEEEprevauthorblockincolfalse + + +% the command places a strut with height and depth = \@IEEEauthorblockXinterlinespace +% we use this technique to have complete manual control over the spacing of the lines +% within the halign environment. +% We set the below baseline portion at 30%, the above +% baseline portion at 70% of the total length. +% Responds to changes in the document's \baselinestretch +\def\@IEEEauthorstrutrule{\@IEEEtrantmpdimenA\@IEEEauthorblockXinterlinespace% +\@IEEEtrantmpdimenA=\baselinestretch\@IEEEtrantmpdimenA% +\rule[-0.3\@IEEEtrantmpdimenA]{0pt}{\@IEEEtrantmpdimenA}} + + +% blocks to hold the authors' names and affilations. +% Makes formatting easy for conferences +% +% use real definitions in conference mode +% name block +\def\IEEEauthorblockN#1{\relax\@IEEEauthorblockNstyle% set the default text style +\gdef\@IEEEauthorblockXinterlinespace{0pt}% disable strut for spacer row +% the \expandafter hides the \cr in conditional tex, see the array.sty docs +% for details, probably not needed here as the \cr is in a macro +% do a spacer row if needed +\if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockNtopspaceline\fi +\global\@IEEEprevauthorblockincoltrue% we now have a block in this column +%restore the correct strut value +\gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockNinterlinespace}% +% input the author names +#1% +% end the row if the user did not already +\crcr} +% spacer row for names +\def\@IEEEauthorblockNtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockNtopspace}} +% +% affiliation block +\def\IEEEauthorblockA#1{\relax\@IEEEauthorblockAstyle% set the default text style +\gdef\@IEEEauthorblockXinterlinespace{0pt}%disable strut for spacer row +% the \expandafter hides the \cr in conditional tex, see the array.sty docs +% for details, probably not needed here as the \cr is in a macro +% do a spacer row if needed +\if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockAtopspaceline\fi +\global\@IEEEprevauthorblockincoltrue% we now have a block in this column +%restore the correct strut value +\gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockAinterlinespace}% +% input the author affiliations +#1% +% end the row if the user did not already +\crcr +% V1.8 transmag does not use any additional affiliation spacing after the first author +\ifCLASSOPTIONtransmag\gdef\@IEEEauthorblockAtopspace{0pt}\fi} + +% spacer row for affiliations +\def\@IEEEauthorblockAtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockAtopspace}} + + +% allow papers to compile even if author blocks are used in modes other +% than conference or peerreviewca. For such cases, we provide dummy blocks. +\ifCLASSOPTIONconference +\else + \ifCLASSOPTIONpeerreviewca\else + % not conference, peerreviewca or transmag mode + \ifCLASSOPTIONtransmag\else + \def\IEEEauthorblockN#1{#1}% + \def\IEEEauthorblockA#1{#1}% + \fi + \fi +\fi + + + +% we provide our own halign so as not to have to depend on tabular +\def\@IEEEauthorhalign{\@IEEEauthordefaulttextstyle% default text style + \lineskip=0pt\relax% disable line spacing + \lineskiplimit=0pt\relax% + \baselineskip=0pt\relax% + \@IEEEcurfontSAVE% save the current font + \mathsurround\z@\relax% no extra spacing around math + \let\\\@IEEEauthorhaligncr% replace newline with halign friendly one + \tabskip=0pt\relax% no column spacing + \everycr{}% ensure no problems here + \@IEEEprevauthorblockincolfalse% no author blocks yet + \def\@IEEEauthorblockXinterlinespace{2.7ex}% default interline space + \vtop\bgroup%vtop box + \halign\bgroup&\relax\hfil\@IEEEcurfontRESTORE\relax ##\relax + \hfil\@IEEEcurfontSAVE\@IEEEauthorstrutrule\cr} + +% ensure last line, exit from halign, close vbox +\def\end@IEEEauthorhalign{\crcr\egroup\egroup} + +% handle bogus star form +\def\@IEEEauthorhaligncr{{\ifnum0=`}\fi\@ifstar{\@@IEEEauthorhaligncr}{\@@IEEEauthorhaligncr}} + +% test and setup the optional argument to \\[] +\def\@@IEEEauthorhaligncr{\@testopt\@@@IEEEauthorhaligncr\z@skip} + +% end the line and do the optional spacer +\def\@@@IEEEauthorhaligncr[#1]{\ifnum0=`{\fi}\cr\noalign{\vskip#1\relax}} + + + +% flag to prevent multiple \and warning messages +\newif\if@IEEEWARNand +\@IEEEWARNandtrue + +% if in conference or peerreviewca modes, we support the use of \and as \author is a +% tabular environment, otherwise we warn the user that \and is invalid +% outside of conference or peerreviewca modes. +\def\and{\relax} % provide a bogus \and that we will then override + +\renewcommand{\and}[1][\relax]{\if@IEEEWARNand\typeout{** WARNING: \noexpand\and is valid only + when in conference or peerreviewca}\typeout{modes (line \the\inputlineno).}\fi\global\@IEEEWARNandfalse} + +\ifCLASSOPTIONconference% +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi +\ifCLASSOPTIONpeerreviewca +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi +% V1.8 transmag uses conference author format +\ifCLASSOPTIONtransmag +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi + +% page clearing command +% based on LaTeX2e's \cleardoublepage, but allows different page styles +% for the inserted blank pages +\def\@IEEEcleardoublepage#1{\clearpage\if@twoside\ifodd\c@page\else +\hbox{}\thispagestyle{#1}\newpage\if@twocolumn\hbox{}\thispagestyle{#1}\newpage\fi\fi\fi} + +% V1.8b hooks to allow adjustment of space above title +\def\IEEEtitletopspace{0.5\baselineskip} +% an added extra amount to allow for adjustment/offset +\def\IEEEtitletopspaceextra{0pt} + +% user command to invoke the title page +\def\maketitle{\par% + \begingroup% + \normalfont% + \def\thefootnote{}% the \thanks{} mark type is empty + \def\footnotemark{}% and kill space from \thanks within author + \let\@makefnmark\relax% V1.7, must *really* kill footnotemark to remove all \textsuperscript spacing as well. + \footnotesize% equal spacing between thanks lines + \footnotesep 0.7\baselineskip%see global setting of \footnotesep for more info + % V1.7 disable \thanks note indention for compsoc + \@IEEEcompsoconly{\long\def\@makefntext##1{\parindent 1em\noindent\hbox{\@makefnmark}##1}}% + \normalsize% + \ifCLASSOPTIONpeerreview + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \thispagestyle{IEEEpeerreviewcoverpagestyle}\@thanks% + \else + \if@twocolumn% + \ifCLASSOPTIONtechnote% + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \else + \twocolumn[{\IEEEquantizevspace{\@maketitle}[\IEEEquantizedisabletitlecmds]{0pt}[-\topskip]{\baselineskip}{\@IEEENORMtitlevspace}{\@IEEEMINtitlevspace}\@IEEEaftertitletext}]% + \fi + \else + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \fi + \thispagestyle{IEEEtitlepagestyle}\@thanks% + \fi + % pullup page for pubid if used. + \if@IEEEusingpubid + \enlargethispage{-\@IEEEpubidpullup}% + \fi + \endgroup + \setcounter{footnote}{0}\let\maketitle\relax\let\@maketitle\relax + \gdef\@thanks{}% + % v1.6b do not clear these as we will need the title again for peer review papers + % \gdef\@author{}\gdef\@title{}% + \let\thanks\relax} + + +% V1.8 parbox to format \@IEEEtitleabstractindextext +\long\def\@IEEEtitleabstractindextextbox#1{\parbox{1\textwidth}{#1}} +% V1.8 compsoc is partial width +\ifCLASSOPTIONcompsoc +% comparison with proofs suggests it's in the range of 92.1-92.3% +\long\def\@IEEEtitleabstractindextextbox#1{\parbox{0.922\textwidth}{\@IEEEcompsocnotconfonly{\rightskip\@flushglue\leftskip\z@skip}#1}} +\fi + +% formats the Title, authors names, affiliations and special paper notice +% THIS IS A CONTROLLED SPACING COMMAND! Do not allow blank lines or unintentional +% spaces to enter the definition - use % at the end of each line +\def\@maketitle{\newpage +\bgroup\par\vskip\IEEEtitletopspace\vskip\IEEEtitletopspaceextra\centering% +\ifCLASSOPTIONtechnote% technotes, V1.8a abstract and index terms are not treated differently for compsoc technotes + {\bfseries\large\@IEEEcompsoconly{\Large\sffamily}\@title\par}\vskip 1.3em{\lineskip .5em\@IEEEcompsoconly{\large\sffamily}\@author + \@IEEEspecialpapernotice\par}\relax +\else% not a technote + \vskip0.2em{\Huge\ifCLASSOPTIONtransmag\bfseries\LARGE\fi\@IEEEcompsoconly{\sffamily}\@IEEEcompsocconfonly{\normalfont\normalsize\vskip 2\@IEEEnormalsizeunitybaselineskip + \bfseries\Large}\@IEEEcompsocnotconfonly{\vskip 0.75\@IEEEnormalsizeunitybaselineskip}\@title\par}\relax + \@IEEEcompsocnotconfonly{\vskip 0.5\@IEEEnormalsizeunitybaselineskip}\vskip1.0em\par% + % V1.6 handle \author differently if in conference mode + \ifCLASSOPTIONconference% + {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par}\relax + \else% peerreviewca, peerreview or journal + \ifCLASSOPTIONpeerreviewca + % peerreviewca handles author names just like conference mode + {\@IEEEcompsoconly{\sffamily}\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par + {\@IEEEcompsoconly{\vskip 1.5em\relax + \@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\par\noindent\hfill + \IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax + \else% journal, peerreview or transmag + \ifCLASSOPTIONtransmag + % transmag also handles author names just like conference mode + % it also uses \@IEEEtitleabstractindextex, but with one line less + % space above, and one more below + {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par + {\vspace{0.5\baselineskip}\relax\@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\vspace{-1\baselineskip}\par}}\relax + \else% journal or peerreview + {\lineskip.5em\@IEEEcompsoconly{\sffamily}\sublargesize\@author\@IEEEspecialpapernotice\par + {\@IEEEcompsoconly{\vskip 1.5em\relax + \@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\par\noindent\hfill + \IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax + \fi + \fi + \fi +\fi\par\addvspace{0.5\baselineskip}\egroup} + + +% V1.7 Computer Society "diamond line" which follows index terms for nonconference papers +% V1.8a full width diamond line for single column use +\def\@IEEEcompsocdiamondlinei{\vrule depth 0pt height 0.5pt width 4cm\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\vrule depth 0pt height 0.5pt width 4cm\relax} +% V1.8a narrower width diamond line for double column use +\def\@IEEEcompsocdiamondlineii{\vrule depth 0pt height 0.5pt width 2.5cm\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\vrule depth 0pt height 0.5pt width 2.5cm\relax} +% V1.8a bare core without rules to base a last resort on for very narrow linewidths +\def\@IEEEcompsocdiamondlineiii{\mbox{}\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\mbox{}\relax} + +% V1.8a allow \IEEEcompsocdiamondline to adjust for different linewidths. +% Use \@IEEEcompsocdiamondlinei if its width is less than 0.66\linewidth (0.487 nominal for single column) +% if not, fall back to \@IEEEcompsocdiamondlineii if its width is less than 0.75\linewidth (0.659 nominal for double column) +% if all else fails, try to make a custom diamondline based on the abnormally narrow linewidth +\def\IEEEcompsocdiamondline{\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlinei}\relax +\ifdim\@IEEEtrantmpdimenA<0.66\linewidth\relax\@IEEEcompsocdiamondlinei\relax +\else +\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlineii}\relax +\ifdim\@IEEEtrantmpdimenA<0.75\linewidth\relax\@IEEEcompsocdiamondlineii\relax +\else +\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlineiii}\relax +\@IEEEtrantmpdimenB=\linewidth\relax +\addtolength{\@IEEEtrantmpdimenB}{-1\@IEEEtrantmpdimenA}\relax +\vrule depth 0pt height 0.5pt width 0.33\@IEEEtrantmpdimenB\@IEEEcompsocdiamondlineiii\vrule depth 0pt height 0.5pt width 0.33\@IEEEtrantmpdimenB\relax +\fi\fi} + + +% V1.7 standard LateX2e \thanks, but with \itshape under compsoc. Also make it a \long\def +% We also need to trigger the one-shot footnote rule +\def\@IEEEtriggeroneshotfootnoterule{\global\@IEEEenableoneshotfootnoteruletrue} + + +\long\def\thanks#1{\footnotemark + \protected@xdef\@thanks{\@thanks + \protect\footnotetext[\the\c@footnote]{\@IEEEcompsoconly{\itshape + \protect\@IEEEtriggeroneshotfootnoterule\relax}\ignorespaces#1}}} +\let\@thanks\@empty + + +% V1.7 allow \author to contain \par's. This is needed to allow \thanks to contain \par. +\long\def\author#1{\gdef\@author{#1}} + + +% in addition to setting up IEEEitemize, we need to remove a baselineskip space above and +% below it because \list's \pars introduce blank lines because of the footnote struts. +\def\@IEEEsetupcompsocitemizelist{\def\labelitemi{$\bullet$}% +\setlength{\IEEElabelindent}{0pt}\setlength{\labelsep}{1.2em}\setlength{\parskip}{0pt}% +\setlength{\partopsep}{0pt}\setlength{\topsep}{0.5\baselineskip}\vspace{-1\baselineskip}\relax} + + +% flag for fake non-compsoc \IEEEcompsocthanksitem - prevents line break on very first item +\newif\if@IEEEbreakcompsocthanksitem \@IEEEbreakcompsocthanksitemfalse + +\ifCLASSOPTIONcompsoc +% V1.7 compsoc bullet item \thanks +% also, we need to redefine this to destroy the argument in \IEEEquantizevspace +\long\def\IEEEcompsocitemizethanks#1{\relax\@IEEEbreakcompsocthanksitemfalse\footnotemark + \protected@xdef\@thanks{\@thanks + \protect\footnotetext[\the\c@footnote]{\itshape\protect\@IEEEtriggeroneshotfootnoterule + {\let\IEEEiedlistdecl\relax\protect\begin{IEEEitemize}[\protect\@IEEEsetupcompsocitemizelist]\ignorespaces#1\relax + \protect\end{IEEEitemize}}\protect\vspace{-1\baselineskip}}}} +\DeclareRobustCommand*{\IEEEcompsocthanksitem}{\item} +\else +% non-compsoc, allow for dual compilation via rerouting to normal \thanks +\long\def\IEEEcompsocitemizethanks#1{\thanks{#1}} +% redirect to "pseudo-par" \hfil\break\indent after swallowing [] from \IEEEcompsocthanksitem[] +\DeclareRobustCommand{\IEEEcompsocthanksitem}{\@ifnextchar [{\@IEEEthanksswallowoptionalarg}% +{\@IEEEthanksswallowoptionalarg[\relax]}} +% be sure and break only after first item, be sure and ignore spaces after optional argument +\def\@IEEEthanksswallowoptionalarg[#1]{\relax\if@IEEEbreakcompsocthanksitem\hfil\break +\indent\fi\@IEEEbreakcompsocthanksitemtrue\ignorespaces} +\fi + + +% V1.6b define the \IEEEpeerreviewmaketitle as needed +\ifCLASSOPTIONpeerreview +\def\IEEEpeerreviewmaketitle{\@IEEEcleardoublepage{empty}% +\ifCLASSOPTIONtwocolumn +\twocolumn[{\IEEEquantizevspace{\@IEEEpeerreviewmaketitle}[\IEEEquantizedisabletitlecmds]{0pt}[-\topskip]{\baselineskip}{\@IEEENORMtitlevspace}{\@IEEEMINtitlevspace}}] +\else +\newpage\@IEEEpeerreviewmaketitle\@IEEEstatictitlevskip +\fi +\thispagestyle{IEEEtitlepagestyle}} +\else +% \IEEEpeerreviewmaketitle does nothing if peer review option has not been selected +\def\IEEEpeerreviewmaketitle{\relax} +\fi + +% peerreview formats the repeated title like the title in journal papers. +\def\@IEEEpeerreviewmaketitle{\bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEcompsoconly{\sffamily}% +\normalfont\normalsize\vskip0.2em{\Huge\@title\par}\vskip1.0em\par +\par\addvspace{0.5\baselineskip}\egroup} + + + +% V1.6 +% this is a static rubber spacer between the title/authors and the main text +% used for single column text, or when the title appears in the first column +% of two column text (technotes). +\def\@IEEEstatictitlevskip{{\normalfont\normalsize +% adjust spacing to next text +% v1.6b handle peer review papers +\ifCLASSOPTIONpeerreview +% for peer review papers, the same value is used for both title pages +% regardless of the other paper modes + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip +\else + \ifCLASSOPTIONconference% conference + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip% + \else% + \ifCLASSOPTIONtechnote% technote + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip% + \else% journal uses more space + \vskip 2.5\baselineskip plus 0.75\baselineskip minus 0.375\baselineskip% + \fi + \fi +\fi}} + + +% set the nominal and minimum values for the quantized title spacer +% the quantization algorithm will not allow the spacer size to +% become less than \@IEEEMINtitlevspace - instead it will be lengthened +% default to journal values +\def\@IEEENORMtitlevspace{2.5\baselineskip} +\def\@IEEEMINtitlevspace{2\baselineskip} +% conferences and technotes need tighter spacing +\ifCLASSOPTIONconference% conference + \def\@IEEENORMtitlevspace{1\baselineskip} + \def\@IEEEMINtitlevspace{0.75\baselineskip} +\fi +\ifCLASSOPTIONtechnote% technote + \def\@IEEENORMtitlevspace{1\baselineskip} + \def\@IEEEMINtitlevspace{0.75\baselineskip} +\fi + + +% V1.8a +\def\IEEEquantizevspace{\begingroup\@ifstar{\@IEEEquantizevspacestarformtrue\@IEEEquantizevspace}{\@IEEEquantizevspacestarformfalse\@IEEEquantizevspace}} +% \IEEEquantizevspace[output dimen register]{object}[object decl] +% {top baselineskip} +% [offset][prevdepth][lineskip limit][lineskip] +% {unit height}{nominal vspace}{minimum vspace} +% +% Calculates and creates the vspace needed to make the combined height with +% the given object an integer multiple of the given unit height. This command +% is more general than the older \@IEEEdynamictitlevspace it replaces. +% +% The star form has no effect at present, but is reserved for future use. +% +% If the optional argument [output dimen register] is given, the calculated +% vspace height is stored in the given output dimen (or skip) register +% and no other action is taken, otherwise the object followed by a vspace* +% of the appropriate height is evaluated/output. +% +% The optional object decl (declarations) is code that is evaluated just +% before the object's height is evaluated. Its intented purpose is to allow +% for the alteration or disabling of code within the object during internal +% height evaluation (e.g., \long\def\thanks#1{\relax} ). +% This special code is not invoked if/when the object is rendered at the end. +% +% The nominal vspace is the target value of the added vspace and the minimum +% vspace is the lower allowed limit. The vspacer will be the value that achieves +% integral overall height, in terms of the given unit height, that is closest +% to the nominal vspace and that is not less than the specified minimum vspace. +% +% The line spacing algorithm of TeX is somewhat involved and requires special +% care with regard to the first line of a vertical list (which is indicated +% when \prevdepth is -1000pt or less). top baselineskip specifies the +% baselineskip or topskip used prior to the object. If the height of the +% first line of the object is greater than the given top baselineskip, then +% the top baselineskip is subtracted from the height of the first line and +% that difference is considered along with the rest of the object height +% (because the object will be shifted down by an amount = +% top line height - top baselineskip). Otherwise, the height of the first line +% of the object is ignored as far as the calculations are concerned. +% This algorithm is adequate for objects that appear at the top of a page +% (e.g., titles) where \topskip spacing is used. +% +% However, as explained on page 78 of the TeXbook, interline spacing is more +% complex when \baselineskip is being used (indicated by \prevdepth > +% -1000pt). The four optional parameters offset, prevdepth, lineskip limit and +% lineskip are assumed to be equal to be 0pt, \prevdepth, \lineskiplimit and +% \lineskip, respectively, if they are omitted. +% +% The prevdepth is the depth of the line before the object, the lineskip limit +% specifies how close the top of the object can come to the bottom of the +% previous line before \baselineskip is ignored and \lineskip is inserted +% between the object and the line above it. Lineskip does not come into +% play unless the first line of the object is high enough to "get too close" +% (as specified by lineskiplimit) to the line before it. The the prevdepth, +% lineskip limit, and lineskip optional parameters are not needed for the +% first object/line on a page (i.e., prevdepth <= -1000pt) where the simplier +% \topskip spacing rules are in effect. +% +% Offset is a manual adjustment that is added to the height calculations of +% object irrespective of the value of \prevdepth. It is useful when the top +% baselineskip will result in a noninteger unit height object placement even +% if the object itself has integral height. e.g., a footnotesize baselineskip +% is used before the object, thus an offset of, say -3pt, can be given as a +% correction. + +% Common combinations of these parameters include: +% +% top baselineskip: (and default values for offset, prevdepth, etc.) +% \topskip % for objects that appear at the top of a page +% \maxdimen % always ignore the height of the top line +% 0pt % always consider any positive height of the top line +% +% for objects to appear inline in normal text: +% top baselineskip = \baselineskip +% +% set prevdepth = -1000pt and top baselineskip = 0pt to consider the +% overall height of the object without any other external skip +% consideration + +\newif\if@IEEEquantizevspacestarform % flag to indicate star form +\newif\if@IEEEquantizevspaceuseoutdimenreg % flag to indicate output dimen register is to be used +% Use our own private registers because the object could contain a +% structure that uses the existing tmp scratch pad registers +\newdimen\@IEEEquantizeheightA +\newdimen\@IEEEquantizeheightB +\newdimen\@IEEEquantizeheightC +\newdimen\@IEEEquantizeprevdepth % need to save this early as can change +\newcount\@IEEEquantizemultiple +\newbox\@IEEEquantizeboxA + + +\def\@IEEEquantizevspace{\@ifnextchar [{\@IEEEquantizevspaceuseoutdimenregtrue\@@IEEEquantizevspace}{\@IEEEquantizevspaceuseoutdimenregfalse\@@IEEEquantizevspace[]}} + + +\long\def\@@IEEEquantizevspace[#1]#2{\relax +% acquire and store +% #1 optional output dimen register +% #2 object +\edef\@IEEEquantizeoutdimenreg{#1}\relax +% allow for object specifications that contain parameters +\@IEEEtrantmptoksA={#2}\relax +\long\edef\@IEEEquantizeobject{\the\@IEEEtrantmptoksA}\relax +\@ifnextchar [{\@@@IEEEquantizevspace}{\@@@IEEEquantizevspace[\relax]}} + +\long\def\@@@IEEEquantizevspace[#1]#2{\relax +% acquire and store +% [#1] optional object decl, is \relax if not given by user +% #2 top baselineskip +% allow for object decl specifications that have parameters +\@IEEEtrantmptoksA={#1}\relax +\long\edef\@IEEEquantizeobjectdecl{\the\@IEEEtrantmptoksA}\relax +\edef\@IEEEquantizetopbaselineskip{#2}\ivIEEEquantizevspace} + +% acquire optional argument set and store +% [offset][prevdepth][lineskip limit][lineskip] +\def\ivIEEEquantizevspace{\@ifnextchar [{\@vIEEEquantizevspace}{\@vIEEEquantizevspace[0pt]}} +\def\@vIEEEquantizevspace[#1]{\edef\@IEEEquantizeoffset{#1}\@ifnextchar [{\@viIEEEquantizevspace}{\@viIEEEquantizevspace[\prevdepth]}} +\def\@viIEEEquantizevspace[#1]{\@IEEEquantizeprevdepth=#1\relax\@ifnextchar [{\@viiIEEEquantizevspace}{\@viiIEEEquantizevspace[\lineskiplimit]}} +\def\@viiIEEEquantizevspace[#1]{\edef\@IEEEquantizelineskiplimit{#1}\@ifnextchar [{\@viiiIEEEquantizevspace}{\@viiiIEEEquantizevspace[\lineskip]}} +\def\@viiiIEEEquantizevspace[#1]{\edef\@IEEEquantizelineskip{#1}\@ixIEEEquantizevspace} + +% main routine +\def\@ixIEEEquantizevspace#1#2#3{\relax +\edef\@IEEEquantizeunitheight{#1}\relax +\edef\@IEEEquantizenomvspace{#2}\relax +\edef\@IEEEquantizeminvspace{#3}\relax +% \@IEEEquantizeoutdimenreg +% \@IEEEquantizeobject +% \@IEEEquantizeobjectdecl +% \@IEEEquantizetopbaselineskip +% \@IEEEquantizeoffset +% \@IEEEquantizeprevdepth +% \@IEEEquantizelineskiplimit +% \@IEEEquantizelineskip +% \@IEEEquantizeunitheight +% \@IEEEquantizenomvspace +% \@IEEEquantizeminvspace +% get overall height of object +\setbox\@IEEEquantizeboxA\vbox{\begingroup\@IEEEquantizeobjectdecl\@IEEEquantizeobject\relax\endgroup}\relax +\@IEEEquantizeheightA\ht\@IEEEquantizeboxA\relax +% get height of first line of object +\setbox\@IEEEquantizeboxA\vtop{\begingroup\@IEEEquantizeobjectdecl\@IEEEquantizeobject\relax\endgroup}\relax +\@IEEEquantizeheightB\ht\@IEEEquantizeboxA\relax +\ifdim\@IEEEquantizeprevdepth>-1000pt\relax % prevdepth > -1000pf means full baselineskip\lineskip rules in effect +% lineskip spacing rule takes effect if height of top line > baselineskip - prevdepth - lineskiplimit, +% otherwise the baselineskip rule is in effect and the height of the first line does not matter at all. +\@IEEEquantizeheightC=\@IEEEquantizetopbaselineskip\relax +\advance\@IEEEquantizeheightC-\@IEEEquantizeprevdepth\relax +\advance\@IEEEquantizeheightC-\@IEEEquantizelineskiplimit\relax % this works even though \@IEEEquantizelineskiplimit is a macro because TeX allows --10pt notation +\ifdim\@IEEEquantizeheightB>\@IEEEquantizeheightC\relax +% lineskip spacing rule is in effect i.e., the object is going to be shifted down relative to the +% baselineskip set position by its top line height (already a part of the total height) + prevdepth + lineskip - baselineskip +\advance\@IEEEquantizeheightA\@IEEEquantizeprevdepth\relax +\advance\@IEEEquantizeheightA\@IEEEquantizelineskip\relax +\advance\@IEEEquantizeheightA-\@IEEEquantizetopbaselineskip\relax +\else +% height of first line <= \@IEEEquantizetopbaselineskip - \@IEEEquantizeprevdepth - \@IEEEquantizelineskiplimit +% standard baselineskip rules are in effect, so don't consider height of first line +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightB\relax +\fi +% +\else % prevdepth <= -1000pt, simplier \topskip type rules in effect +\ifdim\@IEEEquantizeheightB>\@IEEEquantizetopbaselineskip +% height of top line (already included in the total height) in excess of +% baselineskip is the amount it will be downshifted +\advance\@IEEEquantizeheightA-\@IEEEquantizetopbaselineskip\relax +\else +% height of first line is irrelevant, remove it +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightB\relax +\fi +\fi % prevdepth <= -1000pt +% +% adjust height for any manual offset +\advance\@IEEEquantizeheightA\@IEEEquantizeoffset\relax +% add in nominal spacer +\advance\@IEEEquantizeheightA\@IEEEquantizenomvspace\relax +% check for nonzero unitheight +\@IEEEquantizeheightB=\@IEEEquantizeunitheight\relax +\ifnum\@IEEEquantizeheightB=0\relax +\@IEEEclspkgerror{IEEEquantizevspace unit height cannot be zero. Assuming 10pt.}% +{Division by zero is not allowed.} +\@IEEEquantizeheightB=10pt\relax +\fi +% get integer number of lines +\@IEEEquantizemultiple=\@IEEEquantizeheightA\relax +\divide\@IEEEquantizemultiple\@IEEEquantizeheightB\relax +% set A to contain the excess height over the \@IEEEquantizemultiple of lines +% A = height - multiple*unitheight +\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\multiply\@IEEEquantizeheightC\@IEEEquantizemultiple\relax +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightC\relax +% set B to contain the height short of \@IEEEquantizemultiple+1 of lines +% B = unitheight - A +\advance\@IEEEquantizeheightB-\@IEEEquantizeheightA\relax +% choose A or B based on which is closer +\@IEEEquantizeheightC\@IEEEquantizenomvspace\relax +\ifdim\@IEEEquantizeheightA<\@IEEEquantizeheightB\relax +% C = nomvspace - A, go with lower +\advance\@IEEEquantizeheightC-\@IEEEquantizeheightA\relax +\else +% C = nomvspace + B, go with upper +\advance\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\fi +% if violate lower bound, use next integer bound +\ifdim\@IEEEquantizeheightC<\@IEEEquantizeminvspace\relax +% A + B = unitheight +\advance\@IEEEquantizeheightC\@IEEEquantizeheightA\relax +\advance\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\fi +% export object and spacer outside of group +\global\let\@IEEEquantizeobjectout\@IEEEquantizeobject\relax +\global\@IEEEquantizeheightC\@IEEEquantizeheightC\relax +\endgroup +\if@IEEEquantizevspaceuseoutdimenreg +\@IEEEquantizeoutdimenreg=\@IEEEquantizeheightC\relax +\else +\@IEEEquantizeobjectout\relax +\vskip\@IEEEquantizeheightC\relax +\fi} + + +% user command to disable all global assignments, possible use within object decl +\def\IEEEquantizedisableglobal{\let\global\relax +\let\gdef\def +\let\xdef\edef} +% user command to allow for the disabling of \thanks and other commands, possible use within object decl +\def\IEEEquantizedisabletitlecmds{\long\def\thanks##1{\relax}\relax +\long\def\IEEEcompsocitemizethanks##1{\relax}\def\newpage{\relax}} + + + + + +% V1.6 +% we allow the user access to the last part of the title area +% useful in emergencies such as when a different spacing is needed +% This text is NOT compensated for in the dynamic sizer. +\let\@IEEEaftertitletext=\relax +\long\def\IEEEaftertitletext#1{\def\@IEEEaftertitletext{#1}} + + +% V1.7 provide a way for users to enter abstract and keywords +% into the onecolumn title are. This text is compensated for +% in the dynamic sizer. +\let\@IEEEtitleabstractindextext=\relax +\long\def\IEEEtitleabstractindextext#1{\def\@IEEEtitleabstractindextext{#1}} + +% V1.7 provide a way for users to get the \@IEEEtitleabstractindextext if +% not in compsoc or transmag journal mode - this way abstract and keywords +% can still be placed in their conventional position if not in those modes. +\def\IEEEdisplaynontitleabstractindextext{% +% display for all conference formats +\ifCLASSOPTIONconference\@IEEEtitleabstractindextext\relax +\else% non-conferences + % V1.8a display for all technotes + \ifCLASSOPTIONtechnote\@IEEEtitleabstractindextext\relax + % V1.8a add diamond line after abstract and index terms for compsoc technotes + \@IEEEcompsoconly{\noindent\hfill\IEEEcompsocdiamondline\hfill\hbox{}\par}\relax + \else % non-conferences and non-technotes + \ifCLASSOPTIONcompsoc% display if not compsoc and not transmag + \else + \ifCLASSOPTIONtransmag + \else% not compsoc journal nor transmag journal + \@IEEEtitleabstractindextext\relax + \fi + \fi + \fi +\fi} + + +% command to allow alteration of baselinestretch, but only if the current +% baselineskip is unity. Used to tweak the compsoc abstract and keywords line spacing. +\def\@IEEEtweakunitybaselinestretch#1{{\def\baselinestretch{1}\selectfont +\global\@tempskipa\baselineskip}\ifnum\@tempskipa=\baselineskip% +\def\baselinestretch{#1}\selectfont\fi\relax} + + +% abstract and keywords are in \small, except +% for 9pt docs in which they are in \footnotesize +% Because 9pt docs use an 8pt footnotesize, \small +% becomes a rather awkward 8.5pt +\def\@IEEEabskeysecsize{\small} +\ifx\CLASSOPTIONpt\@IEEEptsizenine + \def\@IEEEabskeysecsize{\footnotesize} +\fi + +% compsoc journals use \footnotesize, compsoc conferences use normalsize +\@IEEEcompsoconly{\def\@IEEEabskeysecsize{\footnotesize}} +\@IEEEcompsocconfonly{\def\@IEEEabskeysecsize{\small}} + + +% V1.6 have abstract and keywords strip leading spaces, pars and newlines +% so that spacing is more tightly controlled. +\def\abstract{\normalfont + \if@twocolumn + \@IEEEabskeysecsize\bfseries\textit{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +% V1.6 The IEEE wants only 1 pica from end of abstract to introduction heading when in +% conference mode (the heading already has this much above it) +\def\endabstract{\relax\ifCLASSOPTIONconference\vspace{0ex}\else\vspace{1.34ex}\fi\par\if@twocolumn\else\endquotation\fi + \normalfont\normalsize} + +\def\IEEEkeywords{\normalfont + \if@twocolumn + \@IEEEabskeysecsize\bfseries\textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +\def\endIEEEkeywords{\relax\ifCLASSOPTIONtechnote\vspace{1.34ex}\else\vspace{0.67ex}\fi + \par\if@twocolumn\else\endquotation\fi% + \normalfont\normalsize} + +% V1.7 compsoc keywords index terms +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONconference% compsoc conference +\def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\bfseries + \if@twocolumn + \@IEEEabskeysecsize\noindent\textit{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} +\def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\bfseries + \if@twocolumn + \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent + \textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} + \else% compsoc not conference +\def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily + \if@twocolumn + \@IEEEabskeysecsize\noindent\textbf{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} +\def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily + \if@twocolumn + \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent + \textbf{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} + \fi +\fi + +% V1.8 transmag keywords index terms +% no abstract name, use indentation +\ifCLASSOPTIONtransmag +\def\abstract{\normalfont\parindent 1em\relax + \if@twocolumn + \@IEEEabskeysecsize\bfseries\indent + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize + \textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} + +\def\IEEEkeywords{\normalfont\parindent 1em\relax + \if@twocolumn + \@IEEEabskeysecsize\vspace{1\baselineskip}\bfseries\indent\textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\vspace{1\baselineskip}\centering\@IEEEabskeysecsize + \textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +\fi + + + +% gobbles all leading \, \\ and \par, upon finding first token that +% is not a \ , \\ or a \par, it ceases and returns that token +% +% used to strip leading \, \\ and \par from the input +% so that such things in the beginning of an environment will not +% affect the formatting of the text +\long\def\@IEEEgobbleleadPARNLSP#1{\let\@IEEEswallowthistoken=0% +\let\@IEEEgobbleleadPARNLSPtoken#1% +\let\@IEEEgobbleleadPARtoken=\par% +\let\@IEEEgobbleleadNLtoken=\\% +\let\@IEEEgobbleleadSPtoken=\ % +\def\@IEEEgobbleleadSPMACRO{\ }% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadPARtoken% +\let\@IEEEswallowthistoken=1% +\fi% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadNLtoken% +\let\@IEEEswallowthistoken=1% +\fi% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPtoken% +\let\@IEEEswallowthistoken=1% +\fi% +% a control space will come in as a macro +% when it is the last one on a line +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPMACRO% +\let\@IEEEswallowthistoken=1% +\fi% +% if we have to swallow this token, do so and taste the next one +% else spit it out and stop gobbling +\ifx\@IEEEswallowthistoken 1\let\@IEEEnextgobbleleadPARNLSP=\@IEEEgobbleleadPARNLSP\else% +\let\@IEEEnextgobbleleadPARNLSP=#1\fi% +\@IEEEnextgobbleleadPARNLSP}% + + + + +% TITLING OF SECTIONS +\def\@IEEEsectpunct{:\ \,} % Punctuation after run-in section heading (headings which are + % part of the paragraphs), need little bit more than a single space + % spacing from section number to title +% compsoc conferences use regular period/space punctuation +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference +\def\@IEEEsectpunct{.\ } +\fi\fi + + +\def\@seccntformat#1{\csname the#1dis\endcsname\hskip 0.5em\relax} + +\ifCLASSOPTIONcompsoc +% compsoc journals need extra spacing +\ifCLASSOPTIONconference\else +\def\@seccntformat#1{\csname the#1dis\endcsname\hskip 1em\relax} +\fi\fi + +%v1.7 put {} after #6 to allow for some types of user font control +%and use \@@par rather than \par +\def\@sect#1#2#3#4#5#6[#7]#8{% + \ifnum #2>\c@secnumdepth + \let\@svsec\@empty + \else + \refstepcounter{#1}% + % load section label and spacer into \@svsec + \protected@edef\@svsec{\@seccntformat{#1}\relax}% + \fi% + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@% tempskipa determines whether is treated as a high + \begingroup #6{\relax% or low level heading + \noindent % subsections are NOT indented + % print top level headings. \@svsec is label, #8 is heading title + % The IEEE does not block indent the section title text, it flows like normal + {\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\@@par}}% + \endgroup + \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else + \protect\numberline{\csname the#1\endcsname}\fi#7}% + \else % printout low level headings + % svsechd seems to swallow the trailing space, protect it with \mbox{} + % got rid of sectionmark stuff + \def\@svsechd{#6{\hskip #3\relax\@svsec #8\@IEEEsectpunct\mbox{}}% + \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else + \protect\numberline{\csname the#1\endcsname}\fi#7}}% + \fi%skip down + \@xsect{#5}} + + +% section* handler +%v1.7 put {} after #4 to allow for some types of user font control +%and use \@@par rather than \par +\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax + \ifdim \@tempskipa>\z@ + %\begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup + % The IEEE does not block indent the section title text, it flows like normal + \begingroup \noindent #4{\relax{\hskip #1}{\interlinepenalty \@M #5\@@par}}\endgroup + % svsechd swallows the trailing space, protect it with \mbox{} + \else \def\@svsechd{#4{\hskip #1\relax #5\@IEEEsectpunct\mbox{}}}\fi + \@xsect{#3}} + + +%% SECTION heading spacing and font +%% +% arguments are: #1 - sectiontype name +% (for \@sect) #2 - section level +% #3 - section heading indent +% #4 - top separation (absolute value used, neg indicates not to indent main text) +% If negative, make stretch parts negative too! +% #5 - (absolute value used) positive: bottom separation after heading, +% negative: amount to indent main text after heading +% Both #4 and #5 negative means to indent main text and use negative top separation +% #6 - font control +% You've got to have \normalfont\normalsize in the font specs below to prevent +% trouble when you do something like: +% \section{Note}{\ttfamily TT-TEXT} is known to ... +% The IEEE sometimes REALLY stretches the area before a section +% heading by up to about 0.5in. However, it may not be a good +% idea to let LaTeX have quite this much rubber. +\ifCLASSOPTIONconference% +% The IEEE wants section heading spacing to decrease for conference mode +\def\section{\@startsection{section}{1}{\z@}{1.5ex plus 1.5ex minus 0.5ex}% +{0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{1.5ex plus 1.5ex minus 0.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\else % for journals +\def\section{\@startsection{section}{1}{\z@}{3.0ex plus 1.5ex minus 1.5ex}% V1.6 3.0ex from 3.5ex +{0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{3.5ex plus 1.5ex minus 1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\fi + +% for both journals and conferences +% decided to put in a little rubber above the section, might help somebody +\def\subsubsection{\@startsection{subsubsection}{3}{\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize\itshape}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize\itshape}}% + + +% compsoc +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference +% compsoc conference +\def\section{\@startsection{section}{1}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\large\bfseries}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\sublargesize\bfseries}}% +\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{0ex}{\normalfont\normalsize\bfseries}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize}}% +\else% compsoc journals +% use negative top separation as compsoc journals do not indent paragraphs after section titles +\def\section{\@startsection{section}{1}{\z@}{-3.5ex plus -2ex minus -1.5ex}% +{0.7ex plus 1ex minus 0ex}{\normalfont\sublargesize\sffamily\bfseries\scshape}}% +% Note that subsection and smaller may not be correct for the Computer Society, +% I have to look up an example. +\def\subsection{\@startsection{subsection}{2}{\z@}{-3.5ex plus -1.5ex minus -1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\sffamily\bfseries}}% +\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex plus -1ex minus -1ex}% +{0.5ex plus 0.5ex minus 0ex}{\normalfont\normalsize\sffamily\itshape}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{-0ex plus -0.1ex minus -0.1ex}% +{0ex}{\normalfont\normalsize}}% +\fi\fi + +% transmag +\ifCLASSOPTIONtransmag +\def\subsection{\@startsection{subsection}{2}{0.75\parindent}{3.5ex plus 1.5ex minus 1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\def\subsubsection{\@startsection{subsubsection}{3}{1.25\parindent}{0.1ex plus 0.1ex minus 0.1ex}% +{0.1ex}{\normalfont\normalsize\itshape}}% +\fi + + +% V1.8a provide for a raised line Introduction section for use with Computer +% Society papers. We have to remove any spacing glue after the section +% heading and then remove the blank line for the new paragraph after it. +% LaTeX's section handler alters \everypar and we need to propogate those +% changes outside of the \parbox lest there be spacing problems at the top +% of the next section. +\def\IEEEraisesectionheading#1{\noindent\raisebox{1.5\baselineskip}[0pt][0pt]{\parbox[b]{\columnwidth}{#1\unskip\global\everypar=\everypar}}\vspace{-1\baselineskip}\vspace{-\parskip}\par} + + + +%% ENVIRONMENTS +% "box" symbols at end of proofs +\def\IEEEQEDclosed{\mbox{\rule[0pt]{1.3ex}{1.3ex}}} % for a filled box +% V1.6 some journals use an open box instead that will just fit around a closed one +\def\IEEEQEDopen{{\setlength{\fboxsep}{0pt}\setlength{\fboxrule}{0.2pt}\fbox{\rule[0pt]{0pt}{1.3ex}\rule[0pt]{1.3ex}{0pt}}}} +\ifCLASSOPTIONcompsoc +\def\IEEEQED{\IEEEQEDopen} % default to open for compsoc +\else +\def\IEEEQED{\IEEEQEDclosed} % otherwise default to closed +\fi + +%V1.8 flag to indicate if QED symbol is to be shown +\newif\if@IEEEQEDshow \@IEEEQEDshowtrue +\def\IEEEproofindentspace{2\parindent}% V1.8 allow user to change indentation amount if desired +% v1.7 name change to avoid namespace collision with amsthm. Also add support +% for an optional argument. +\def\IEEEproof{\@ifnextchar[{\@IEEEproof}{\@IEEEproof[\IEEEproofname]}} +\def\@IEEEproof[#1]{\@IEEEQEDshowtrue\par\noindent\hspace{\IEEEproofindentspace}{\itshape #1: }} +\def\endIEEEproof{\if@IEEEQEDshow\hspace*{\fill}\nobreakspace\IEEEQED\fi\par} +% qedhere for equation environments, similar to AMS \qedhere +\def\IEEEQEDhereeqn{\global\@IEEEQEDshowfalse\eqno\let\eqno\relax\let\leqno\relax + \let\veqno\relax\hbox{\IEEEQED}} +% IEEE style qedhere for IEEEeqnarray and other environments +\def\IEEEQEDhere{\global\@IEEEQEDshowfalse\IEEEQED} +% command to disable QED at end of IEEEproof +\def\IEEEQEDoff{\global\@IEEEQEDshowfalse} + + +%\itemindent is set to \z@ by list, so define new temporary variable +\newdimen\@IEEEtmpitemindent + +\ifCLASSOPTIONcompsoc +% V1.8a compsoc uses bold theorem titles, a period instead of a colon, vertical spacing, and hanging indentation +% V1.8 allow long theorem names to break across lines. +% Thanks to Miquel Payaro for reporting this. +\def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\relax + \topsep 0.2\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip + \rmfamily\trivlist\hangindent\parindent% + \item[]\textit{\bfseries\noindent #1\ #2.} \itemindent\@IEEEtmpitemindent\relax} +\def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\relax +\topsep 0.2\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip +\rmfamily\trivlist\hangindent\parindent% +% V1.6 The IEEE is back to using () around theorem names which are also in italics +% Thanks to Christian Peel for reporting this. + \item[]\textit{\bfseries\noindent #1\ #2\ (#3).} \itemindent\@IEEEtmpitemindent\relax} +% V1.7 remove bogus \unskip that caused equations in theorems to collide with +% lines below. +\def\@endtheorem{\endtrivlist\vskip 0.25\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip} +\else +% +% noncompsoc +% +% V1.8 allow long theorem names to break across lines. +% Thanks to Miquel Payaro for reporting this. +\def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\relax\topsep 0pt\rmfamily\trivlist% + \item[]\textit{\indent #1\ #2:} \itemindent\@IEEEtmpitemindent\relax} +\def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\relax\topsep 0pt\rmfamily \trivlist% +% V1.6 The IEEE is back to using () around theorem names which are also in italics +% Thanks to Christian Peel for reporting this. + \item[]\textit{\indent #1\ #2\ (#3):} \itemindent\@IEEEtmpitemindent\relax} +% V1.7 remove bogus \unskip that caused equations in theorems to collide with +% lines below. +\def\@endtheorem{\endtrivlist} +\fi + + + +% V1.6 +% display command for the section the theorem is in - so that \thesection +% is not used as this will be in Roman numerals when we want arabic. +% LaTeX2e uses \def\@thmcounter#1{\noexpand\arabic{#1}} for the theorem number +% (second part) display and \def\@thmcountersep{.} as a separator. +% V1.7 intercept calls to the section counter and reroute to \@IEEEthmcounterinsection +% to allow \appendix(ices} to override as needed. +% +% special handler for sections, allows appendix(ices) to override +\gdef\@IEEEthmcounterinsection#1{\arabic{#1}} +% string macro +\edef\@IEEEstringsection{section} + +% redefine the #1#2[#3] form of newtheorem to use a hook to \@IEEEthmcounterinsection +% if section in_counter is used +\def\@xnthm#1#2[#3]{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@newctr{#1}[#3]% + \edef\@IEEEstringtmp{#3} + \ifx\@IEEEstringtmp\@IEEEstringsection + \expandafter\xdef\csname the#1\endcsname{% + \noexpand\@IEEEthmcounterinsection{#3}\@thmcountersep + \@thmcounter{#1}}% + \else + \expandafter\xdef\csname the#1\endcsname{% + \expandafter\noexpand\csname the#3\endcsname \@thmcountersep + \@thmcounter{#1}}% + \fi + \global\@namedef{#1}{\@thm{#1}{#2}}% + \global\@namedef{end#1}{\@endtheorem}}} + + + +%% SET UP THE DEFAULT PAGESTYLE +\pagestyle{headings} +\pagenumbering{arabic} + +% normally the page counter starts at 1 +\setcounter{page}{1} +% however, for peerreview the cover sheet is page 0 or page -1 +% (for duplex printing) +\ifCLASSOPTIONpeerreview + \if@twoside + \setcounter{page}{-1} + \else + \setcounter{page}{0} + \fi +\fi + +% standard book class behavior - let bottom line float up and down as +% needed when single sided +\ifCLASSOPTIONtwoside\else\raggedbottom\fi +% if two column - turn on twocolumn, allow word spacings to stretch more and +% enforce a rigid position for the last lines +\ifCLASSOPTIONtwocolumn +% the peer review option delays invoking twocolumn + \ifCLASSOPTIONpeerreview\else + \twocolumn + \fi +\sloppy +\flushbottom +\fi + + + + +% \APPENDIX and \APPENDICES definitions + +% This is the \@ifmtarg command from the LaTeX ifmtarg package +% by Peter Wilson (CUA) and Donald Arseneau +% \@ifmtarg is used to determine if an argument to a command +% is present or not. +% For instance: +% \@ifmtarg{#1}{\typeout{empty}}{\typeout{has something}} +% \@ifmtarg is used with our redefined \section command if +% \appendices is invoked. +% The command \section will behave slightly differently depending +% on whether the user specifies a title: +% \section{My appendix title} +% or not: +% \section{} +% This way, we can eliminate the blank lines where the title +% would be, and the unneeded : after Appendix in the table of +% contents +\begingroup +\catcode`\Q=3 +\long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil} +\long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4} +\endgroup +% end of \@ifmtarg defs + + +% V1.7 +% command that allows the one time saving of the original definition +% of section to \@IEEEappendixsavesection for \appendix or \appendices +% we don't save \section here as it may be redefined later by other +% packages (hyperref.sty, etc.) +\def\@IEEEsaveoriginalsectiononce{\let\@IEEEappendixsavesection\section +\let\@IEEEsaveoriginalsectiononce\relax} + +% neat trick to grab and process the argument from \section{argument} +% we process differently if the user invoked \section{} with no +% argument (title) +% note we reroute the call to the old \section* +\def\@IEEEprocessthesectionargument#1{% +\@ifmtarg{#1}{% +\@IEEEappendixsavesection*{\appendixname\nobreakspace\thesectiondis}% +\addcontentsline{toc}{section}{\appendixname\nobreakspace\thesection}}{% +\@IEEEappendixsavesection*{\appendixname\nobreakspace\thesectiondis\\* #1}% +\addcontentsline{toc}{section}{\appendixname\nobreakspace\thesection: #1}}} + +% we use this if the user calls \section{} after +% \appendix-- which has no meaning. So, we ignore the +% command and its argument. Then, warn the user. +\def\@IEEEdestroythesectionargument#1{\typeout{** WARNING: Ignoring useless +\protect\section\space in Appendix (line \the\inputlineno).}} + + +% remember \thesection forms will be displayed in \ref calls +% and in the Table of Contents. +% The \sectiondis form is used in the actual heading itself + +% appendix command for one single appendix +% normally has no heading. However, if you want a +% heading, you can do so via the optional argument: +% \appendix[Optional Heading] +\def\appendix{\relax} +\renewcommand{\appendix}[1][]{\@IEEEsaveoriginalsectiononce\par + % v1.6 keep hyperref's identifiers unique + \gdef\theHsection{Appendix.A}% + % v1.6 adjust hyperref's string name for the section + \xdef\Hy@chapapp{appendix}% + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{subsubsection}{0}% + \setcounter{paragraph}{0}% + \gdef\thesection{A}% + \gdef\thesectiondis{}% + \gdef\thesubsection{\Alph{subsection}}% + \gdef\@IEEEthmcounterinsection##1{A} + \refstepcounter{section}% update the \ref counter + \@ifmtarg{#1}{\@IEEEappendixsavesection*{\appendixname}% + \addcontentsline{toc}{section}{\appendixname}}{% + \@IEEEappendixsavesection*{\appendixname\nobreakspace\\* #1}% + \addcontentsline{toc}{section}{\appendixname: #1}}% + % redefine \section command for appendix + % leave \section* as is + \def\section{\@ifstar{\@IEEEappendixsavesection*}{% + \@IEEEdestroythesectionargument}}% throw out the argument + % of the normal form +} + + + +% appendices command for multiple appendices +% user then calls \section with an argument (possibly empty) to +% declare the individual appendices +\def\appendices{\@IEEEsaveoriginalsectiononce\par + % v1.6 keep hyperref's identifiers unique + \gdef\theHsection{Appendix.\Alph{section}}% + % v1.6 adjust hyperref's string name for the section + \xdef\Hy@chapapp{appendix}% + \setcounter{section}{-1}% we want \refstepcounter to use section 0 + \setcounter{subsection}{0}% + \setcounter{subsubsection}{0}% + \setcounter{paragraph}{0}% + \ifCLASSOPTIONromanappendices% + \gdef\thesection{\Roman{section}}% + \gdef\thesectiondis{\Roman{section}}% + \@IEEEcompsocconfonly{\gdef\thesectiondis{\Roman{section}.}}% + \gdef\@IEEEthmcounterinsection##1{A\arabic{##1}} + \else% + \gdef\thesection{\Alph{section}}% + \gdef\thesectiondis{\Alph{section}}% + \@IEEEcompsocconfonly{\gdef\thesectiondis{\Alph{section}.}}% + \gdef\@IEEEthmcounterinsection##1{\Alph{##1}} + \fi% + \refstepcounter{section}% update the \ref counter + \setcounter{section}{0}% NEXT \section will be the FIRST appendix + % redefine \section command for appendices + % leave \section* as is + \def\section{\@ifstar{\@IEEEappendixsavesection*}{% process the *-form + \refstepcounter{section}% or is a new section so, + \@IEEEprocessthesectionargument}}% process the argument + % of the normal form +} + + + +% V1.7 compoc uses nonbold drop cap and small caps word style +\ifCLASSOPTIONcompsoc + \def\IEEEPARstartFONTSTYLE{\mdseries} + \def\IEEEPARstartWORDFONTSTYLE{\scshape} + \def\IEEEPARstartWORDCAPSTYLE{\relax} +\fi +% +% +% \IEEEPARstart +% Definition for the big two line drop cap letter at the beginning of the +% first paragraph of journal papers. The first argument is the first letter +% of the first word, the second argument is the remaining letters of the +% first word which will be rendered in upper case. +% In V1.6 this has been completely rewritten to: +% +% 1. no longer have problems when the user begins an environment +% within the paragraph that uses \IEEEPARstart. +% 2. auto-detect and use the current font family +% 3. revise handling of the space at the end of the first word so that +% interword glue will now work as normal. +% 4. produce correctly aligned edges for the (two) indented lines. +% +% We generalize things via control macros - playing with these is fun too. +% +% V1.7 added more control macros to make it easy for IEEEtrantools.sty users +% to change the font style. +% +% the number of lines that are indented to clear it +% may need to increase if using decenders +\providecommand{\IEEEPARstartDROPLINES}{2} +% minimum number of lines left on a page to allow a \@IEEEPARstart +% Does not take into consideration rubber shrink, so it tends to +% be overly cautious +\providecommand{\IEEEPARstartMINPAGELINES}{2} +% V1.7 the height of the drop cap is adjusted to match the height of this text +% in the current font (when \IEEEPARstart is called). +\providecommand{\IEEEPARstartHEIGHTTEXT}{T} +% the depth the letter is lowered below the baseline +% the height (and size) of the letter is determined by the sum +% of this value and the height of the \IEEEPARstartHEIGHTTEXT in the current +% font. It is a good idea to set this value in terms of the baselineskip +% so that it can respond to changes therein. +\providecommand{\IEEEPARstartDROPDEPTH}{1.1\baselineskip} +% V1.7 the font the drop cap will be rendered in, +% can take zero or one argument. +\providecommand{\IEEEPARstartFONTSTYLE}{\bfseries} +% V1.7 any additional, non-font related commands needed to modify +% the drop cap letter, can take zero or one argument. +\providecommand{\IEEEPARstartCAPSTYLE}{\MakeUppercase} +% V1.7 the font that will be used to render the rest of the word, +% can take zero or one argument. +\providecommand{\IEEEPARstartWORDFONTSTYLE}{\relax} +% V1.7 any additional, non-font related commands needed to modify +% the rest of the word, can take zero or one argument. +\providecommand{\IEEEPARstartWORDCAPSTYLE}{\MakeUppercase} +% This is the horizontal separation distance from the drop letter to the main text. +% Lengths that depend on the font (e.g., ex, em, etc.) will be referenced +% to the font that is active when \IEEEPARstart is called. +\providecommand{\IEEEPARstartSEP}{0.15em} +% V1.7 horizontal offset applied to the left of the drop cap. +\providecommand{\IEEEPARstartHOFFSET}{0em} +% V1.7 Italic correction command applied at the end of the drop cap. +\providecommand{\IEEEPARstartITLCORRECT}{\/} + +% width of the letter output, set globally. Can be used in \IEEEPARstartSEP +% or \IEEEPARstartHOFFSET, but not the height lengths. +\newdimen\IEEEPARstartletwidth +\IEEEPARstartletwidth 0pt\relax + +% definition of \IEEEPARstart +% THIS IS A CONTROLLED SPACING AREA, DO NOT ALLOW SPACES WITHIN THESE LINES +% +% The token \@IEEEPARstartfont will be globally defined after the first use +% of \IEEEPARstart and will be a font command which creates the big letter +% The first argument is the first letter of the first word and the second +% argument is the rest of the first word(s). +\def\IEEEPARstart#1#2{\par{% +% if this page does not have enough space, break it and lets start +% on a new one +\@IEEEtranneedspace{\IEEEPARstartMINPAGELINES\baselineskip}{\relax}% +% V1.7 move this up here in case user uses \textbf for \IEEEPARstartFONTSTYLE +% which uses command \leavevmode which causes an unwanted \indent to be issued +\noindent +% calculate the desired height of the big letter +% it extends from the top of \IEEEPARstartHEIGHTTEXT in the current font +% down to \IEEEPARstartDROPDEPTH below the current baseline +\settoheight{\@IEEEtrantmpdimenA}{\IEEEPARstartHEIGHTTEXT}% +\addtolength{\@IEEEtrantmpdimenA}{\IEEEPARstartDROPDEPTH}% +% extract the name of the current font in bold +% and place it in \@IEEEPARstartFONTNAME +\def\@IEEEPARstartGETFIRSTWORD##1 ##2\relax{##1}% +{\IEEEPARstartFONTSTYLE{\selectfont\edef\@IEEEPARstartFONTNAMESPACE{\fontname\font\space}% +\xdef\@IEEEPARstartFONTNAME{\expandafter\@IEEEPARstartGETFIRSTWORD\@IEEEPARstartFONTNAMESPACE\relax}}}% +% define a font based on this name with a point size equal to the desired +% height of the drop letter +\font\@IEEEPARstartsubfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenA\relax% +% save this value as a counter (integer) value (sp points) +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenA% +% now get the height of the actual letter produced by this font size +\settoheight{\@IEEEtrantmpdimenB}{\@IEEEPARstartsubfont\IEEEPARstartCAPSTYLE{#1}}% +% If something bogus happens like the first argument is empty or the +% current font is strange, do not allow a zero height. +\ifdim\@IEEEtrantmpdimenB=0pt\relax% +\typeout{** WARNING: IEEEPARstart drop letter has zero height! (line \the\inputlineno)}% +\typeout{ Forcing the drop letter font size to 10pt.}% +\@IEEEtrantmpdimenB=10pt% +\fi% +% and store it as a counter +\@IEEEtrantmpcountB=\@IEEEtrantmpdimenB% +% Since a font size doesn't exactly correspond to the height of the capital +% letters in that font, the actual height of the letter, \@IEEEtrantmpcountB, +% will be less than that desired, \@IEEEtrantmpcountA +% we need to raise the font size, \@IEEEtrantmpdimenA +% by \@IEEEtrantmpcountA / \@IEEEtrantmpcountB +% But, TeX doesn't have floating point division, so we have to use integer +% division. Hence the use of the counters. +% We need to reduce the denominator so that the loss of the remainder will +% have minimal affect on the accuracy of the result +\divide\@IEEEtrantmpcountB by 200% +\divide\@IEEEtrantmpcountA by \@IEEEtrantmpcountB% +% Then reequalize things when we use TeX's ability to multiply by +% floating point values +\@IEEEtrantmpdimenB=0.005\@IEEEtrantmpdimenA% +\multiply\@IEEEtrantmpdimenB by \@IEEEtrantmpcountA% +% \@IEEEPARstartfont is globaly set to the calculated font of the big letter +% We need to carry this out of the local calculation area to to create the +% big letter. +\global\font\@IEEEPARstartfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenB% +% Now set \@IEEEtrantmpdimenA to the width of the big letter +% We need to carry this out of the local calculation area to set the +% hanging indent +\settowidth{\global\@IEEEtrantmpdimenA}{\@IEEEPARstartfont +\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}}}% +% end of the isolated calculation environment +\global\IEEEPARstartletwidth\@IEEEtrantmpdimenA\relax% +% add in the extra clearance we want +\advance\@IEEEtrantmpdimenA by \IEEEPARstartSEP\relax% +% add in the optional offset +\advance\@IEEEtrantmpdimenA by \IEEEPARstartHOFFSET\relax% +% V1.7 don't allow negative offsets to produce negative hanging indents +\@IEEEtrantmpdimenB\@IEEEtrantmpdimenA +\ifnum\@IEEEtrantmpdimenB < 0 \@IEEEtrantmpdimenB 0pt\fi +% \@IEEEtrantmpdimenA has the width of the big letter plus the +% separation space and \@IEEEPARstartfont is the font we need to use +% Now, we make the letter and issue the hanging indent command +% The letter is placed in a box of zero width and height so that other +% text won't be displaced by it. +\hangindent\@IEEEtrantmpdimenB\hangafter=-\IEEEPARstartDROPLINES% +\makebox[0pt][l]{\hspace{-\@IEEEtrantmpdimenA}% +\raisebox{-\IEEEPARstartDROPDEPTH}[0pt][0pt]{\hspace{\IEEEPARstartHOFFSET}% +\@IEEEPARstartfont\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}% +\hspace{\IEEEPARstartSEP}}}% +{\IEEEPARstartWORDFONTSTYLE{\IEEEPARstartWORDCAPSTYLE{\selectfont#2}}}} + + + + +% determines if the space remaining on a given page is equal to or greater +% than the specified space of argument one +% if not, execute argument two (only if the remaining space is greater than zero) +% and issue a \newpage +% +% example: \@IEEEtranneedspace{2in}{\vfill} +% +% Does not take into consideration rubber shrinkage, so it tends to +% be overly cautious +% Based on an example posted by Donald Arseneau +% Note this macro uses \@IEEEtrantmpdimenB internally for calculations, +% so DO NOT PASS \@IEEEtrantmpdimenB to this routine +% if you need a dimen register, import with \@IEEEtrantmpdimenA instead +\def\@IEEEtranneedspace#1#2{\penalty-100\begingroup%shield temp variable +\@IEEEtrantmpdimenB\pagegoal\advance\@IEEEtrantmpdimenB-\pagetotal% space left +\ifdim #1>\@IEEEtrantmpdimenB\relax% not enough space left +\ifdim\@IEEEtrantmpdimenB>\z@\relax #2\fi% +\newpage% +\fi\endgroup} + + + +% IEEEbiography ENVIRONMENT +% Allows user to enter biography leaving place for picture (adapts to font size) +% As of V1.5, a new optional argument allows you to have a real graphic! +% V1.5 and later also fixes the "colliding biographies" which could happen when a +% biography's text was shorter than the space for the photo. +% MDS 7/2001 +% V1.6 prevent multiple biographies from making multiple TOC entries +\newif\if@IEEEbiographyTOCentrynotmade +\global\@IEEEbiographyTOCentrynotmadetrue + +% biography counter so hyperref can jump directly to the biographies +% and not just the previous section +\newcounter{IEEEbiography} +\setcounter{IEEEbiography}{0} + +% photo area size +\def\@IEEEBIOphotowidth{1.0in} % width of the biography photo area +\def\@IEEEBIOphotodepth{1.25in} % depth (height) of the biography photo area +% area cleared for photo +\def\@IEEEBIOhangwidth{1.14in} % width cleared for the biography photo area +\def\@IEEEBIOhangdepth{1.25in} % depth cleared for the biography photo area + % actual depth will be a multiple of + % \baselineskip, rounded up +\def\@IEEEBIOskipN{4\baselineskip}% nominal value of the vskip above the biography + +\newenvironment{IEEEbiography}[2][]{\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize% +\unitlength 1in\parskip=0pt\par\parindent 1em\interlinepenalty500% +% we need enough space to support the hanging indent +% the nominal value of the spacer +% and one extra line for good measure +\@IEEEtrantmpdimenA=\@IEEEBIOhangdepth% +\advance\@IEEEtrantmpdimenA by \@IEEEBIOskipN% +\advance\@IEEEtrantmpdimenA by 1\baselineskip% +% if this page does not have enough space, break it and lets start +% with a new one +\@IEEEtranneedspace{\@IEEEtrantmpdimenA}{\relax}% +% nominal spacer can strech, not shrink use 1fil so user can out stretch with \vfill +\vskip \@IEEEBIOskipN plus 1fil minus 0\baselineskip% +% the default box for where the photo goes +\def\@IEEEtempbiographybox{{\setlength{\fboxsep}{0pt}\framebox{% +\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}\centering PLACE\\ PHOTO\\ HERE \end{minipage}}}}% +% +% detect if the optional argument was supplied, this requires the +% \@ifmtarg command as defined in the appendix section above +% and if so, override the default box with what they want +\@ifmtarg{#1}{\relax}{\def\@IEEEtempbiographybox{\mbox{\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}% +\centering% +#1% +\end{minipage}}}}% end if optional argument supplied +% Make an entry into the table of contents only if we have not done so before +\if@IEEEbiographyTOCentrynotmade% +% link labels to the biography counter so hyperref will jump +% to the biography, not the previous section +\setcounter{IEEEbiography}{-1}% +\refstepcounter{IEEEbiography}% +\addcontentsline{toc}{section}{Biographies}% +\global\@IEEEbiographyTOCentrynotmadefalse% +\fi% +% one more biography +\refstepcounter{IEEEbiography}% +% Make an entry for this name into the table of contents +\addcontentsline{toc}{subsection}{#2}% +% V1.6 properly handle if a new paragraph should occur while the +% hanging indent is still active. Do this by redefining \par so +% that it will not start a new paragraph. (But it will appear to the +% user as if it did.) Also, strip any leading pars, newlines, or spaces. +\let\@IEEEBIOORGparCMD=\par% save the original \par command +\edef\par{\hfil\break\indent}% the new \par will not be a "real" \par +\settoheight{\@IEEEtrantmpdimenA}{\@IEEEtempbiographybox}% get height of biography box +\@IEEEtrantmpdimenB=\@IEEEBIOhangdepth% +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenB% countA has the hang depth +\divide\@IEEEtrantmpcountA by \baselineskip% calculates lines needed to produce the hang depth +\advance\@IEEEtrantmpcountA by 1% ensure we overestimate +% set the hanging indent +\hangindent\@IEEEBIOhangwidth% +\hangafter-\@IEEEtrantmpcountA% +% reference the top of the photo area to the top of a capital T +\settoheight{\@IEEEtrantmpdimenB}{\mbox{T}}% +% set the photo box, give it zero width and height so as not to disturb anything +\noindent\makebox[0pt][l]{\hspace{-\@IEEEBIOhangwidth}\raisebox{\@IEEEtrantmpdimenB}[0pt][0pt]{% +\raisebox{-\@IEEEBIOphotodepth}[0pt][0pt]{\@IEEEtempbiographybox}}}% +% now place the author name and begin the bio text +\noindent\textbf{#2\ }\@IEEEgobbleleadPARNLSP}{\relax\let\par=\@IEEEBIOORGparCMD\par% +% 7/2001 V1.5 detect when the biography text is shorter than the photo area +% and pad the unused area - preventing a collision from the next biography entry +% MDS +\ifnum \prevgraf <\@IEEEtrantmpcountA\relax% detect when the biography text is shorter than the photo + \advance\@IEEEtrantmpcountA by -\prevgraf% calculate how many lines we need to pad + \advance\@IEEEtrantmpcountA by -1\relax% we compensate for the fact that we indented an extra line + \@IEEEtrantmpdimenA=\baselineskip% calculate the length of the padding + \multiply\@IEEEtrantmpdimenA by \@IEEEtrantmpcountA% + \noindent\rule{0pt}{\@IEEEtrantmpdimenA}% insert an invisible support strut +\fi% +\par\normalfont} + + + +% V1.6 +% added biography without a photo environment +\newenvironment{IEEEbiographynophoto}[1]{% +% Make an entry into the table of contents only if we have not done so before +\if@IEEEbiographyTOCentrynotmade% +% link labels to the biography counter so hyperref will jump +% to the biography, not the previous section +\setcounter{IEEEbiography}{-1}% +\refstepcounter{IEEEbiography}% +\addcontentsline{toc}{section}{Biographies}% +\global\@IEEEbiographyTOCentrynotmadefalse% +\fi% +% one more biography +\refstepcounter{IEEEbiography}% +% Make an entry for this name into the table of contents +\addcontentsline{toc}{subsection}{#1}% +\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize\interlinepenalty500% +\vskip 4\baselineskip plus 1fil minus 0\baselineskip% +\parskip=0pt\par% +\noindent\textbf{#1\ }\@IEEEgobbleleadPARNLSP}{\relax\par\normalfont} + + +% provide the user with some old font commands +% got this from article.cls +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} +\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} + + +% SPECIAL PAPER NOTICE COMMANDS +% +% holds the special notice text +\def\@IEEEspecialpapernotice{\relax} + +% for special papers, like invited papers, the user can do: +% \IEEEspecialpapernotice{(Invited Paper)} before \maketitle +\def\IEEEspecialpapernotice#1{\ifCLASSOPTIONconference% +\def\@IEEEspecialpapernotice{{\sublargesize\textit{#1}\vspace*{1em}}}% +\else% +\def\@IEEEspecialpapernotice{{\\*[1.5ex]\sublargesize\textit{#1}}\vspace*{-2ex}}% +\fi} + + + + +% PUBLISHER ID COMMANDS +% to insert a publisher's ID footer +% V1.6 \IEEEpubid has been changed so that the change in page size and style +% occurs in \maketitle. \IEEEpubid must now be issued prior to \maketitle +% use \IEEEpubidadjcol as before - in the second column of the title page +% These changes allow \maketitle to take the reduced page height into +% consideration when dynamically setting the space between the author +% names and the maintext. +% +% the amount the main text is pulled up to make room for the +% publisher's ID footer +% The IEEE uses about 1.3\baselineskip for journals, +% dynamic title spacing will clean up the fraction +\def\@IEEEpubidpullup{1.3\baselineskip} +\ifCLASSOPTIONtechnote +% for technotes it must be an integer of baselineskip as there can be no +% dynamic title spacing for two column mode technotes (the title is in the +% in first column) and we should maintain an integer number of lines in the +% second column +% There are some examples (such as older issues of "Transactions on +% Information Theory") in which the IEEE really pulls the text off the ID for +% technotes - about 0.55in (or 4\baselineskip). We'll use 2\baselineskip +% and call it even. +\def\@IEEEpubidpullup{2\baselineskip} +\fi + +% V1.7 compsoc does not use a pullup +\ifCLASSOPTIONcompsoc +\def\@IEEEpubidpullup{0pt} +\fi + +% holds the ID text +\def\@IEEEpubid{\relax} + +% flag so \maketitle can tell if \IEEEpubid was called +\newif\if@IEEEusingpubid +\global\@IEEEusingpubidfalse +% issue this command in the page to have the ID at the bottom +% V1.6 use before \maketitle +\def\IEEEpubid#1{\def\@IEEEpubid{#1}\global\@IEEEusingpubidtrue} + + +% command which will pull up (shorten) the column it is executed in +% to make room for the publisher ID. Place in the second column of +% the title page when using \IEEEpubid +% Is smart enough not to do anything when in single column text or +% if the user hasn't called \IEEEpubid +% currently needed in for the second column of a page with the +% publisher ID. If not needed in future releases, please provide this +% command and define it as \relax for backward compatibility +% v1.6b do not allow command to operate if the peer review option has been +% selected because \IEEEpubidadjcol will not be on the cover page. +% V1.7 do nothing if compsoc +\def\IEEEpubidadjcol{\ifCLASSOPTIONcompsoc\else\ifCLASSOPTIONpeerreview\else +\if@twocolumn\if@IEEEusingpubid\enlargethispage{-\@IEEEpubidpullup}\fi\fi\fi\fi} + +% Special thanks to Peter Wilson, Daniel Luecking, and the other +% gurus at comp.text.tex, for helping me to understand how best to +% implement the IEEEpubid command in LaTeX. + + + +%% Lockout some commands under various conditions + +% general purpose bit bucket +\newsavebox{\@IEEEtranrubishbin} + +% flags to prevent multiple warning messages +\newif\if@IEEEWARNthanks +\newif\if@IEEEWARNIEEEPARstart +\newif\if@IEEEWARNIEEEbiography +\newif\if@IEEEWARNIEEEbiographynophoto +\newif\if@IEEEWARNIEEEpubid +\newif\if@IEEEWARNIEEEpubidadjcol +\newif\if@IEEEWARNIEEEmembership +\newif\if@IEEEWARNIEEEaftertitletext +\@IEEEWARNthankstrue +\@IEEEWARNIEEEPARstarttrue +\@IEEEWARNIEEEbiographytrue +\@IEEEWARNIEEEbiographynophototrue +\@IEEEWARNIEEEpubidtrue +\@IEEEWARNIEEEpubidadjcoltrue +\@IEEEWARNIEEEmembershiptrue +\@IEEEWARNIEEEaftertitletexttrue + + +%% Lockout some commands when in various modes, but allow them to be restored if needed +%% +% save commands which might be locked out +% so that the user can later restore them if needed +\let\@IEEESAVECMDthanks\thanks +\let\@IEEESAVECMDIEEEPARstart\IEEEPARstart +\let\@IEEESAVECMDIEEEbiography\IEEEbiography +\let\@IEEESAVECMDendIEEEbiography\endIEEEbiography +\let\@IEEESAVECMDIEEEbiographynophoto\IEEEbiographynophoto +\let\@IEEESAVECMDendIEEEbiographynophoto\endIEEEbiographynophoto +\let\@IEEESAVECMDIEEEpubid\IEEEpubid +\let\@IEEESAVECMDIEEEpubidadjcol\IEEEpubidadjcol +\let\@IEEESAVECMDIEEEmembership\IEEEmembership +\let\@IEEESAVECMDIEEEaftertitletext\IEEEaftertitletext + + +% disable \IEEEPARstart when in draft mode +% This may have originally been done because the pre-V1.6 drop letter +% algorithm had problems with a non-unity baselinestretch +% At any rate, it seems too formal to have a drop letter in a draft +% paper. +\ifCLASSOPTIONdraftcls +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** ATTENTION: \noexpand\IEEEPARstart + is disabled in draft mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} +\fi +% and for technotes +\ifCLASSOPTIONtechnote +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart + is locked out for technotes (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} +\fi + + +% lockout unneeded commands when in conference mode +\ifCLASSOPTIONconference +% when locked out, \thanks, \IEEEbiography, \IEEEbiographynophoto, \IEEEpubid, +% \IEEEmembership and \IEEEaftertitletext will all swallow their given text. +% \IEEEPARstart will output a normal character instead +% warn the user about these commands only once to prevent the console screen +% from filling up with redundant messages +\def\thanks#1{\if@IEEEWARNthanks\typeout{** WARNING: \noexpand\thanks + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNthanksfalse} +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} + + +% LaTeX treats environments and commands with optional arguments differently. +% the actual ("internal") command is stored as \\commandname +% (accessed via \csname\string\commandname\endcsname ) +% the "external" command \commandname is a macro with code to determine +% whether or not the optional argument is presented and to provide the +% default if it is absent. So, in order to save and restore such a command +% we would have to save and restore \\commandname as well. But, if LaTeX +% ever changes the way it names the internal names, the trick would break. +% Instead let us just define a new environment so that the internal +% name can be left undisturbed. +\newenvironment{@IEEEbogusbiography}[2][]{\if@IEEEWARNIEEEbiography\typeout{** WARNING: \noexpand\IEEEbiography + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographyfalse% +\setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax} +% and make biography point to our bogus biography +\let\IEEEbiography=\@IEEEbogusbiography +\let\endIEEEbiography=\end@IEEEbogusbiography + +\renewenvironment{IEEEbiographynophoto}[1]{\if@IEEEWARNIEEEbiographynophoto\typeout{** WARNING: \noexpand\IEEEbiographynophoto + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographynophotofalse% +\setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax} + +\def\IEEEpubid#1{\if@IEEEWARNIEEEpubid\typeout{** WARNING: \noexpand\IEEEpubid + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidfalse} +\def\IEEEpubidadjcol{\if@IEEEWARNIEEEpubidadjcol\typeout{** WARNING: \noexpand\IEEEpubidadjcol + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidadjcolfalse} +\def\IEEEmembership#1{\if@IEEEWARNIEEEmembership\typeout{** WARNING: \noexpand\IEEEmembership + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEmembershipfalse} +\def\IEEEaftertitletext#1{\if@IEEEWARNIEEEaftertitletext\typeout{** WARNING: \noexpand\IEEEaftertitletext + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEaftertitletextfalse} +\fi + + +% provide a way to restore the commands that are locked out +\def\IEEEoverridecommandlockouts{% +\typeout{** ATTENTION: Overriding command lockouts (line \the\inputlineno).}% +\let\thanks\@IEEESAVECMDthanks% +\let\IEEEPARstart\@IEEESAVECMDIEEEPARstart% +\let\IEEEbiography\@IEEESAVECMDIEEEbiography% +\let\endIEEEbiography\@IEEESAVECMDendIEEEbiography% +\let\IEEEbiographynophoto\@IEEESAVECMDIEEEbiographynophoto% +\let\endIEEEbiographynophoto\@IEEESAVECMDendIEEEbiographynophoto% +\let\IEEEpubid\@IEEESAVECMDIEEEpubid% +\let\IEEEpubidadjcol\@IEEESAVECMDIEEEpubidadjcol% +\let\IEEEmembership\@IEEESAVECMDIEEEmembership% +\let\IEEEaftertitletext\@IEEESAVECMDIEEEaftertitletext} + + + +% need a backslash character for typeout output +{\catcode`\|=0 \catcode`\\=12 +|xdef|@IEEEbackslash{\}} + + +% hook to allow easy disabling of all legacy warnings +\def\@IEEElegacywarn#1#2{\typeout{** ATTENTION: \@IEEEbackslash #1 is deprecated (line \the\inputlineno). +Use \@IEEEbackslash #2 instead.}} + + +% provide some legacy IEEEtran commands +\def\IEEEcompsoctitleabstractindextext{\@IEEElegacywarn{IEEEcompsoctitleabstractindextext}{IEEEtitleabstractindextext}\IEEEtitleabstractindextext} +\def\IEEEdisplaynotcompsoctitleabstractindextext{\@IEEElegacywarn{IEEEdisplaynotcompsoctitleabstractindextext}{IEEEdisplaynontitleabstractindextext}\IEEEdisplaynontitleabstractindextext} +% provide some legacy IEEEtran environments + + +% V1.8a no more support for these legacy commands +%\def\authorblockA{\@IEEElegacywarn{authorblockA}{IEEEauthorblockA}\IEEEauthorblockA} +%\def\authorblockN{\@IEEElegacywarn{authorblockN}{IEEEauthorblockN}\IEEEauthorblockN} +%\def\authorrefmark{\@IEEElegacywarn{authorrefmark}{IEEEauthorrefmark}\IEEEauthorrefmark} +%\def\PARstart{\@IEEElegacywarn{PARstart}{IEEEPARstart}\IEEEPARstart} +%\def\pubid{\@IEEElegacywarn{pubid}{IEEEpubid}\IEEEpubid} +%\def\pubidadjcol{\@IEEElegacywarn{pubidadjcol}{IEEEpubidadjcol}\IEEEpubidadjcol} +%\def\specialpapernotice{\@IEEElegacywarn{specialpapernotice}{IEEEspecialpapernotice}\IEEEspecialpapernotice} +% and environments +%\def\keywords{\@IEEElegacywarn{keywords}{IEEEkeywords}\IEEEkeywords} +%\def\endkeywords{\endIEEEkeywords} +% V1.8 no more support for legacy IED list commands +%\let\labelindent\IEEElabelindent +%\def\calcleftmargin{\@IEEElegacywarn{calcleftmargin}{IEEEcalcleftmargin}\IEEEcalcleftmargin} +%\def\setlabelwidth{\@IEEElegacywarn{setlabelwidth}{IEEEsetlabelwidth}\IEEEsetlabelwidth} +%\def\usemathlabelsep{\@IEEElegacywarn{usemathlabelsep}{IEEEusemathlabelsep}\IEEEusemathlabelsep} +%\def\iedlabeljustifyc{\@IEEElegacywarn{iedlabeljustifyc}{IEEEiedlabeljustifyc}\IEEEiedlabeljustifyc} +%\def\iedlabeljustifyl{\@IEEElegacywarn{iedlabeljustifyl}{IEEEiedlabeljustifyl}\IEEEiedlabeljustifyl} +%\def\iedlabeljustifyr{\@IEEElegacywarn{iedlabeljustifyr}{IEEEiedlabeljustifyr}\IEEEiedlabeljustifyr} +% V1.8 no more support for QED and proof stuff +%\def\QED{\@IEEElegacywarn{QED}{IEEEQED}\IEEEQED} +%\def\QEDclosed{\@IEEElegacywarn{QEDclosed}{IEEEQEDclosed}\IEEEQEDclosed} +%\def\QEDopen{\@IEEElegacywarn{QEDopen}{IEEEQEDopen}\IEEEQEDopen} +%\AtBeginDocument{\def\proof{\@IEEElegacywarn{proof}{IEEEproof}\IEEEproof}\def\endproof{\endIEEEproof}} +% V1.8 no longer support biography or biographynophoto +%\def\biography{\@IEEElegacywarn{biography}{IEEEbiography}\IEEEbiography} +%\def\biographynophoto{\@IEEElegacywarn{biographynophoto}{IEEEbiographynophoto}\IEEEbiographynophoto} +%\def\endbiography{\endIEEEbiography} +%\def\endbiographynophoto{\endIEEEbiographynophoto} +% V1.7 and later no longer supports \overrideIEEEmargins +%\def\overrideIEEEmargins{% +%\typeout{** WARNING: \string\overrideIEEEmargins \space no longer supported (line \the\inputlineno).}% +%\typeout{** Use the \string\CLASSINPUTinnersidemargin, \string\CLASSINPUToutersidemargin \space controls instead.}} + +\endinput + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of IEEEtran.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%% +% That's all folks! + diff --git a/synthetic/Training learning models with synthetic data_ assessing risk propagation.zip b/synthetic/Training learning models with synthetic data_ assessing risk propagation.zip new file mode 100644 index 0000000..5e69906 Binary files /dev/null and b/synthetic/Training learning models with synthetic data_ assessing risk propagation.zip differ diff --git a/synthetic/background.tex b/synthetic/background.tex new file mode 100644 index 0000000..9e834ff --- /dev/null +++ b/synthetic/background.tex @@ -0,0 +1,53 @@ +In this section we introduce key notions as well as previous works on which we base our study. + +\subsection{Machine learning and classification} +In classification tasks, a machine learning model is a function that maps features of a data record to its label. +This function has an architecture which describes the structure of the internal computing as well as parameters. +For instance with mono dimensional data, the affine model is $f(x) = ax+b$ where $x$ is the feature and $a$ and $b$ are the parameters. +In general the range of $f$ is $\mathbb{R}$ and we call $f(x)$ the soft label or the logit of $x$. +Because classification problems require discrete values, we apply a threshold to the soft label under which the predicted label is 0 and above which it is 1. + +Training a machine learning model means using an optimization algorithm that will find optimal parameters to minimize a loss function $l$. +In the previous example, the optimization problem is $\text{min}_{(a,b)\in\mathbb{R}^2}l(f(x),y)$ where $y$ is the ground truth: the label of $x$ in the dataset. + +\subsection{Synthetic data} +A generator is a function that takes as input a real dataset and outputs a synthetic dataset. +This definition is general enough so that the identity function is a generator. +Even though synthetic datasets are supposedly different than real world datasets. +We refer to the output of the identity generator as real data while referring to the output of another generator as synthetic data. + +In addition to the identity generator we use General Adversarial Networks (GAN)~\cite{gan}. +The goal of a GAN is to generate realistic samples given a distribution of multivariate data. +To do so a GAN leverages two neural networks: a generator and a discriminator. +The domain of the generator (its input space) is of low dimension with respect to its codomain (its output space) which has the same dimension as the data we want to generate. +For instance with 64 by 64 images, the codomain is a matrix with 64 rows and 64 columns. +To generate a new sample, we evaluate the generator on a sample of a multivariate standard normal distribution where the dimension is the domain's dimension. +This output is the new generated synthetic data point. + +The discriminator is only used when training the GAN with the goal of making sure that the generator produces realistic data. +To do so, the discriminator is a neural network with a classification goal: infer if a sample is synthetic or real. +Hence in the training procedure, the discriminator and the generator are in competition: the generator goal is to fool the discriminator into classifying synthetic data as real data. + + +\subsection{Membership inference attack} +This attack infers the membership status: whether a data record has been used in the training (member $m$) of a machine learning model or not (non-member $\bar{m}$). +%Shadow model +In practice, this attack is made by leveraging shadow models: models that imitates the behaviour of the target~\cite{shokri2017membership}. +This technique allows an attacker to construct a dataset of logits and ground truth labels by the membership status. + +%Yeom et all +Overfitting is one of the major historical difficulties of machine learning~\cite{hawkins2004problem}. +The generalization error is the difference between the average loss of members and the average loss of non-members. +The greater this error, the more the model overfits. +Yeom et all. show that overfitting is the major factor that allow membership inference attack~\cite{yeom}. +They build an attack that assume the attacker has access to a dataset of losses labeled by the membership status. +It allows them to build a model to infer the membership status from the losses of the data records. + +%DP +Differential privacy is a probabilistic definition that bound membership inference attack's success. +In practice, those guaranties are achieved through gradient clipping and additive noise in the training algorithm~\cite{abadi2016deep}. + +\subsection{Attribute inference attack} +Model predictions and especially soft labels can be dependent on a sensitive attribute such as race or sex. +For instance, the prediction of recidivism in predictive justice is dependent on the race of the guilty~\cite{EO}. +Attribute inference attack (AIA) leverage bias in model predictions to infer sensitive attributes of data records~\cite{song2020overlearning}. diff --git a/synthetic/bck/IEEEtran.cls b/synthetic/bck/IEEEtran.cls new file mode 100644 index 0000000..905a10c --- /dev/null +++ b/synthetic/bck/IEEEtran.cls @@ -0,0 +1,6347 @@ +%% +%% IEEEtran.cls 2015/08/26 version V1.8b +%% +%% This is the IEEEtran LaTeX class for authors of the Institute of +%% Electrical and Electronics Engineers (IEEE) Transactions journals and +%% conferences. +%% +%% Support sites: +%% http://www.michaelshell.org/tex/ieeetran/ +%% http://www.ctan.org/pkg/ieeetran +%% and +%% http://www.ieee.org/ +%% +%% Based on the original 1993 IEEEtran.cls, but with many bug fixes +%% and enhancements (from both JVH and MDS) over the 1996/7 version. +%% +%% +%% Contributors: +%% Gerry Murray (1993), Silvano Balemi (1993), +%% Jon Dixon (1996), Peter N"uchter (1996), +%% Juergen von Hagen (2000), and Michael Shell (2001-2014) +%% +%% +%% Copyright (c) 1993-2000 by Gerry Murray, Silvano Balemi, +%% Jon Dixon, Peter N"uchter, +%% Juergen von Hagen +%% and +%% Copyright (c) 2001-2015 by Michael Shell +%% +%% Current maintainer (V1.3 to V1.8b): Michael Shell +%% See: +%% http://www.michaelshell.org/ +%% for current contact information. +%% +%% Special thanks to Peter Wilson (CUA) and Donald Arseneau +%% for allowing the inclusion of the \@ifmtarg command +%% from their ifmtarg LaTeX package. +%% +%%************************************************************************* +%% Legal Notice: +%% This code is offered as-is without any warranty either expressed or +%% implied; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE! +%% User assumes all risk. +%% In no event shall the IEEE or any contributor to this code be liable for +%% any damages or losses, including, but not limited to, incidental, +%% consequential, or any other damages, resulting from the use or misuse +%% of any information contained here. +%% +%% All comments are the opinions of their respective authors and are not +%% necessarily endorsed by the IEEE. +%% +%% This work is distributed under the LaTeX Project Public License (LPPL) +%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used, +%% distributed and modified. A copy of the LPPL, version 1.3, is included +%% in the base LaTeX documentation of all distributions of LaTeX released +%% 2003/12/01 or later. +%% Retain all contribution notices and credits. +%% ** Modified files should be clearly indicated as such, including ** +%% ** renaming them and changing author support contact information. ** +%% +%% File list of work: IEEEtran.cls, IEEEtran_HOWTO.pdf, bare_adv.tex, +%% bare_conf.tex, bare_jrnl.tex, bare_conf_compsoc.tex, +%% bare_jrnl_compsoc.tex +%% +%% Major changes to the user interface should be indicated by an +%% increase in the version numbers. If a version is a beta, it will +%% be indicated with a BETA suffix, i.e., 1.4 BETA. +%% Small changes can be indicated by appending letters to the version +%% such as "IEEEtran_v14a.cls". +%% In all cases, \Providesclass, any \typeout messages to the user, +%% \IEEEtransversionmajor and \IEEEtransversionminor must reflect the +%% correct version information. +%% The changes should also be documented via source comments. +%%************************************************************************* +%% +% +% Available class options +% e.g., \documentclass[10pt,conference]{IEEEtran} +% +% *** choose only one from each category *** +% +% 9pt, 10pt, 11pt, 12pt +% Sets normal font size. The default is 10pt. +% +% conference, journal, technote, peerreview, peerreviewca +% determines format mode - conference papers, journal papers, +% correspondence papers (technotes), or peer review papers. The user +% should also select 9pt when using technote. peerreview is like +% journal mode, but provides for a single-column "cover" title page for +% anonymous peer review. The paper title (without the author names) is +% repeated at the top of the page after the cover page. For peer review +% papers, the \IEEEpeerreviewmaketitle command must be executed (will +% automatically be ignored for non-peerreview modes) at the place the +% cover page is to end, usually just after the abstract (keywords are +% not normally used with peer review papers). peerreviewca is like +% peerreview, but allows the author names to be entered and formatted +% as with conference mode so that author affiliation and contact +% information can be easily seen on the cover page. +% The default is journal. +% +% draft, draftcls, draftclsnofoot, final +% determines if paper is formatted as a widely spaced draft (for +% handwritten editor comments) or as a properly typeset final version. +% draftcls restricts draft mode to the class file while all other LaTeX +% packages (i.e., \usepackage{graphicx}) will behave as final - allows +% for a draft paper with visible figures, etc. draftclsnofoot is like +% draftcls, but does not display the date and the word "DRAFT" at the foot +% of the pages. If using one of the draft modes, the user will probably +% also want to select onecolumn. +% The default is final. +% +% letterpaper, a4paper, cspaper +% determines paper size: 8.5in X 11in, 210mm X 297mm or 7.875in X 10.75in. +% Changing the paper size in the standard journal and conference modes +% will not alter the typesetting of the document - only the margins will +% be affected. In particular, documents using the a4paper option will +% have reduced side margins (A4 is narrower than US letter) and a longer +% bottom margin (A4 is longer than US letter). For both cases, the top +% margins will be the same and the text will be horizontally centered. +% For the compsoc conference and draft modes, it is the margins that will +% remain constant, and thus the text area size will vary, with changes in +% the paper size. +% The cspaper option is the special ``trim'' paper size (7.875in x 10.75in) +% used in the actual publication of Computer Society journals. Under +% compsoc journal mode, this option does not alter the typesetting of the +% document. Authors should invoke the cspaper option only if requested to +% do so by the editors of the specific journal they are submitting to. +% For final submission to the IEEE, authors should generally use US letter +% (8.5 X 11in) paper unless otherwise instructed. Note that authors should +% ensure that all post-processing (ps, pdf, etc.) uses the same paper +% specificiation as the .tex document. Problems here are by far the number +% one reason for incorrect margins. IEEEtran will automatically set the +% default paper size under pdflatex (without requiring any change to +% pdftex.cfg), so this issue is more important to dvips users. Fix +% config.ps, config.pdf, or ~/.dvipsrc for dvips, or use the +% dvips -t papersize option instead as needed. For the cspaper option, +% the corresponding dvips paper name is "ieeecs". +% See the testflow documentation +% http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/testflow +% for more details on dvips paper size configuration. +% The default is letterpaper. +% +% oneside, twoside +% determines if layout follows single sided or two sided (duplex) +% printing. The only notable change is with the headings at the top of +% the pages. +% The default is oneside. +% +% onecolumn, twocolumn +% determines if text is organized into one or two columns per page. One +% column mode is usually used only with draft papers. +% The default is twocolumn. +% +% comsoc, compsoc, transmag +% Use the format of the IEEE Communications Society, IEEE Computer Society +% or IEEE Transactions on Magnetics, respectively. +% +% romanappendices +% Use the "Appendix I" convention when numbering appendices. IEEEtran.cls +% now defaults to Alpha "Appendix A" convention - the opposite of what +% v1.6b and earlier did. +% +% captionsoff +% disables the display of the figure/table captions. Some IEEE journals +% request that captions be removed and figures/tables be put on pages +% of their own at the end of an initial paper submission. The endfloat +% package can be used with this class option to achieve this format. +% +% nofonttune +% turns off tuning of the font interword spacing. Maybe useful to those +% not using the standard Times fonts or for those who have already "tuned" +% their fonts. +% The default is to enable IEEEtran to tune font parameters. +% +% +%---------- +% Available CLASSINPUTs provided (all are macros unless otherwise noted): +% \CLASSINPUTbaselinestretch +% \CLASSINPUTinnersidemargin +% \CLASSINPUToutersidemargin +% \CLASSINPUTtoptextmargin +% \CLASSINPUTbottomtextmargin +% +% Available CLASSINFOs provided: +% \ifCLASSINFOpdf (TeX if conditional) +% \CLASSINFOpaperwidth (macro) +% \CLASSINFOpaperheight (macro) +% \CLASSINFOnormalsizebaselineskip (length) +% \CLASSINFOnormalsizeunitybaselineskip (length) +% +% Available CLASSOPTIONs provided: +% all class option flags (TeX if conditionals) unless otherwise noted, +% e.g., \ifCLASSOPTIONcaptionsoff +% point size options provided as a single macro: +% \CLASSOPTIONpt +% which will be defined as 9, 10, 11, or 12 depending on the document's +% normalsize point size. +% also, class option peerreviewca implies the use of class option peerreview +% and classoption draft implies the use of class option draftcls + + + + + +\ProvidesClass{IEEEtran}[2015/08/26 V1.8b by Michael Shell] +\typeout{-- See the "IEEEtran_HOWTO" manual for usage information.} +\typeout{-- http://www.michaelshell.org/tex/ieeetran/} +\NeedsTeXFormat{LaTeX2e} + +% IEEEtran.cls version numbers, provided as of V1.3 +% These values serve as a way a .tex file can +% determine if the new features are provided. +% The version number of this IEEEtrans.cls can be obtained from +% these values. i.e., V1.4 +% KEEP THESE AS INTEGERS! i.e., NO {4a} or anything like that- +% (no need to enumerate "a" minor changes here) +\def\IEEEtransversionmajor{1} +\def\IEEEtransversionminor{8} + + +% hook to allow easy changeover to IEEEtran.cls/tools.sty error reporting +\def\@IEEEclspkgerror{\ClassError{IEEEtran}} + + +% These do nothing, but provide them like in article.cls +\newif\if@restonecol +\newif\if@titlepage + + +% class option conditionals +\newif\ifCLASSOPTIONonecolumn \CLASSOPTIONonecolumnfalse +\newif\ifCLASSOPTIONtwocolumn \CLASSOPTIONtwocolumntrue + +\newif\ifCLASSOPTIONoneside \CLASSOPTIONonesidetrue +\newif\ifCLASSOPTIONtwoside \CLASSOPTIONtwosidefalse + +\newif\ifCLASSOPTIONfinal \CLASSOPTIONfinaltrue +\newif\ifCLASSOPTIONdraft \CLASSOPTIONdraftfalse +\newif\ifCLASSOPTIONdraftcls \CLASSOPTIONdraftclsfalse +\newif\ifCLASSOPTIONdraftclsnofoot \CLASSOPTIONdraftclsnofootfalse + +\newif\ifCLASSOPTIONpeerreview \CLASSOPTIONpeerreviewfalse +\newif\ifCLASSOPTIONpeerreviewca \CLASSOPTIONpeerreviewcafalse + +\newif\ifCLASSOPTIONjournal \CLASSOPTIONjournaltrue +\newif\ifCLASSOPTIONconference \CLASSOPTIONconferencefalse +\newif\ifCLASSOPTIONtechnote \CLASSOPTIONtechnotefalse + +\newif\ifCLASSOPTIONnofonttune \CLASSOPTIONnofonttunefalse + +\newif\ifCLASSOPTIONcaptionsoff \CLASSOPTIONcaptionsofffalse + +\newif\ifCLASSOPTIONcomsoc \CLASSOPTIONcomsocfalse +\newif\ifCLASSOPTIONcompsoc \CLASSOPTIONcompsocfalse +\newif\ifCLASSOPTIONtransmag \CLASSOPTIONtransmagfalse + +\newif\ifCLASSOPTIONromanappendices \CLASSOPTIONromanappendicesfalse + + +% class info conditionals + +% indicates if pdf (via pdflatex) output +\newif\ifCLASSINFOpdf \CLASSINFOpdffalse + + +% V1.6b internal flag to show if using a4paper +\newif\if@IEEEusingAfourpaper \@IEEEusingAfourpaperfalse +% V1.6b internal flag to show if using cspaper +\newif\if@IEEEusingcspaper \@IEEEusingcspaperfalse + + +% IEEEtran class scratch pad registers +% dimen +\newdimen\@IEEEtrantmpdimenA +\newdimen\@IEEEtrantmpdimenB +\newdimen\@IEEEtrantmpdimenC +% count +\newcount\@IEEEtrantmpcountA +\newcount\@IEEEtrantmpcountB +\newcount\@IEEEtrantmpcountC +% token list +\newtoks\@IEEEtrantmptoksA + +% we use \CLASSOPTIONpt so that we can ID the point size (even for 9pt docs) +% as well as LaTeX's \@ptsize to retain some compatability with some +% external packages +\def\@ptsize{0} +% LaTeX does not support 9pt, so we set \@ptsize to 0 - same as that of 10pt +\DeclareOption{9pt}{\def\CLASSOPTIONpt{9}\def\@ptsize{0}} +\DeclareOption{10pt}{\def\CLASSOPTIONpt{10}\def\@ptsize{0}} +\DeclareOption{11pt}{\def\CLASSOPTIONpt{11}\def\@ptsize{1}} +\DeclareOption{12pt}{\def\CLASSOPTIONpt{12}\def\@ptsize{2}} + + + +\DeclareOption{letterpaper}{\setlength{\paperwidth}{8.5in}% + \setlength{\paperheight}{11in}% + \@IEEEusingAfourpaperfalse + \@IEEEusingcspaperfalse + \def\CLASSOPTIONpaper{letter}% + \def\CLASSINFOpaperwidth{8.5in}% + \def\CLASSINFOpaperheight{11in}} + + +\DeclareOption{a4paper}{\setlength{\paperwidth}{210mm}% + \setlength{\paperheight}{297mm}% + \@IEEEusingAfourpapertrue + \@IEEEusingcspaperfalse + \def\CLASSOPTIONpaper{a4}% + \def\CLASSINFOpaperwidth{210mm}% + \def\CLASSINFOpaperheight{297mm}} + +% special paper option for compsoc journals +\DeclareOption{cspaper}{\setlength{\paperwidth}{7.875in}% + \setlength{\paperheight}{10.75in}% + \@IEEEusingcspapertrue + \@IEEEusingAfourpaperfalse + \def\CLASSOPTIONpaper{ieeecs}% + \def\CLASSINFOpaperwidth{7.875in}% + \def\CLASSINFOpaperheight{10.75in}} + +\DeclareOption{oneside}{\@twosidefalse\@mparswitchfalse + \CLASSOPTIONonesidetrue\CLASSOPTIONtwosidefalse} +\DeclareOption{twoside}{\@twosidetrue\@mparswitchtrue + \CLASSOPTIONtwosidetrue\CLASSOPTIONonesidefalse} + +\DeclareOption{onecolumn}{\CLASSOPTIONonecolumntrue\CLASSOPTIONtwocolumnfalse} +\DeclareOption{twocolumn}{\CLASSOPTIONtwocolumntrue\CLASSOPTIONonecolumnfalse} + +% If the user selects draft, then this class AND any packages +% will go into draft mode. +\DeclareOption{draft}{\CLASSOPTIONdrafttrue\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofootfalse} +% draftcls is for a draft mode which will not affect any packages +% used by the document. +\DeclareOption{draftcls}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofootfalse} +% draftclsnofoot is like draftcls, but without the footer. +\DeclareOption{draftclsnofoot}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofoottrue} +\DeclareOption{final}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclsfalse + \CLASSOPTIONdraftclsnofootfalse} + +\DeclareOption{journal}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournaltrue\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{conference}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencetrue\CLASSOPTIONtechnotefalse} + +\DeclareOption{technote}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotetrue} + +\DeclareOption{peerreview}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{peerreviewca}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcatrue + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{nofonttune}{\CLASSOPTIONnofonttunetrue} + +\DeclareOption{captionsoff}{\CLASSOPTIONcaptionsofftrue} + +\DeclareOption{comsoc}{\CLASSOPTIONcomsoctrue\CLASSOPTIONcompsocfalse\CLASSOPTIONtransmagfalse} + +\DeclareOption{compsoc}{\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsoctrue\CLASSOPTIONtransmagfalse} + +\DeclareOption{transmag}{\CLASSOPTIONtransmagtrue\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsocfalse} + +\DeclareOption{romanappendices}{\CLASSOPTIONromanappendicestrue} + + +% default to US letter paper, 10pt, twocolumn, one sided, final, journal +\ExecuteOptions{letterpaper,10pt,twocolumn,oneside,final,journal} +% overrride these defaults per user requests +\ProcessOptions + + + +%% -- Command Argument Scanning Support Functions -- + +% Sets the category codes for punctuation to their normal values. +% For local use with argument scanning. +\def\IEEEnormalcatcodespunct{\catcode`\!=12 \catcode`\,=12 \catcode`\:=12 +\catcode`\;=12 \catcode`\`=12 \catcode`\'=12 \catcode`\"=12 \catcode`\.=12 +\catcode`\/=12 \catcode`\?=12 \catcode`\*=12 \catcode`\+=12 \catcode`\-=12 +\catcode`\<=12 \catcode`\>=12 \catcode`\(=12 \catcode`\)=12 \catcode`\[=12 +\catcode`\]=12 \catcode`\==12 \catcode`\|=12} +% Sets the category codes for numbers to their normal values. +% For local use with argument scanning. +\def\IEEEnormalcatcodesnum{\catcode`\0=12 \catcode`\1=12 \catcode`\2=12 +\catcode`\3=12 \catcode`\4=12 \catcode`\5=12 \catcode`\6=12 \catcode`\7=12 +\catcode`\8=12 \catcode`\9=12} +% combined action of \IEEEnormalcatcodespunct and \IEEEnormalcatcodesnum +\def\IEEEnormalcatcodes{\IEEEnormalcatcodespunct\IEEEnormalcatcodesnum} + + +% usage: \@IEEEextracttoken*{} +% \@IEEEextracttoken fully expands its argument (which it then stores in +% \@IEEEextracttokenarg) via \edef and then the meaning of the first +% nonbrace (but including the empty group) token found is assigned via \let +% to \@IEEEextractedtoken as well as stored in the macro +% \@IEEEextractedtokenmacro. Tokens that would otherwise be discarded during +% the acquisition of the first are stored in \@IEEEextractedtokensdiscarded, +% however their original relative brace nesting depths are not guaranteed to +% be preserved. +% If the argument is empty, or if a first nonbrace token does not exist (or +% is an empty group), \@IEEEextractedtoken will be \relax and +% \@IEEEextractedtokenmacro and \@IEEEextractedtokensdiscarded will be empty. +% +% For example: +% \@IEEEextracttoken{{{ab}{cd}}{{ef}g}} +% results in: +% +% \@IEEEextracttokenarg ==> a macro containing {{ab}{cd}}{{ef}g} +% \@IEEEextractedtoken ==> the letter a +% \@IEEEextractedtokenmacro ==> a macro containing a +% \@IEEEextractedtokensdiscarded ==> a macro containing bcd{ef}g +% +% the *-star form, \@IEEEextracttoken*, does not expand its argument +% contents during processing. +\def\@IEEEextracttoken{\@ifstar{\let\@IEEEextracttokendef=\def\@@IEEEextracttoken}{\let\@IEEEextracttokendef=\edef\@@IEEEextracttoken}} + +\def\@@IEEEextracttoken#1{\@IEEEextracttokendef\@IEEEextracttokenarg{#1}\relax +\def\@IEEEextractedtokensdiscarded{}\relax % initialize to empty +% if the macro is unchanged after being acquired as a single undelimited argument +% with anything after it being stripped off as a delimited argument +% we know we have one token without any enclosing braces. loop until this is true. +\let\@IEEEextracttokencurgroup\@IEEEextracttokenarg +\loop + % trap case of an empty argument as this would cause a problem with + % \@@@IEEEextracttoken's first (nondelimited) argument acquisition + \ifx\@IEEEextracttokencurgroup\@empty + \def\@IEEEextractedtokenmacro{}\relax + \else + \expandafter\@@@IEEEextracttoken\@IEEEextracttokencurgroup\@IEEEgeneralsequenceDELIMITER\relax + \fi + \ifx\@IEEEextractedtokenmacro\@IEEEextracttokencurgroup + \else + \let\@IEEEextracttokencurgroup=\@IEEEextractedtokenmacro +\repeat +% we can safely do a \let= here because there should be at most one token +% the relax is needed to handle the case of no token found +\expandafter\let\expandafter\@IEEEextractedtoken\@IEEEextractedtokenmacro\relax} + +\def\@@@IEEEextracttoken#1#2\@IEEEgeneralsequenceDELIMITER{\def\@IEEEextractedtokenmacro{#1}\relax +\def\@@IEEEextractedtokensdiscarded{#2}\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter +\@IEEEextractedtokensdiscarded\expandafter\expandafter\expandafter +{\expandafter\@@IEEEextractedtokensdiscarded\@IEEEextractedtokensdiscarded}} +%% +%% -- End of Command Argument Scanning Support Functions -- + + + +% Computer Society conditional execution command +\long\def\@IEEEcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\relax#1\relax\fi\relax} +% inverse +\long\def\@IEEEnotcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\else\relax#1\relax\fi\relax} +% compsoc conference +\long\def\@IEEEcompsocconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\relax#1\relax\fi\fi\relax} +% compsoc not conference +\long\def\@IEEEcompsocnotconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\else\relax#1\relax\fi\fi\relax} + + +% comsoc verify that newtxmath, mtpro2, mt11p or mathtime has been loaded +\def\@IEEEcomsocverifymathfont{\typeout{-- Verifying Times compatible math font.}\relax + \@ifpackageloaded{newtxmath}{\typeout{-- newtxmath loaded, OK.}}{\@@IEEEcomsocverifymathfont}} +\def\@@IEEEcomsocverifymathfont{\@ifpackageloaded{mtpro2}{\typeout{-- mtpro2 loaded, OK.}}{\@@@IEEEcomsocverifymathfont}} +\def\@@@IEEEcomsocverifymathfont{\@ifpackageloaded{mt11p}{\typeout{-- mt11p2 loaded, OK.}}{\@@@@IEEEcomsocverifymathfont}} +\def\@@@@IEEEcomsocverifymathfont{\@ifpackageloaded{mathtime}{\typeout{-- mathtime loaded, OK.}}{\@IEEEcomsocenforcemathfont}} + +% comsoc, if a Times math font was not loaded by user, enforce it +\def\@IEEEcomsocenforcemathfont{\typeout{** Times compatible math font not found, forcing.}\relax +\IfFileExists{newtxmath.sty}{\typeout{-- Found newtxmath, loading.}\RequirePackage{newtxmath}}{\@@IEEEcomsocenforcemathfont}} +\def\@@IEEEcomsocenforcemathfont{\IfFileExists{mtpro2.sty}{\typeout{-- Found mtpro2, loading.}\RequirePackage{mtpro2}}{\@@@IEEEcomsocenforcemathfont}} +\def\@@@IEEEcomsocenforcemathfont{\IfFileExists{mt11p.sty}{\typeout{-- Found mt11p, loading.}\RequirePackage{mt11p}}{\@@@@IEEEcomsocenforcemathfont}} +\def\@@@@IEEEcomsocenforcemathfont{\IfFileExists{mathtime.sty}{\typeout{-- Found mathtime, loading.}\RequirePackage{mathtime}}{\@@@@@IEEEcomsocenforcemathfont}} +% if no acceptable Times math font package found, error with newtxmath requirement +\def\@@@@@IEEEcomsocenforcemathfont{\typeout{** No Times compatible math font package found. newtxmath is required.}\RequirePackage{newtxmath}} + + +\ifCLASSOPTIONcomsoc + % ensure that if newtxmath is used, the cmintegrals option is also invoked + \PassOptionsToPackage{cmintegrals}{newtxmath} + % comsoc requires a Times like math font + % ensure this requirement is satisfied at document start + \AtBeginDocument{\@IEEEcomsocverifymathfont} +\fi + + + +% The IEEE uses Times Roman font, so we'll default to Times. +% These three commands make up the entire times.sty package. +\renewcommand{\sfdefault}{phv} +\renewcommand{\rmdefault}{ptm} +\renewcommand{\ttdefault}{pcr} + +% V1.7 compsoc nonconference papers, use Palatino/Palladio as the main text font, +% not Times Roman. +\@IEEEcompsocnotconfonly{\renewcommand{\rmdefault}{ppl}} + +% enable the selected main text font +\normalfont\selectfont + + +\ifCLASSOPTIONcomsoc + \typeout{-- Using IEEE Communications Society mode.} +\fi + +\ifCLASSOPTIONcompsoc + \typeout{-- Using IEEE Computer Society mode.} +\fi + + +% V1.7 conference notice message hook +\def\@IEEEconsolenoticeconference{\typeout{}% +\typeout{** Conference Paper **}% +\typeout{Before submitting the final camera ready copy, remember to:}% +\typeout{}% +\typeout{ 1. Manually equalize the lengths of two columns on the last page}% +\typeout{ of your paper;}% +\typeout{}% +\typeout{ 2. Ensure that any PostScript and/or PDF output post-processing}% +\typeout{ uses only Type 1 fonts and that every step in the generation}% +\typeout{ process uses the appropriate paper size.}% +\typeout{}} + + +% we can send console reminder messages to the user here +\AtEndDocument{\ifCLASSOPTIONconference\@IEEEconsolenoticeconference\fi} + + +% warn about the use of single column other than for draft mode +\ifCLASSOPTIONtwocolumn\else% + \ifCLASSOPTIONdraftcls\else% + \typeout{** ATTENTION: Single column mode is not typically used with IEEE publications.}% + \fi% +\fi + + +% V1.7 improved paper size setting code. +% Set pdfpage and dvips paper sizes. Conditional tests are similar to that +% of ifpdf.sty. Retain within {} to ensure tested macros are never altered, +% even if only effect is to set them to \relax. +% if \pdfoutput is undefined or equal to relax, output a dvips special +{\@ifundefined{pdfoutput}{\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}}{% +% pdfoutput is defined and not equal to \relax +% check for pdfpageheight existence just in case someone sets pdfoutput +% under non-pdflatex. If exists, set them regardless of value of \pdfoutput. +\@ifundefined{pdfpageheight}{\relax}{\global\pdfpagewidth\paperwidth +\global\pdfpageheight\paperheight}% +% if using \pdfoutput=0 under pdflatex, send dvips papersize special +\ifcase\pdfoutput +\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}% +\else +% we are using pdf output, set CLASSINFOpdf flag +\global\CLASSINFOpdftrue +\fi}} + +% let the user know the selected papersize +\typeout{-- Using \CLASSINFOpaperwidth\space x \CLASSINFOpaperheight\space +(\CLASSOPTIONpaper)\space paper.} + +\ifCLASSINFOpdf +\typeout{-- Using PDF output.} +\else +\typeout{-- Using DVI output.} +\fi + + +% The idea hinted here is for LaTeX to generate markleft{} and markright{} +% automatically for you after you enter \author{}, \journal{}, +% \journaldate{}, journalvol{}, \journalnum{}, etc. +% However, there may be some backward compatibility issues here as +% well as some special applications for IEEEtran.cls and special issues +% that may require the flexible \markleft{}, \markright{} and/or \markboth{}. +% We'll leave this as an open future suggestion. +%\newcommand{\journal}[1]{\def\@journal{#1}} +%\def\@journal{} + + + +% pointsize values +% used with ifx to determine the document's normal size +\def\@IEEEptsizenine{9} +\def\@IEEEptsizeten{10} +\def\@IEEEptsizeeleven{11} +\def\@IEEEptsizetwelve{12} + + + +% FONT DEFINITIONS (No sizexx.clo file needed) +% V1.6 revised font sizes, displayskip values and +% revised normalsize baselineskip to reduce underfull vbox problems +% on the 58pc = 696pt = 9.5in text height we want +% normalsize #lines/column baselineskip (aka leading) +% 9pt 63 11.0476pt (truncated down) +% 10pt 58 12pt (exact) +% 11pt 52 13.3846pt (truncated down) +% 12pt 50 13.92pt (exact) +% + +% we need to store the nominal baselineskip for the given font size +% in case baselinestretch ever changes. +% this is a dimen, so it will not hold stretch or shrink +\newdimen\@IEEEnormalsizeunitybaselineskip +\@IEEEnormalsizeunitybaselineskip\baselineskip + + + +%% ******* WARNING! ******* +%% +%% Authors should not alter font sizes, baselineskip ("leading"), +%% margins or other spacing values in an attempt to squeeze more +%% material on each page. +%% +%% The IEEE's own typesetting software will restore the correct +%% values when re-typesetting/proofing the submitted document, +%% possibly resulting in unexpected article over length charges. +%% +%% ******* WARNING! ******* + + +% 9pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\typeout{-- This is a 9 point document.} +\def\normalsize{\@setfontsize{\normalsize}{9}{11.0476pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.0476pt} +\normalsize +\abovedisplayskip 1.5ex plus 3pt minus 1pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 3pt +\belowdisplayshortskip 1.5ex plus 3pt minus 1pt +\def\small{\@setfontsize{\small}{8.5}{10pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}} +\def\tiny{\@setfontsize{\tiny}{5}{6pt}} +% sublargesize is the same as large - 10pt +\def\sublargesize{\@setfontsize{\sublargesize}{10}{12pt}} +\def\large{\@setfontsize{\large}{10}{12pt}} +\def\Large{\@setfontsize{\Large}{12}{14pt}} +\def\LARGE{\@setfontsize{\LARGE}{14}{17pt}} +\def\huge{\@setfontsize{\huge}{17}{20pt}} +\def\Huge{\@setfontsize{\Huge}{20}{24pt}} +\fi +% +% 10pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\typeout{-- This is a 10 point document.} +\def\normalsize{\@setfontsize{\normalsize}{10}{12.00pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{12pt} +\normalsize +\abovedisplayskip 1.5ex plus 4pt minus 2pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4pt +\belowdisplayshortskip 1.5ex plus 4pt minus 2pt +\def\small{\@setfontsize{\small}{9}{10pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}} +\def\tiny{\@setfontsize{\tiny}{5}{6pt}} +% sublargesize is a tad smaller than large - 11pt +\def\sublargesize{\@setfontsize{\sublargesize}{11}{13.4pt}} +\def\large{\@setfontsize{\large}{12}{14pt}} +\def\Large{\@setfontsize{\Large}{14}{17pt}} +\def\LARGE{\@setfontsize{\LARGE}{17}{20pt}} +\def\huge{\@setfontsize{\huge}{20}{24pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi +% +% 11pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\typeout{-- This is an 11 point document.} +\def\normalsize{\@setfontsize{\normalsize}{11}{13.3846pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.3846pt} +\normalsize +\abovedisplayskip 1.5ex plus 5pt minus 3pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5pt +\belowdisplayshortskip 1.5ex plus 5pt minus 3pt +\def\small{\@setfontsize{\small}{10}{12pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}} +\def\tiny{\@setfontsize{\tiny}{6}{7pt}} +% sublargesize is the same as large - 12pt +\def\sublargesize{\@setfontsize{\sublargesize}{12}{14pt}} +\def\large{\@setfontsize{\large}{12}{14pt}} +\def\Large{\@setfontsize{\Large}{14}{17pt}} +\def\LARGE{\@setfontsize{\LARGE}{17}{20pt}} +\def\huge{\@setfontsize{\huge}{20}{24pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi +% +% 12pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\typeout{-- This is a 12 point document.} +\def\normalsize{\@setfontsize{\normalsize}{12}{13.92pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.92pt} +\normalsize +\abovedisplayskip 1.5ex plus 6pt minus 4pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6pt +\belowdisplayshortskip 1.5ex plus 6pt minus 4pt +\def\small{\@setfontsize{\small}{10}{12pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}} +\def\tiny{\@setfontsize{\tiny}{6}{7pt}} +% sublargesize is the same as large - 14pt +\def\sublargesize{\@setfontsize{\sublargesize}{14}{17pt}} +\def\large{\@setfontsize{\large}{14}{17pt}} +\def\Large{\@setfontsize{\Large}{17}{20pt}} +\def\LARGE{\@setfontsize{\LARGE}{20}{24pt}} +\def\huge{\@setfontsize{\huge}{22}{26pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi + + + +% V1.8a compsoc font sizes +% compsoc font sizes use bp "Postscript" point units (1/72in) +% rather than the traditional pt (1/72.27) +\ifCLASSOPTIONcompsoc +% -- compsoc defaults -- +% ** will override some of these values later ** +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{11bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\def\small{\@setfontsize{\small}{8.5bp}{10bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{8bp}{9bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{7bp}{8bp}} +\def\tiny{\@setfontsize{\tiny}{5bp}{6bp}} +% sublargesize is the same as large - 10bp +\def\sublargesize{\@setfontsize{\sublargesize}{10bp}{12bp}} +\def\large{\@setfontsize{\large}{10bp}{12bp}} +\def\Large{\@setfontsize{\Large}{12bp}{14bp}} +\def\LARGE{\@setfontsize{\LARGE}{14bp}{17bp}} +\def\huge{\@setfontsize{\huge}{17bp}{20bp}} +\def\Huge{\@setfontsize{\Huge}{20bp}{24bp}} +\fi +% +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\def\normalsize{\@setfontsize{\normalsize}{10bp}{12bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{12bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\def\small{\@setfontsize{\small}{9bp}{10bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{8bp}{9bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{7bp}{8bp}} +\def\tiny{\@setfontsize{\tiny}{5bp}{6bp}} +% sublargesize is a tad smaller than large - 11bp +\def\sublargesize{\@setfontsize{\sublargesize}{11bp}{13.5bp}} +\def\large{\@setfontsize{\large}{12bp}{14bp}} +\def\Large{\@setfontsize{\Large}{14bp}{17bp}} +\def\LARGE{\@setfontsize{\LARGE}{17bp}{20bp}} +\def\huge{\@setfontsize{\huge}{20bp}{24bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.5bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.5bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\def\small{\@setfontsize{\small}{10bp}{12bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{9bp}{10.5bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{8bp}{9bp}} +\def\tiny{\@setfontsize{\tiny}{6bp}{7bp}} +% sublargesize is the same as large - 12bp +\def\sublargesize{\@setfontsize{\sublargesize}{12bp}{14bp}} +\def\large{\@setfontsize{\large}{12bp}{14bp}} +\def\Large{\@setfontsize{\Large}{14bp}{17bp}} +\def\LARGE{\@setfontsize{\LARGE}{17bp}{20bp}} +\def\huge{\@setfontsize{\huge}{20bp}{24bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14bp}}% +\setlength{\@IEEEnormalsizeunitybaselineskip}{14bp}% +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\def\small{\@setfontsize{\small}{10bp}{12bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{9bp}{10.5bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{8bp}{9bp}} +\def\tiny{\@setfontsize{\tiny}{6bp}{7bp}} +% sublargesize is the same as large - 14bp +\def\sublargesize{\@setfontsize{\sublargesize}{14bp}{17bp}} +\def\large{\@setfontsize{\large}{14bp}{17bp}} +\def\Large{\@setfontsize{\Large}{17bp}{20bp}} +\def\LARGE{\@setfontsize{\LARGE}{20bp}{24bp}} +\def\huge{\@setfontsize{\huge}{22bp}{26bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% -- override defaults: compsoc journals use special normalsizes -- +\ifCLASSOPTIONconference +% +% compsoc conferences +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{10.8bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{10.8bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\fi +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\def\normalsize{\@setfontsize{\normalsize}{10bp}{11.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\fi +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\fi +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14.4bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{14.4bp} +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\fi +% +% compsoc nonconferences +\else +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{10.8bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{10.8bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\fi +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +% the official spec is 9.5bp with 11.4bp leading for 10pt, +% but measurements of proofs suggest upto 11.723bp leading +% here we'll use 11.54bp which gives 61 lines per column +% with the standard compsoc margins +\def\normalsize{\@setfontsize{\normalsize}{9.5bp}{11.54bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.54bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\fi +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\fi +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14.4bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{14.4bp} +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\fi +\fi\fi + + + + +% V1.6 The Computer Modern Fonts will issue a substitution warning for +% 24pt titles (24.88pt is used instead, but the default and correct +% Times font will scale exactly as needed) increase the substitution +% tolerance to turn off this warning. +% +% V1.8a, the compsoc bp font sizes can also cause bogus font substitution +% warnings with footnote or scriptsize math and the $\bullet$ itemized +% list of \IEEEcompsocitemizethanks. So, increase this to 1.5pt or more. +\def\fontsubfuzz{1.7bp} + + +% warn the user in case they forget to use the 9pt option with +% technote +\ifCLASSOPTIONtechnote% + \ifx\CLASSOPTIONpt\@IEEEptsizenine\else% + \typeout{** ATTENTION: Technotes are normally 9pt documents.}% + \fi% +\fi + + +% V1.7 +% Improved \textunderscore to provide a much better fake _ when used with +% OT1 encoding. Under OT1, detect use of pcr or cmtt \ttfamily and use +% available true _ glyph for those two typewriter fonts. +\def\@IEEEstringptm{ptm} % Times Roman family +\def\@IEEEstringppl{ppl} % Palatino Roman family +\def\@IEEEstringphv{phv} % Helvetica Sans Serif family +\def\@IEEEstringpcr{pcr} % Courier typewriter family +\def\@IEEEstringcmtt{cmtt} % Computer Modern typewriter family +\DeclareTextCommandDefault{\textunderscore}{\leavevmode +\ifx\f@family\@IEEEstringpcr\string_\else +\ifx\f@family\@IEEEstringcmtt\string_\else +\ifx\f@family\@IEEEstringptm\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else +\ifx\f@family\@IEEEstringppl\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else +\ifx\f@family\@IEEEstringphv\kern -0.03em\vbox{\hrule\@width 0.62em\@height 0.52pt\kern -0.33ex}\kern -0.03em\else +\kern 0.09em\vbox{\hrule\@width 0.6em\@height 0.44pt\kern -0.63pt\kern -0.42ex}\kern 0.09em\fi\fi\fi\fi\fi\relax} + + + + +% set the default \baselinestretch +\def\baselinestretch{1} +\ifCLASSOPTIONdraftcls + \def\baselinestretch{1.5}% default baselinestretch for draft modes +\fi + + +% process CLASSINPUT baselinestretch +\ifx\CLASSINPUTbaselinestretch\@IEEEundefined +\else + \edef\baselinestretch{\CLASSINPUTbaselinestretch} % user CLASSINPUT override + \typeout{** ATTENTION: Overriding \string\baselinestretch\space to + \baselinestretch\space via \string\CLASSINPUT.} +\fi + +\small\normalsize % make \baselinestretch take affect + + + + +% store the normalsize baselineskip +\newdimen\CLASSINFOnormalsizebaselineskip +\CLASSINFOnormalsizebaselineskip=\baselineskip\relax +% and the normalsize unity (baselinestretch=1) baselineskip +% we could save a register by giving the user access to +% \@IEEEnormalsizeunitybaselineskip. However, let's protect +% its read only internal status +\newdimen\CLASSINFOnormalsizeunitybaselineskip +\CLASSINFOnormalsizeunitybaselineskip=\@IEEEnormalsizeunitybaselineskip\relax +% store the nominal value of jot +\newdimen\IEEEnormaljot +\IEEEnormaljot=0.25\baselineskip\relax + +% set \jot +\jot=\IEEEnormaljot\relax + + + + +% V1.6, we are now going to fine tune the interword spacing +% The default interword glue for Times under TeX appears to use a +% nominal interword spacing of 25% (relative to the font size, i.e., 1em) +% a maximum of 40% and a minimum of 19%. +% For example, 10pt text uses an interword glue of: +% +% 2.5pt plus 1.49998pt minus 0.59998pt +% +% However, the IEEE allows for a more generous range which reduces the need +% for hyphenation, especially for two column text. Furthermore, the IEEE +% tends to use a little bit more nominal space between the words. +% The IEEE's interword spacing percentages appear to be: +% 35% nominal +% 23% minimum +% 50% maximum +% (They may even be using a tad more for the largest fonts such as 24pt.) +% +% for bold text, the IEEE increases the spacing a little more: +% 37.5% nominal +% 23% minimum +% 55% maximum + +% here are the interword spacing ratios we'll use +% for medium (normal weight) +\def\@IEEEinterspaceratioM{0.35} +\def\@IEEEinterspaceMINratioM{0.23} +\def\@IEEEinterspaceMAXratioM{0.50} + +% for bold +\def\@IEEEinterspaceratioB{0.375} +\def\@IEEEinterspaceMINratioB{0.23} +\def\@IEEEinterspaceMAXratioB{0.55} + + +% compsoc nonconference papers use Palatino, +% tweak settings to better match the proofs +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference\else +% for medium (normal weight) +\def\@IEEEinterspaceratioM{0.28} +\def\@IEEEinterspaceMINratioM{0.21} +\def\@IEEEinterspaceMAXratioM{0.47} +% for bold +\def\@IEEEinterspaceratioB{0.305} +\def\@IEEEinterspaceMINratioB{0.21} +\def\@IEEEinterspaceMAXratioB{0.52} +\fi\fi + + +% command to revise the interword spacing for the current font under TeX: +% \fontdimen2 = nominal interword space +% \fontdimen3 = interword stretch +% \fontdimen4 = interword shrink +% since all changes to the \fontdimen are global, we can enclose these commands +% in braces to confine any font attribute or length changes +\def\@@@IEEEsetfontdimens#1#2#3{{% +\setlength{\@IEEEtrantmpdimenB}{\f@size pt}% grab the font size in pt, could use 1em instead. +\setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}% +\fontdimen2\font=\@IEEEtrantmpdimenA\relax +\addtolength{\@IEEEtrantmpdimenA}{-#2\@IEEEtrantmpdimenB}% +\fontdimen3\font=-\@IEEEtrantmpdimenA\relax +\setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}% +\addtolength{\@IEEEtrantmpdimenA}{-#3\@IEEEtrantmpdimenB}% +\fontdimen4\font=\@IEEEtrantmpdimenA\relax}} + +% revise the interword spacing for each font weight +\def\@@IEEEsetfontdimens{{% +\mdseries +\@@@IEEEsetfontdimens{\@IEEEinterspaceratioM}{\@IEEEinterspaceMAXratioM}{\@IEEEinterspaceMINratioM}% +\bfseries +\@@@IEEEsetfontdimens{\@IEEEinterspaceratioB}{\@IEEEinterspaceMAXratioB}{\@IEEEinterspaceMINratioB}% +}} + +% revise the interword spacing for each font shape +% \slshape is not often used for IEEE work and is not altered here. The \scshape caps are +% already a tad too large in the free LaTeX fonts (as compared to what the IEEE uses) so we +% won't alter these either. +\def\@IEEEsetfontdimens{{% +\normalfont +\@@IEEEsetfontdimens +\normalfont\itshape +\@@IEEEsetfontdimens +}} + +% command to revise the interword spacing for each font size (and shape +% and weight). Only the \rmfamily is done here as \ttfamily uses a +% fixed spacing and \sffamily is not used as the main text of IEEE papers. +\def\@IEEEtunefonts{{\selectfont\rmfamily +\tiny\@IEEEsetfontdimens +\scriptsize\@IEEEsetfontdimens +\footnotesize\@IEEEsetfontdimens +\small\@IEEEsetfontdimens +\normalsize\@IEEEsetfontdimens +\sublargesize\@IEEEsetfontdimens +\large\@IEEEsetfontdimens +\LARGE\@IEEEsetfontdimens +\huge\@IEEEsetfontdimens +\Huge\@IEEEsetfontdimens}} + +% if the nofonttune class option is not given, revise the interword spacing +% now - in case IEEEtran makes any default length measurements, and make +% sure all the default fonts are loaded +\ifCLASSOPTIONnofonttune\else +\@IEEEtunefonts +\fi + +% and again at the start of the document in case the user loaded different fonts +\AtBeginDocument{\ifCLASSOPTIONnofonttune\else\@IEEEtunefonts\fi} + + + + + +% -- V1.8a page setup commands -- + +% The default sample text for calculating margins +% Note that IEEE publications use \scriptsize for headers and footers. +\def\IEEEdefaultsampletext{\normalfont\normalsize gT} +\def\IEEEdefaultheadersampletext{\normalfont\scriptsize T}% IEEE headers default to uppercase +\def\IEEEdefaultfootersampletext{\normalfont\scriptsize gT} + + + +% usage: \IEEEsettextwidth{inner margin}{outer margin} +% Sets \textwidth to allow the specified inner and outer margins +% for the current \paperwidth. +\def\IEEEsettextwidth#1#2{\@IEEEtrantmpdimenA\paperwidth +\@IEEEtrantmpdimenB#1\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\@IEEEtrantmpdimenB#2\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\textwidth\@IEEEtrantmpdimenA} + + + +% usage: \IEEEsetsidemargin{mode: i, o, c, a}{margin/offset} +% Sets \oddsidemargin and \evensidemargin to yield the specified margin +% of the given mode. +% The available modes are: +% i = inner margin +% o = outer margin +% c = centered, with the given offset +% a = adjust the margins using the given offset +% For the offsets, positive values increase the inner margin. +% \textwidth should be set properly for the given margins before calling this +% function. +\def\IEEEsetsidemargin#1#2{\@IEEEtrantmpdimenA #2\relax +\@IEEEextracttoken{#1}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `i'}{Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}\relax + \let\@IEEEextractedtoken=i\relax + \def\@IEEEextractedtokenmacro{i}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetsidemargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken c\relax + \oddsidemargin\paperwidth + \advance\oddsidemargin by -\textwidth + \divide\oddsidemargin by 2\relax + \advance\oddsidemargin by -1in\relax + \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken o\relax + \oddsidemargin\paperwidth + \advance\oddsidemargin by -\textwidth + \advance\oddsidemargin by -\@IEEEtrantmpdimenA + \advance\oddsidemargin by -1in\relax +\else + \if\@IEEEextractedtoken i\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `i'}% + {Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}% + \fi + \oddsidemargin\@IEEEtrantmpdimenA + \advance\oddsidemargin by -1in\relax +\fi\fi\fi +% odd and even side margins both mean "inner" for single sided pages +\evensidemargin\oddsidemargin +% but are mirrors of each other when twosided is in effect +\if@twoside + \evensidemargin\paperwidth + \advance\evensidemargin by -\textwidth + \advance\evensidemargin by -\oddsidemargin + % have to compensate for both the builtin 1in LaTex offset + % and the fact we already subtracted this offset from \oddsidemargin + \advance\evensidemargin -2in\relax +\fi} + + + +% usage: \IEEEsettextheight[sample text]{top text margin}{bottom text margin} +% Sets \textheight based on the specified top margin and bottom margin. +% Takes into consideration \paperheight, \topskip, and (by default) the +% the actual height and depth of the \IEEEdefaultsampletext text. +\def\IEEEsettextheight{\@ifnextchar [{\@IEEEsettextheight}{\@IEEEsettextheight[\IEEEdefaultsampletext]}} +\def\@IEEEsettextheight[#1]#2#3{\textheight\paperheight\relax + \@IEEEtrantmpdimenA #2\relax + \advance \textheight by -\@IEEEtrantmpdimenA% subtract top margin + \@IEEEtrantmpdimenA #3\relax + \advance \textheight by -\@IEEEtrantmpdimenA% subtract bottom margin + \advance \textheight by \topskip% add \topskip + % subtract off everything above the top, and below the bottom, baselines + \settoheight{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance \textheight by -\@IEEEtrantmpdimenA + \settodepth{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance \textheight by -\@IEEEtrantmpdimenA} + + + +\newdimen\IEEEquantizedlength +\IEEEquantizedlength 0sp\relax +\newdimen\IEEEquantizedlengthdiff +\IEEEquantizedlengthdiff 0sp\relax +\def\IEEEquantizedlengthint{0} + +% usage: \IEEEquantizelength{mode: d, c, i}{base unit}{length} +% Sets the length \IEEEquantizedlength to be an integer multiple of the given +% (nonzero) base unit such that \IEEEquantizedlength approximates the given +% length. +% \IEEEquantizedlengthdiff is a length equal to the difference between the +% \IEEEquantizedlength and the given length. +% \IEEEquantizedlengthint is a macro containing the integer number of base units +% in \IEEEquantizedlength. +% i.e., \IEEEquantizedlength = \IEEEquantizedlengthint * base unit +% The mode determines how \IEEEquantizedlength is quantized: +% d = always decrease (always round down \IEEEquantizeint) +% c = use the closest match +% i = always increase (always round up \IEEEquantizeint) +% In anycase, if the given length is already quantized, +% \IEEEquantizedlengthdiff will be set to zero. +\def\IEEEquantizelength#1#2#3{\begingroup +% work in isolation so as not to externally disturb the \@IEEEtrantmp +% variables +% load the argument values indirectly via \IEEEquantizedlengthdiff +% in case the user refers to our \@IEEEtrantmpdimenX, \IEEEquantizedlength, +% etc. in the arguments. we also will work with these as counters, +% i.e., in sp units +% A has the base unit +\IEEEquantizedlengthdiff #2\relax\relax\relax\relax +\@IEEEtrantmpcountA\IEEEquantizedlengthdiff +% B has the input length +\IEEEquantizedlengthdiff #3\relax\relax\relax\relax +\@IEEEtrantmpcountB\IEEEquantizedlengthdiff +\@IEEEtrantmpdimenA\the\@IEEEtrantmpcountA sp\relax +\@IEEEtrantmpdimenB\the\@IEEEtrantmpcountB sp\relax +% \@IEEEtrantmpcountC will have the quantized int +% \IEEEquantizedlength will have the quantized length +% \@IEEEtrantmpdimenC will have the quantized diff +% initialize them to zero as this is what will be +% exported if an error occurs +\@IEEEtrantmpcountC 0\relax +\IEEEquantizedlength 0sp\relax +\@IEEEtrantmpdimenC 0sp\relax +% extract mode +\@IEEEextracttoken{#1}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + Defaulting to `d'}{Valid modes for \string\IEEEquantizelength\space are: d, c and i.}\relax + \let\@IEEEextractedtoken=d\relax + \def\@IEEEextractedtokenmacro{d}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEquantizelength\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% check for base unit is zero error +\ifnum\@IEEEtrantmpcountA=0\relax +\@IEEEclspkgerror{Base unit is zero in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + \string\IEEEquantizedlength\space and \string\IEEEquantizedlengthdiff\space are set to zero}{Division by zero is not allowed.}\relax +\else% base unit is nonzero + % \@IEEEtrantmpcountC carries the number of integer units + % in the quantized length (integer length \ base) + \@IEEEtrantmpcountC\@IEEEtrantmpcountB\relax + \divide\@IEEEtrantmpcountC by \@IEEEtrantmpcountA\relax + % \IEEEquantizedlength has the (rounded down) quantized length + % = base * int + \IEEEquantizedlength\@IEEEtrantmpdimenA\relax + \multiply\IEEEquantizedlength by \@IEEEtrantmpcountC\relax + % \@IEEEtrantmpdimenC has the difference + % = quantized length - length + \@IEEEtrantmpdimenC\IEEEquantizedlength\relax + \advance\@IEEEtrantmpdimenC by -\@IEEEtrantmpdimenB\relax + % trap special case of length being already quantized + % to avoid a roundup under i option + \ifdim\@IEEEtrantmpdimenC=0sp\relax + \else % length not is already quantized + % set dimenA to carry the upper quantized (absolute value) difference: + % quantizedlength + base - length + \advance\@IEEEtrantmpdimenA by \IEEEquantizedlength\relax + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB\relax + % set dimenB to carry the lower quantized (absolute value) difference: + % length - quantizedlength + \advance\@IEEEtrantmpdimenB by -\IEEEquantizedlength\relax + % handle each mode + \if\@IEEEextractedtoken c\relax + % compare upper and lower amounts, select upper if lower > upper + \ifdim\@IEEEtrantmpdimenB>\@IEEEtrantmpdimenA\relax + % use upper + \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax + \advance\@IEEEtrantmpcountC by 1\relax + \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA + \else% <=. uselower + % no need to do anything for lower, use output values already setup + \fi + \else% not mode c + \if\@IEEEextractedtoken i\relax + % always round up under i mode + \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax + \advance\@IEEEtrantmpcountC by 1\relax + \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA + \else + \if\@IEEEextractedtoken d\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + Defaulting to `d'}% + {Valid modes for \string\IEEEquantizelength\space are: d, c, and i.}\relax + \fi % if d + % no need to do anything for d, use output values already setup + \fi\fi % if i, c + \fi % if length is already quantized +\fi% if base unit is zero +% globally assign the results to macros we use here to escape the enclosing +% group without needing to call \global on any of the \@IEEEtrantmp variables. +% \@IEEEtrantmpcountC has the quantized int +% \IEEEquantizedlength has the quantized length +% \@IEEEtrantmpdimenC has the quantized diff +\xdef\@IEEEquantizedlengthintmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlength\relax +\xdef\@IEEEquantizedlengthmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\@IEEEtrantmpdimenC\relax +\xdef\@IEEEquantizedlengthdiffmacro{\the\@IEEEtrantmpcountC}\relax +\endgroup +% locally assign the outputs here from the macros +\expandafter\IEEEquantizedlength\@IEEEquantizedlengthmacro sp\relax +\expandafter\IEEEquantizedlengthdiff\@IEEEquantizedlengthdiffmacro sp\relax +\edef\IEEEquantizedlengthint{\@IEEEquantizedlengthintmacro}\relax} + + + +\newdimen\IEEEquantizedtextheightdiff +\IEEEquantizedtextheightdiff 0sp\relax + +% usage: \IEEEquantizetextheight[base unit]{mode: d, c, i} +% Sets \textheight to be an integer multiple of the current \baselineskip +% (or the optionally specified base unit) plus the first (\topskip) line. +% \IEEEquantizedtextheightdiff is a length equal to the difference between +% the new quantized and original \textheight. +% \IEEEquantizedtextheightlpc is a macro containing the integer number of +% lines per column under the quantized \textheight. i.e., +% \textheight = \IEEEquantizedtextheightlpc * \baselineskip + \topskip +% The mode determines how \textheight is quantized: +% d = always decrease (always round down the number of lines per column) +% c = use the closest match +% i = always increase (always round up the number of lines per column) +% In anycase, if \textheight is already quantized, it will remain unchanged, +% and \IEEEquantizedtextheightdiff will be set to zero. +% Depends on: \IEEEquantizelength +\def\IEEEquantizetextheight{\@ifnextchar [{\@IEEEquantizetextheight}{\@IEEEquantizetextheight[\baselineskip]}} +\def\@IEEEquantizetextheight[#1]#2{\begingroup +% use our \IEEEquantizedtextheightdiff as a scratch pad +% we need to subtract off \topskip before quantization +\IEEEquantizedtextheightdiff\textheight +\advance\IEEEquantizedtextheightdiff by -\topskip\relax +\IEEEquantizelength{#2}{#1}{\IEEEquantizedtextheightdiff} +% add back \topskip line +\advance\IEEEquantizedlength by \topskip +\@IEEEtrantmpcountC\IEEEquantizedlengthint\relax +\advance\@IEEEtrantmpcountC by 1\relax +% globally assign the results to macros we use here to escape the enclosing +% group without needing to call \global on any of the \@IEEEtrantmp variables. +\xdef\@IEEEquantizedtextheightlpcmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlength\relax +\xdef\@IEEEquantizedtextheightmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlengthdiff\relax +\xdef\@IEEEquantizedtextheightdiffmacro{\the\@IEEEtrantmpcountC}\relax +\endgroup +% locally assign the outputs here from the macros +\textheight\@IEEEquantizedtextheightmacro sp\relax +\IEEEquantizedtextheightdiff\@IEEEquantizedtextheightdiffmacro sp\relax +\edef\IEEEquantizedtextheightlpc{\@IEEEquantizedtextheightlpcmacro}} + + + +% usage: \IEEEsettopmargin[sample text]{mode: t, b, c, a, q}{margin/offset} +% Sets \topmargin based on the specified vertical margin. +% Takes into consideration the base 1in offset, \headheight, \headsep, +% \topskip, and (by default) the the actual height (or, for the bottom, depth) +% of the \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin +% b = bottom margin +% c = vertically centered, with the given offset +% a = adjust the vertical margins using the given offset +% q = adjust the margins using \IEEEquantizedtextheightdiff and the given offset +% For the offsets, positive values increase the top margin. +% \headheight, \headsep, \topskip and \textheight should be set properly for the +% given margins before calling this function. +\def\IEEEsettopmargin{\@ifnextchar [{\@IEEEsettopmargin}{\@IEEEsettopmargin[\IEEEdefaultsampletext]}} +\def\@IEEEsettopmargin[#1]#2#3{\@IEEEtrantmpdimenA #3\relax +\@IEEEextracttoken{#2}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsettopmargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken q\relax + % we need to adjust by half the \IEEEquantizedtextheightdiff value + \@IEEEtrantmpdimenB\IEEEquantizedtextheightdiff\relax + \divide\@IEEEtrantmpdimenB by 2\relax + % a positive \IEEEquantizedtextheightdiff means we need to reduce \topmargin + % because \textheight has been lenghtened + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken c\relax + \topmargin\paperheight + \advance\topmargin by -\textheight + % \textheight includes \topskip, but we should not count topskip whitespace here, backout + \advance \topmargin by \topskip + \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \divide\topmargin by 2\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken b\relax + \topmargin\paperheight + \advance\topmargin by -\textheight + % \textheight includes \topskip, but we should not count topskip whitespace here, backout + \advance \topmargin by \topskip + \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \advance\topmargin by -\@IEEEtrantmpdimenA\relax +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax + \fi + \topmargin\@IEEEtrantmpdimenA\relax + \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by \@IEEEtrantmpdimenB\relax +\fi\fi % if t, b, c +% convert desired top margin into actual \topmargin +% this is not done for the q or a modes because they are only adjustments +\advance \topmargin by -\topskip +\advance \topmargin by -1in +\advance \topmargin by -\headheight +\advance \topmargin by -\headsep +\fi\fi % if q, a +} + + + +% usage: \IEEEsetheadermargin[header sample][text sample]{mode: t, b, c, a}{margin/offset} +% Differentially adjusts \topmargin and \headsep (such that their sum is unchanged) +% based on the specified header margin. +% Takes into consideration the base 1in offset, \headheight, \topskip, and (by default) +% the actual height (or depth) of the \IEEEdefaultheadersampletext and +% \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin (top of the header text to the top of the page) +% b = bottom margin (bottom of the header text to the top of the main text) +% c = vertically centered between the main text and the top of the page, +% with the given offset +% a = adjust the vertical position using the given offset +% For the offsets, positive values move the header downward. +% \headheight, \headsep, \topskip and \topmargin should be set properly before +% calling this function. +\def\IEEEsetheadermargin{\@ifnextchar [{\@IEEEsetheadermargin}{\@IEEEsetheadermargin[\IEEEdefaultheadersampletext]}} +\def\@IEEEsetheadermargin[#1]{\@ifnextchar [{\@@IEEEsetheadermargin[#1]}{\@@IEEEsetheadermargin[#1][\IEEEdefaultsampletext]}} +\def\@@IEEEsetheadermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax +\@IEEEextracttoken{#3}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsetheadermargin\space are: t, b, c, and a.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetheadermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + % No need to do anything here and can pass through the adjustment + % value as is. The end adjustment of \topmargin and \headsep will + % do all that is needed +\else +\if\@IEEEextractedtoken c\relax + % get the bottom margin + \@IEEEtrantmpdimenB\headsep\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \advance\@IEEEtrantmpdimenB by \topskip + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header bottom margin + % subtract from it the top header margin + \advance\@IEEEtrantmpdimenB -1in\relax % take into consideration the system 1in offset of the top margin + \advance\@IEEEtrantmpdimenB by -\topmargin + \advance\@IEEEtrantmpdimenB by -\headheight + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the difference between the bottom and top margins + % we need to adjust by half this amount to center the header + \divide\@IEEEtrantmpdimenB by 2\relax + % and add to offset + \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB +\else +\if\@IEEEextractedtoken b\relax + \@IEEEtrantmpdimenB\headsep\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \advance\@IEEEtrantmpdimenB by \topskip + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header bottom margin + % get the difference between the actual and the desired + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA + \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsetheadermargin\space are: t, b, c and a.}\relax + \fi + \@IEEEtrantmpdimenB 1in\relax % take into consideration the system 1in offset of the top margin + \advance\@IEEEtrantmpdimenB by \topmargin + \advance\@IEEEtrantmpdimenB by \headheight + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header top margin + % get the difference between the desired and the actual + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\fi\fi % if t, b, c +\fi % if a +% advance \topmargin by the needed amount and reduce \headsep by the same +% so as not to disturb the location of the main text +\advance\topmargin by \@IEEEtrantmpdimenA\relax +\advance\headsep by -\@IEEEtrantmpdimenA\relax +} + + + +% usage: \IEEEsetfootermargin[footer sample][text sample]{mode: t, b, c, a}{margin/offset} +% Adjusts \footskip based on the specified footer margin. +% Takes into consideration the base 1in offset, \paperheight, \headheight, +% \headsep, \textheight and (by default) the actual height (or depth) of the +% \IEEEdefaultfootersampletext and \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin (top of the footer text to the bottom of the main text) +% b = bottom margin (bottom of the footer text to the bottom of page) +% c = vertically centered between the main text and the bottom of the page, +% with the given offset +% a = adjust the vertical position using the given offset +% For the offsets, positive values move the footer downward. +% \headheight, \headsep, \topskip, \topmargin, and \textheight should be set +% properly before calling this function. +\def\IEEEsetfootermargin{\@ifnextchar [{\@IEEEsetfootermargin}{\@IEEEsetfootermargin[\IEEEdefaultfootersampletext]}} +\def\@IEEEsetfootermargin[#1]{\@ifnextchar [{\@@IEEEsetfootermargin[#1]}{\@@IEEEsetfootermargin[#1][\IEEEdefaultsampletext]}} +\def\@@IEEEsetfootermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax +\@IEEEextracttoken{#3}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsetfootermargin\space are: t, b, c, and a.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetfootermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + % No need to do anything here and can pass through the adjustment + % value as is. The end adjustment of \footskip will do all that + % is needed +\else +\if\@IEEEextractedtoken c\relax + % calculate the bottom margin + \@IEEEtrantmpdimenB 1in\relax % system 1in offset + \advance\@IEEEtrantmpdimenB\topmargin\relax + \advance\@IEEEtrantmpdimenB\headheight\relax + \advance\@IEEEtrantmpdimenB\headsep\relax + \advance\@IEEEtrantmpdimenB\textheight\relax + \advance\@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB + \@IEEEtrantmpdimenB\paperheight + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin + % now subtract off the footer top margin + \advance\@IEEEtrantmpdimenB -\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the difference between the bottom + % and top footer margins + % our adjustment must be half this value to center the footer + \divide\@IEEEtrantmpdimenB by 2\relax + % add to the offset + \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB +\else +\if\@IEEEextractedtoken b\relax + % calculate the bottom margin + \@IEEEtrantmpdimenB 1in\relax % system 1in offset + \advance\@IEEEtrantmpdimenB\topmargin\relax + \advance\@IEEEtrantmpdimenB\headheight\relax + \advance\@IEEEtrantmpdimenB\headsep\relax + \advance\@IEEEtrantmpdimenB\textheight\relax + \advance\@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB + \@IEEEtrantmpdimenB\paperheight + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin + % get the difference between the actual and the desired + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA + \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsetfootermargin\space are: t, b, c and a.}\relax + \fi + \@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer top margin + % get the difference between the desired and the actual + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\fi\fi % if t, b, c +\fi % if a +% advance \footskip by the needed amount +\advance\footskip by \@IEEEtrantmpdimenA\relax +} + +% -- End V1.8a page setup commands -- + + + + + +% V1.6 +% LaTeX is a little to quick to use hyphenations +% So, we increase the penalty for their use and raise +% the badness level that triggers an underfull hbox +% warning. The author may still have to tweak things, +% but the appearance will be much better "right out +% of the box" than that under V1.5 and prior. +% TeX default is 50 +\hyphenpenalty=750 +\ifCLASSOPTIONcompsoc +\hyphenpenalty 500 +\fi +% If we didn't adjust the interword spacing, 2200 might be better. +% The TeX default is 1000 +\hbadness=1350 +% The IEEE does not use extra spacing after punctuation +\frenchspacing + +% V1.7 increase this a tad to discourage equation breaks +\binoppenalty=1000 % default 700 +\relpenalty=800 % default 500 + +% v1.8a increase these to discourage widows and orphans +\clubpenalty=1000 % default 150 +\widowpenalty=1000 % default 150 +\displaywidowpenalty=1000 % default 50 + + +% margin note stuff +\marginparsep 10pt +\marginparwidth 20pt +\marginparpush 25pt + + +% if things get too close, go ahead and let them touch +\lineskip 0pt +\normallineskip 0pt +\lineskiplimit 0pt +\normallineskiplimit 0pt + +% The distance from the lower edge of the text body to the +% footline +\footskip 0.4in + +% normally zero, should be relative to font height. +% put in a little rubber to help stop some bad breaks (underfull vboxes) +\parskip 0ex plus 0.2ex minus 0.1ex + +\parindent 1.0em +\ifCLASSOPTIONcompsoc + \parindent 1.5em +\fi + +\headheight 12pt +\headsep 18pt +% use the normal font baselineskip +% so that \topskip is unaffected by changes in \baselinestretch +\topskip=\@IEEEnormalsizeunitybaselineskip + + +% V1.8 \maxdepth defaults to 4pt, but should be font size dependent +\maxdepth=0.5\@IEEEnormalsizeunitybaselineskip +\textheight 58pc % 9.63in, 696pt + +% set the default top margin to 58pt +% which results in a \topmargin of -49.59pt for 10pt documents +\IEEEsettopmargin{t}{58pt} +% tweak textheight to a perfect integer number of lines/column. +% standard is: 9pt/63 lpc; 10pt/58 lpc; 11pt/52 lpc; 12pt/50 lpc +\IEEEquantizetextheight{c} +% tweak top margin so that the error is shared equally at the top and bottom +\IEEEsettopmargin{q}{0sp} + + +\columnsep 1pc +\textwidth 43pc % 2 x 21pc + 1pc = 43pc + +% set the default side margins to center the text +\IEEEsetsidemargin{c}{0pt} + + +% adjust margins for default conference mode +\ifCLASSOPTIONconference + \textheight 9.25in % The standard for conferences (668.4975pt) + \IEEEsettopmargin{t}{0.75in} + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/61 lpc; 10pt/56 lpc; 11pt/50 lpc; 12pt/48 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} +\fi + + +% compsoc text sizes, margins and spacings +\ifCLASSOPTIONcompsoc + \columnsep 12bp + % CS specs for \textwdith are 6.875in + % \textwidth 6.875in + % however, measurements from proofs show they are using 3.5in columns + \textwidth 7in + \advance\textwidth by \columnsep + % set the side margins to center the text + \IEEEsetsidemargin{c}{0pt} + % top/bottom margins to center + % could just set \textheight to 9.75in for all the different paper sizes + % and then quantize, but we'll do it the long way here to allow for easy + % future per-paper size adjustments + \IEEEsettextheight{0.625in}{0.625in}% 11in - 2 * 0.625in = 9.75in is the standard text height for compsoc journals + \IEEEsettopmargin{t}{0.625in} + \if@IEEEusingcspaper + \IEEEsettextheight{0.5in}{0.5in}% 10.75in - 2 * 0.5in = 9.75in + \IEEEsettopmargin{t}{0.5in} + \fi + \if@IEEEusingAfourpaper + \IEEEsettextheight{24.675mm}{24.675mm}% 297mm - 2 * 24.675mm = 247.650mm (9.75in) + \IEEEsettopmargin{t}{24.675mm} + \fi + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/65 lpc; 10pt/61 lpc; 11pt/53 lpc; 12pt/49 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} + +% compsoc conference + \ifCLASSOPTIONconference + % compsoc conference use a larger value for columnsep + \columnsep 0.25in + \IEEEsettextwidth{0.75in}{0.75in} + % set the side margins to center the text (0.75in for letterpaper) + \IEEEsetsidemargin{c}{0pt} + % compsoc conferences want 1in top and bottom margin + \IEEEsettextheight{1in}{1in} + \IEEEsettopmargin{t}{1in} + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/58 lpc; 10pt/53 lpc; 11pt/48 lpc; 12pt/46 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} + \fi +\fi + + + +% draft mode settings override that of all other modes +% provides a nice 1in margin all around the paper and extra +% space between the lines for editor's comments +\ifCLASSOPTIONdraftcls + % we want 1in side margins regardless of paper type + \IEEEsettextwidth{1in}{1in} + \IEEEsetsidemargin{c}{0pt} + % want 1in top and bottom margins + \IEEEsettextheight{1in}{1in} + \IEEEsettopmargin{t}{1in} + % digitize textheight to be an integer number of lines. + % this may cause the top and bottom margins to be off a tad + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} +\fi + + + +% process CLASSINPUT inner/outer margin +% if inner margin defined, but outer margin not, set outer to inner. +\ifx\CLASSINPUTinnersidemargin\@IEEEundefined +\else + \ifx\CLASSINPUToutersidemargin\@IEEEundefined + \edef\CLASSINPUToutersidemargin{\CLASSINPUTinnersidemargin} + \fi +\fi + +\ifx\CLASSINPUToutersidemargin\@IEEEundefined +\else + % if outer margin defined, but inner margin not, set inner to outer. + \ifx\CLASSINPUTinnersidemargin\@IEEEundefined + \edef\CLASSINPUTinnersidemargin{\CLASSINPUToutersidemargin} + \fi + \IEEEsettextwidth{\CLASSINPUTinnersidemargin}{\CLASSINPUToutersidemargin} + \IEEEsetsidemargin{i}{\CLASSINPUTinnersidemargin} + \typeout{** ATTENTION: Overriding inner side margin to \CLASSINPUTinnersidemargin\space and + outer side margin to \CLASSINPUToutersidemargin\space via \string\CLASSINPUT.} +\fi + + + +% process CLASSINPUT top/bottom text margin +% if toptext margin defined, but bottomtext margin not, set bottomtext to toptext margin +\ifx\CLASSINPUTtoptextmargin\@IEEEundefined +\else + \ifx\CLASSINPUTbottomtextmargin\@IEEEundefined + \edef\CLASSINPUTbottomtextmargin{\CLASSINPUTtoptextmargin} + \fi +\fi + +\ifx\CLASSINPUTbottomtextmargin\@IEEEundefined +\else + % if bottomtext margin defined, but toptext margin not, set toptext to bottomtext margin + \ifx\CLASSINPUTtoptextmargin\@IEEEundefined + \edef\CLASSINPUTtoptextmargin{\CLASSINPUTbottomtextmargin} + \fi + \IEEEsettextheight{\CLASSINPUTtoptextmargin}{\CLASSINPUTbottomtextmargin} + \IEEEsettopmargin{t}{\CLASSINPUTtoptextmargin} + \typeout{** ATTENTION: Overriding top text margin to \CLASSINPUTtoptextmargin\space and + bottom text margin to \CLASSINPUTbottomtextmargin\space via \string\CLASSINPUT.} +\fi + + + +% default to center header and footer text in the margins +\IEEEsetheadermargin{c}{0pt} +\IEEEsetfootermargin{c}{0pt} + +% adjust header and footer positions for compsoc journals +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONjournal + \IEEEsetheadermargin{b}{\@IEEEnormalsizeunitybaselineskip} + \IEEEsetfootermargin{t}{\@IEEEnormalsizeunitybaselineskip} + \fi +\fi + + +% V1.8a display lines per column info message on user's console +\def\IEEEdisplayinfolinespercolumn{\@IEEEtrantmpdimenA=\textheight +% topskip represents only one line even if > baselineskip +\advance\@IEEEtrantmpdimenA by -1\topskip +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenA +\@IEEEtrantmpcountB=\@IEEEtrantmpdimenA +\divide\@IEEEtrantmpcountB by \baselineskip +% need to add one line to include topskip (first) line +\advance\@IEEEtrantmpcountB by 1 +% save lines per column value as text +\edef\@IEEEnumlinespercolumninfotxt{\the\@IEEEtrantmpcountB} +% backout topskip advance to allow direct \@IEEEtrantmpcountA comparison +\advance\@IEEEtrantmpcountB by -1 +% restore value as text height (without topskip) rather than just as number of lines +\multiply\@IEEEtrantmpcountB by \baselineskip +% is the column height an integer number of lines per column? +\ifnum\@IEEEtrantmpcountA=\@IEEEtrantmpcountB +\edef\@IEEEnumlinespercolumnexactinfotxt{exact} +\else +\@IEEEtrantmpdimenA\@IEEEtrantmpcountA sp\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpcountB sp\relax +\edef\@IEEEnumlinespercolumnexactinfotxt{approximate, difference = \the\@IEEEtrantmpdimenA} +\fi +\typeout{-- Lines per column: \@IEEEnumlinespercolumninfotxt\space (\@IEEEnumlinespercolumnexactinfotxt).}} +% delay execution till start of document to allow for user changes +\AtBeginDocument{\IEEEdisplayinfolinespercolumn} + + + +% LIST SPACING CONTROLS + +% Controls the amount of EXTRA spacing +% above and below \trivlist +% Both \list and IED lists override this. +% However, \trivlist will use this as will most +% things built from \trivlist like the \center +% environment. +\topsep 0.5\baselineskip + +% Controls the additional spacing around lists preceded +% or followed by blank lines. the IEEE does not increase +% spacing before or after paragraphs so it is set to zero. +% \z@ is the same as zero, but faster. +\partopsep \z@ + +% Controls the spacing between paragraphs in lists. +% The IEEE does not increase spacing before or after paragraphs +% so this is also zero. +% With IEEEtran.cls, global changes to +% this value DO affect lists (but not IED lists). +\parsep \z@ + +% Controls the extra spacing between list items. +% The IEEE does not put extra spacing between items. +% With IEEEtran.cls, global changes to this value DO affect +% lists (but not IED lists). +\itemsep \z@ + +% \itemindent is the amount to indent the FIRST line of a list +% item. It is auto set to zero within the \list environment. To alter +% it, you have to do so when you call the \list. +% However, the IEEE uses this for the theorem environment +% There is an alternative value for this near \leftmargini below +\itemindent -1em + +% \leftmargin, the spacing from the left margin of the main text to +% the left of the main body of a list item is set by \list. +% Hence this statement does nothing for lists. +% But, quote and verse do use it for indention. +\leftmargin 2em + +% we retain this stuff from the older IEEEtran.cls so that \list +% will work the same way as before. However, itemize, enumerate and +% description (IED) could care less about what these are as they +% all are overridden. +\leftmargini 2em +%\itemindent 2em % Alternative values: sometimes used. +%\leftmargini 0em +\leftmarginii 1em +\leftmarginiii 1.5em +\leftmarginiv 1.5em +\leftmarginv 1.0em +\leftmarginvi 1.0em +\labelsep 0.5em +\labelwidth \z@ + + +% The old IEEEtran.cls behavior of \list is retained. +% However, the new V1.3 IED list environments override all the +% @list stuff (\@listX is called within \list for the +% appropriate level just before the user's list_decl is called). +% \topsep is now 2pt as the IEEE puts a little extra space around +% lists - used by those non-IED macros that depend on \list. +% Note that \parsep and \itemsep are not redefined as in +% the sizexx.clo \@listX (which article.cls uses) so global changes +% of these values DO affect \list +% +\def\@listi{\leftmargin\leftmargini \topsep 2pt plus 1pt minus 1pt} +\let\@listI\@listi +\def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi% + \advance\labelwidth-\labelsep \topsep 2pt} + + +% The IEEE uses 5) not 5. +\def\labelenumi{\theenumi)} \def\theenumi{\arabic{enumi}} + +% The IEEE uses a) not (a) +\def\labelenumii{\theenumii)} \def\theenumii{\alph{enumii}} + +% The IEEE uses iii) not iii. +\def\labelenumiii{\theenumiii)} \def\theenumiii{\roman{enumiii}} + +% The IEEE uses A) not A. +\def\labelenumiv{\theenumiv)} \def\theenumiv{\Alph{enumiv}} + +% exactly the same as in article.cls +\def\p@enumii{\theenumi} +\def\p@enumiii{\theenumi(\theenumii)} +\def\p@enumiv{\p@enumiii\theenumiii} + +% itemized list label styles +\def\labelitemi{$\scriptstyle\bullet$} +\def\labelitemii{\textbf{--}} +\def\labelitemiii{$\ast$} +\def\labelitemiv{$\cdot$} + + + +% **** V1.3 ENHANCEMENTS **** +% Itemize, Enumerate and Description (IED) List Controls +% *************************** +% +% +% The IEEE seems to use at least two different values by +% which ITEMIZED list labels are indented to the right +% For The Journal of Lightwave Technology (JLT) and The Journal +% on Selected Areas in Communications (JSAC), they tend to use +% an indention equal to \parindent. For Transactions on Communications +% they tend to indent ITEMIZED lists a little more--- 1.3\parindent. +% We'll provide both values here for you so that you can choose +% which one you like in your document using a command such as: +% setlength{\IEEEilabelindent}{\IEEEilabelindentB} +\newdimen\IEEEilabelindentA +\IEEEilabelindentA \parindent + +\newdimen\IEEEilabelindentB +\IEEEilabelindentB 1.3\parindent +% However, we'll default to using \parindent +% which makes more sense to me +\newdimen\IEEEilabelindent +\IEEEilabelindent \IEEEilabelindentA + + +% This controls the default amount the enumerated list labels +% are indented to the right. +% Normally, this is the same as the paragraph indention +\newdimen\IEEEelabelindent +\IEEEelabelindent \parindent + +% This controls the default amount the description list labels +% are indented to the right. +% Normally, this is the same as the paragraph indention +\newdimen\IEEEdlabelindent +\IEEEdlabelindent \parindent + +% This is the value actually used within the IED lists. +% The IED environments automatically set its value to +% one of the three values above, so global changes do +% not have any effect +\newdimen\IEEElabelindent +\IEEElabelindent \parindent + +% The actual amount labels will be indented is +% \IEEElabelindent multiplied by the factor below +% corresponding to the level of nesting depth +% This provides a means by which the user can +% alter the effective \IEEElabelindent for deeper +% levels +% There may not be such a thing as correct "standard IEEE" +% values. What the IEEE actually does may depend on the specific +% circumstances. +% The first list level almost always has full indention. +% The second levels I've seen have only 75% of the normal indentation +% Three level or greater nestings are very rare. I am guessing +% that they don't use any indentation. +\def\IEEElabelindentfactori{1.0} % almost always one +\def\IEEElabelindentfactorii{0.75} % 0.0 or 1.0 may be used in some cases +\def\IEEElabelindentfactoriii{0.0} % 0.75? 0.5? 0.0? +\def\IEEElabelindentfactoriv{0.0} +\def\IEEElabelindentfactorv{0.0} +\def\IEEElabelindentfactorvi{0.0} + +% value actually used within IED lists, it is auto +% set to one of the 6 values above +% global changes here have no effect +\def\IEEElabelindentfactor{1.0} + +% This controls the default spacing between the end of the IED +% list labels and the list text, when normal text is used for +% the labels. +% compsoc uses a larger value here, but we'll set that later +% in the class so that this code block area can be extracted +% as-is for IEEEtrantools.sty +\newdimen\IEEEiednormlabelsep +\IEEEiednormlabelsep 0.6em + +% This controls the default spacing between the end of the IED +% list labels and the list text, when math symbols are used for +% the labels (nomenclature lists). The IEEE usually increases the +% spacing in these cases +\newdimen\IEEEiedmathlabelsep +\IEEEiedmathlabelsep 1.2em + +% This controls the extra vertical separation put above and +% below each IED list. the IEEE usually puts a little extra spacing +% around each list. However, this spacing is barely noticeable. +% compsoc uses a larger value here, but we'll set that later +% in the class so that this code block area can be extracted +% as-is for IEEEtrantools.sty +\newskip\IEEEiedtopsep +\IEEEiedtopsep 2pt plus 1pt minus 1pt + + +% This command is executed within each IED list environment +% at the beginning of the list. You can use this to set the +% parameters for some/all your IED list(s) without disturbing +% global parameters that affect things other than lists. +% i.e., renewcommand{\IEEEiedlistdecl}{\setlength{\labelsep}{5em}} +% will alter the \labelsep for the next list(s) until +% \IEEEiedlistdecl is redefined. +\def\IEEEiedlistdecl{\relax} + +% This command provides an easy way to set \leftmargin based +% on the \labelwidth, \labelsep and the argument \IEEElabelindent +% Usage: \IEEEcalcleftmargin{width-to-indent-the-label} +% output is in the \leftmargin variable, i.e., effectively: +% \leftmargin = argument + \labelwidth + \labelsep +% Note controlled spacing here, shield end of lines with % +\def\IEEEcalcleftmargin#1{\setlength{\leftmargin}{#1}% +\addtolength{\leftmargin}{\labelwidth}% +\addtolength{\leftmargin}{\labelsep}} + +% This command provides an easy way to set \labelwidth to the +% width of the given text. It is the same as +% \settowidth{\labelwidth}{label-text} +% and useful as a shorter alternative. +% Typically used to set \labelwidth to be the width +% of the longest label in the list +\def\IEEEsetlabelwidth#1{\settowidth{\labelwidth}{#1}} + +% When this command is executed, IED lists will use the +% IEEEiedmathlabelsep label separation rather than the normal +% spacing. To have an effect, this command must be executed via +% the \IEEEiedlistdecl or within the option of the IED list +% environments. +\def\IEEEusemathlabelsep{\setlength{\labelsep}{\IEEEiedmathlabelsep}} + +% A flag which controls whether the IED lists automatically +% calculate \leftmargin from \IEEElabelindent, \labelwidth and \labelsep +% Useful if you want to specify your own \leftmargin +% This flag must be set (\IEEEnocalcleftmargintrue or \IEEEnocalcleftmarginfalse) +% via the \IEEEiedlistdecl or within the option of the IED list +% environments to have an effect. +\newif\ifIEEEnocalcleftmargin +\IEEEnocalcleftmarginfalse + +% A flag which controls whether \IEEElabelindent is multiplied by +% the \IEEElabelindentfactor for each list level. +% This flag must be set via the \IEEEiedlistdecl or within the option +% of the IED list environments to have an effect. +\newif\ifIEEEnolabelindentfactor +\IEEEnolabelindentfactorfalse + + +% internal variable to indicate type of IED label +% justification +% 0 - left; 1 - center; 2 - right +\def\@IEEEiedjustify{0} + + +% commands to allow the user to control IED +% label justifications. Use these commands within +% the IED environment option or in the \IEEEiedlistdecl +% Note that changing the normal list justifications +% is nonstandard and the IEEE may not like it if you do so! +% I include these commands as they may be helpful to +% those who are using these enhanced list controls for +% other non-IEEE related LaTeX work. +% itemize and enumerate automatically default to right +% justification, description defaults to left. +\def\IEEEiedlabeljustifyl{\def\@IEEEiedjustify{0}}%left +\def\IEEEiedlabeljustifyc{\def\@IEEEiedjustify{1}}%center +\def\IEEEiedlabeljustifyr{\def\@IEEEiedjustify{2}}%right + + + + +% commands to save to and restore from the list parameter copies +% this allows us to set all the list parameters within +% the list_decl and prevent \list (and its \@list) +% from overriding any of our parameters +% V1.6 use \edefs instead of dimen's to conserve dimen registers +% Note controlled spacing here, shield end of lines with % +\def\@IEEEsavelistparams{\edef\@IEEEiedtopsep{\the\topsep}% +\edef\@IEEEiedlabelwidth{\the\labelwidth}% +\edef\@IEEEiedlabelsep{\the\labelsep}% +\edef\@IEEEiedleftmargin{\the\leftmargin}% +\edef\@IEEEiedpartopsep{\the\partopsep}% +\edef\@IEEEiedparsep{\the\parsep}% +\edef\@IEEEieditemsep{\the\itemsep}% +\edef\@IEEEiedrightmargin{\the\rightmargin}% +\edef\@IEEEiedlistparindent{\the\listparindent}% +\edef\@IEEEieditemindent{\the\itemindent}} + +% Note controlled spacing here +\def\@IEEErestorelistparams{\topsep\@IEEEiedtopsep\relax% +\labelwidth\@IEEEiedlabelwidth\relax% +\labelsep\@IEEEiedlabelsep\relax% +\leftmargin\@IEEEiedleftmargin\relax% +\partopsep\@IEEEiedpartopsep\relax% +\parsep\@IEEEiedparsep\relax% +\itemsep\@IEEEieditemsep\relax% +\rightmargin\@IEEEiedrightmargin\relax% +\listparindent\@IEEEiedlistparindent\relax% +\itemindent\@IEEEieditemindent\relax} + + +% v1.6b provide original LaTeX IED list environments +% note that latex.ltx defines \itemize and \enumerate, but not \description +% which must be created by the base classes +% save original LaTeX itemize and enumerate +\let\LaTeXitemize\itemize +\let\endLaTeXitemize\enditemize +\let\LaTeXenumerate\enumerate +\let\endLaTeXenumerate\endenumerate + +% provide original LaTeX description environment from article.cls +\newenvironment{LaTeXdescription} + {\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\endlist} +\newcommand*\descriptionlabel[1]{\hspace\labelsep + \normalfont\bfseries #1} + + +% override LaTeX's default IED lists +\def\itemize{\@IEEEitemize} +\def\enditemize{\@endIEEEitemize} +\def\enumerate{\@IEEEenumerate} +\def\endenumerate{\@endIEEEenumerate} +\def\description{\@IEEEdescription} +\def\enddescription{\@endIEEEdescription} + +% provide the user with aliases - may help those using packages that +% override itemize, enumerate, or description +\def\IEEEitemize{\@IEEEitemize} +\def\endIEEEitemize{\@endIEEEitemize} +\def\IEEEenumerate{\@IEEEenumerate} +\def\endIEEEenumerate{\@endIEEEenumerate} +\def\IEEEdescription{\@IEEEdescription} +\def\endIEEEdescription{\@endIEEEdescription} + + +% V1.6 we want to keep the IEEEtran IED list definitions as our own internal +% commands so they are protected against redefinition +\def\@IEEEitemize{\@ifnextchar[{\@@IEEEitemize}{\@@IEEEitemize[\relax]}} +\def\@IEEEenumerate{\@ifnextchar[{\@@IEEEenumerate}{\@@IEEEenumerate[\relax]}} +\def\@IEEEdescription{\@ifnextchar[{\@@IEEEdescription}{\@@IEEEdescription[\relax]}} +\def\@endIEEEitemize{\endlist} +\def\@endIEEEenumerate{\endlist} +\def\@endIEEEdescription{\endlist} + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran itemized list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEitemize[#1]{% + \ifnum\@itemdepth>3\relax\@toodeep\else% + \ifnum\@listdepth>5\relax\@toodeep\else% + \advance\@itemdepth\@ne% + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{2}% right justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEilabelindent% + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % calculate the label width + % the user can override this later if + % they specified a \labelwidth + \settowidth{\labelwidth}{\csname labelitem\romannumeral\the\@itemdepth\endcsname}% + \@IEEEsavelistparams% save our list parameters + \list{\csname\@itemitem\endcsname}{% + \@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % IEEElabelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}% + \fi}\fi\fi}% + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran enumerate list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEenumerate[#1]{% + \ifnum\@enumdepth>3\relax\@toodeep\else% + \ifnum\@listdepth>5\relax\@toodeep\else% + \advance\@enumdepth\@ne% + \edef\@enumctr{enum\romannumeral\the\@enumdepth}% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{2}% right justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEelabelindent% + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % calculate the label width + % We'll set it to the width suitable for all labels using + % normalfont 1) to 9) + % The user can override this later + \settowidth{\labelwidth}{9)}% + \@IEEEsavelistparams% save our list parameters + \list{\csname label\@enumctr\endcsname}{\usecounter{\@enumctr}% + \@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % IEEElabelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}% + \fi}\fi\fi}% + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran description list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEdescription[#1]{% + \ifnum\@listdepth>5\relax\@toodeep\else% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{0}% left justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEdlabelindent% + % assume normal labelsep + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % Bogus label width in case the user forgets + % to set it. + % TIP: If you want to see what a variable's width is you + % can use the TeX command \showthe\width-variable to + % display it on the screen during compilation + % (This might be helpful to know when you need to find out + % which label is the widest) + \settowidth{\labelwidth}{Hello}% + \@IEEEsavelistparams% save our list parameters + \list{}{\@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % labelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}\relax% + \fi}\fi} + +% v1.6b we use one makelabel that does justification as needed. +\def\@IEEEiedmakelabel#1{\relax\if\@IEEEiedjustify 0\relax +\makebox[\labelwidth][l]{\normalfont #1}\else +\if\@IEEEiedjustify 1\relax +\makebox[\labelwidth][c]{\normalfont #1}\else +\makebox[\labelwidth][r]{\normalfont #1}\fi\fi} + + +% compsoc uses a larger value for the normal labelsep +% and also extra spacing above and below each list +\ifCLASSOPTIONcompsoc + \IEEEiednormlabelsep 1.2em + \IEEEiedtopsep 6pt plus 3pt minus 3pt +\fi + + +% VERSE and QUOTE +% V1.7 define environments with newenvironment +\newenvironment{verse}{\let\\=\@centercr + \list{}{\itemsep\z@ \itemindent -1.5em \listparindent \itemindent + \rightmargin\leftmargin\advance\leftmargin 1.5em}\item\relax} + {\endlist} +\newenvironment{quotation}{\list{}{\listparindent 1.5em \itemindent\listparindent + \rightmargin\leftmargin \parsep 0pt plus 1pt}\item\relax} + {\endlist} +\newenvironment{quote}{\list{}{\rightmargin\leftmargin}\item\relax} + {\endlist} + + +% \titlepage +% provided only for backward compatibility. \maketitle is the correct +% way to create the title page. +\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \else \newpage \fi \thispagestyle{empty}\c@page\z@} +\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi} + +% standard values from article.cls +\arraycolsep 5pt +\arrayrulewidth .4pt +\doublerulesep 2pt + +\tabcolsep 6pt +\tabbingsep 0.5em + + +%% FOOTNOTES +% +%\skip\footins 10pt plus 4pt minus 2pt +% V1.6 respond to changes in font size +% space added above the footnotes (if present) +\skip\footins 0.9\baselineskip plus 0.4\baselineskip minus 0.2\baselineskip + +% V1.6, we need to make \footnotesep responsive to changes +% in \baselineskip or strange spacings will result when in +% draft mode. Here is a little LaTeX secret - \footnotesep +% determines the height of an invisible strut that is placed +% *above* the baseline of footnotes after the first. Since +% LaTeX considers the space for characters to be 0.7\baselineskip +% above the baseline and 0.3\baselineskip below it, we need to +% use 0.7\baselineskip as a \footnotesep to maintain equal spacing +% between all the lines of the footnotes. The IEEE often uses a tad +% more, so use 0.8\baselineskip. This slightly larger value also helps +% the text to clear the footnote marks. Note that \thanks in IEEEtran +% uses its own value of \footnotesep which is set in \maketitle. +{\footnotesize +\global\footnotesep 0.8\baselineskip} + + +\skip\@mpfootins = \skip\footins +\fboxsep = 3pt +\fboxrule = .4pt +% V1.6 use 1em, then use LaTeX2e's \@makefnmark +% Note that the IEEE normally *left* aligns the footnote marks, so we don't need +% box resizing tricks here. +\long\def\@makefntext#1{\parindent 1em\indent\hbox{\@makefnmark}#1}% V1.6 use 1em +% V1.7 compsoc does not use superscipts for footnote marks +\ifCLASSOPTIONcompsoc +\def\@IEEEcompsocmakefnmark{\hbox{\normalfont\@thefnmark.\ }} +\long\def\@makefntext#1{\parindent 1em\indent\hbox{\@IEEEcompsocmakefnmark}#1} +\fi + +% The IEEE does not use footnote rules +\def\footnoterule{} + +% V1.7 for compsoc, the IEEE uses a footnote rule only for \thanks. We devise a "one-shot" +% system to implement this. +\newif\if@IEEEenableoneshotfootnoterule +\@IEEEenableoneshotfootnoterulefalse +\ifCLASSOPTIONcompsoc +\def\footnoterule{\relax\if@IEEEenableoneshotfootnoterule +\kern-5pt +\hbox to \columnwidth{\hfill\vrule width 0.5\columnwidth height 0.4pt\hfill} +\kern4.6pt +\global\@IEEEenableoneshotfootnoterulefalse +\else +\relax +\fi} +\fi + +% V1.6 do not allow LaTeX to break a footnote across multiple pages +\interfootnotelinepenalty=10000 + +% V1.6 discourage breaks within equations +% Note that amsmath normally sets this to 10000, +% but LaTeX2e normally uses 100. +\interdisplaylinepenalty=2500 + +% default allows section depth up to /paragraph +\setcounter{secnumdepth}{4} + +% technotes do not allow /paragraph +\ifCLASSOPTIONtechnote + \setcounter{secnumdepth}{3} +\fi +% neither do compsoc conferences +\@IEEEcompsocconfonly{\setcounter{secnumdepth}{3}} + + +\newcounter{section} +\newcounter{subsection}[section] +\newcounter{subsubsection}[subsection] +\newcounter{paragraph}[subsubsection] + +% used only by IEEEtran's IEEEeqnarray as other packages may +% have their own, different, implementations +\newcounter{IEEEsubequation}[equation] + +% as shown when called by user from \ref, \label and in table of contents +\def\theequation{\arabic{equation}} % 1 +\def\theIEEEsubequation{\theequation\alph{IEEEsubequation}} % 1a (used only by IEEEtran's IEEEeqnarray) +\ifCLASSOPTIONcompsoc +% compsoc is all arabic +\def\thesection{\arabic{section}} +\def\thesubsection{\thesection.\arabic{subsection}} +\def\thesubsubsection{\thesubsection.\arabic{subsubsection}} +\def\theparagraph{\thesubsubsection.\arabic{paragraph}} +\else +\def\thesection{\Roman{section}} % I +% V1.7, \mbox prevents breaks around - +\def\thesubsection{\mbox{\thesection-\Alph{subsection}}} % I-A +% V1.7 use I-A1 format used by the IEEE rather than I-A.1 +\def\thesubsubsection{\thesubsection\arabic{subsubsection}} % I-A1 +\def\theparagraph{\thesubsubsection\alph{paragraph}} % I-A1a +\fi + +% From Heiko Oberdiek. Because of the \mbox in \thesubsection, we need to +% tell hyperref to disable the \mbox command when making PDF bookmarks. +% This done already with hyperref.sty version 6.74o and later, but +% it will not hurt to do it here again for users of older versions. +\@ifundefined{pdfstringdefPreHook}{\let\pdfstringdefPreHook\@empty}{}% +\g@addto@macro\pdfstringdefPreHook{\let\mbox\relax} + + +% Main text forms (how shown in main text headings) +% V1.6, using \thesection in \thesectiondis allows changes +% in the former to automatically appear in the latter +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONconference% compsoc conference + \def\thesectiondis{\thesection.} + \def\thesubsectiondis{\thesectiondis\arabic{subsection}.} + \def\thesubsubsectiondis{\thesubsectiondis\arabic{subsubsection}.} + \def\theparagraphdis{\thesubsubsectiondis\arabic{paragraph}.} + \else% compsoc not conferencs + \def\thesectiondis{\thesection} + \def\thesubsectiondis{\thesectiondis.\arabic{subsection}} + \def\thesubsubsectiondis{\thesubsectiondis.\arabic{subsubsection}} + \def\theparagraphdis{\thesubsubsectiondis.\arabic{paragraph}} + \fi +\else% not compsoc + \def\thesectiondis{\thesection.} % I. + \def\thesubsectiondis{\Alph{subsection}.} % B. + \def\thesubsubsectiondis{\arabic{subsubsection})} % 3) + \def\theparagraphdis{\alph{paragraph})} % d) +\fi + +% just like LaTeX2e's \@eqnnum +\def\theequationdis{{\normalfont \normalcolor (\theequation)}}% (1) +% IEEEsubequation used only by IEEEtran's IEEEeqnarray +\def\theIEEEsubequationdis{{\normalfont \normalcolor (\theIEEEsubequation)}}% (1a) +% redirect LaTeX2e's equation number display and all that depend on +% it, through IEEEtran's \theequationdis +\def\@eqnnum{\theequationdis} + + + +% V1.7 provide string macros as article.cls does +\def\contentsname{Contents} +\def\listfigurename{List of Figures} +\def\listtablename{List of Tables} +\def\refname{References} +\def\indexname{Index} +\def\figurename{Fig.} +\def\tablename{TABLE} +\@IEEEcompsocconfonly{\def\figurename{Figure}} +\def\partname{Part} +\def\appendixname{Appendix} +\def\abstractname{Abstract} +% IEEE specific names +\def\IEEEkeywordsname{Index Terms} +\def\IEEEproofname{Proof} + + +% LIST OF FIGURES AND TABLES AND TABLE OF CONTENTS +% +\def\@pnumwidth{1.55em} +\def\@tocrmarg{2.55em} +\def\@dotsep{4.5} +\setcounter{tocdepth}{3} + +% adjusted some spacings here so that section numbers will not easily +% collide with the section titles. +% VIII; VIII-A; and VIII-A.1 are usually the worst offenders. +% MDS 1/2001 +\def\tableofcontents{\section*{\contentsname}\@starttoc{toc}} +\def\l@section#1#2{\addpenalty{\@secpenalty}\addvspace{1.0em plus 1pt}% + \@tempdima 2.75em \begingroup \parindent \z@ \rightskip \@pnumwidth% + \parfillskip-\@pnumwidth {\bfseries\leavevmode #1}\hfil\hbox to\@pnumwidth{\hss #2}\par% + \endgroup} +% argument format #1:level, #2:labelindent,#3:labelsep +\def\l@subsection{\@dottedtocline{2}{2.75em}{3.75em}} +\def\l@subsubsection{\@dottedtocline{3}{6.5em}{4.5em}} +% must provide \l@ defs for ALL sublevels EVEN if tocdepth +% is such as they will not appear in the table of contents +% these defs are how TOC knows what level these things are! +\def\l@paragraph{\@dottedtocline{4}{6.5em}{5.5em}} +\def\l@subparagraph{\@dottedtocline{5}{6.5em}{6.5em}} +\def\listoffigures{\section*{\listfigurename}\@starttoc{lof}} +\def\l@figure{\@dottedtocline{1}{0em}{2.75em}} +\def\listoftables{\section*{\listtablename}\@starttoc{lot}} +\let\l@table\l@figure + + +% Definitions for floats +% +% Normal Floats +% V1.8 floatsep et al. revised down by 0.15\baselineskip +% to account for the sideeffects of \topskip compensation +\floatsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip +\textfloatsep 1.55\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip +\@fptop 0pt plus 1fil +\@fpsep 0.75\baselineskip plus 2fil +\@fpbot 0pt plus 1fil +\def\topfraction{0.9} +\def\bottomfraction{0.4} +\def\floatpagefraction{0.8} +% V1.7, let top floats approach 90% of page +\def\textfraction{0.1} + +% Double Column Floats +\dblfloatsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip + +\dbltextfloatsep 1.55\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip +% Note that it would be nice if the rubber here actually worked in LaTeX2e. +% There is a long standing limitation in LaTeX, first discovered (to the best +% of my knowledge) by Alan Jeffrey in 1992. LaTeX ignores the stretchable +% portion of \dbltextfloatsep, and as a result, double column figures can and +% do result in an non-integer number of lines in the main text columns with +% underfull vbox errors as a consequence. A post to comp.text.tex +% by Donald Arseneau confirms that this had not yet been fixed in 1998. +% IEEEtran V1.6 will fix this problem for you in the titles, but it doesn't +% protect you from other double floats. Happy vspace'ing. + +\@dblfptop 0pt plus 1fil +\@dblfpsep 0.75\baselineskip plus 2fil +\@dblfpbot 0pt plus 1fil +\def\dbltopfraction{0.8} +\def\dblfloatpagefraction{0.8} +\setcounter{dbltopnumber}{4} + +\intextsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip +\setcounter{topnumber}{2} +\setcounter{bottomnumber}{2} +\setcounter{totalnumber}{4} + + + +% article class provides these, we should too. +\newlength\abovecaptionskip +\newlength\belowcaptionskip +% but only \abovecaptionskip is used above figure captions and *below* table +% captions +\setlength\abovecaptionskip{0.5\baselineskip} +% compsoc journals are a little more generous +\ifCLASSOPTIONcompsoc\ifCLASSOPTIONjournal + \setlength\abovecaptionskip{0.75\baselineskip} +\fi\fi +\setlength\belowcaptionskip{0pt} +% V1.6 create hooks in case the caption spacing ever needs to be +% overridden by a user +\def\@IEEEfigurecaptionsepspace{\vskip\abovecaptionskip\relax}% +\def\@IEEEtablecaptionsepspace{\vskip\abovecaptionskip\relax}% + + +% 1.6b revise caption system so that \@makecaption uses two arguments +% as with LaTeX2e. Otherwise, there will be problems when using hyperref. +\def\@IEEEtablestring{table} + + +% V1.8 compensate for \topskip so top of top figures align with tops of the first lines of main text +% here we calculate a space equal to the amount \topskip exceeds the main text height +% we hook in at \@floatboxreset +\def\@IEEEfiguretopskipspace{\ifdim\prevdepth=-1000pt\relax +\setlength{\@IEEEtrantmpdimenA}{1\topskip}\relax +\addtolength{\@IEEEtrantmpdimenA}{-0.7\@IEEEnormalsizeunitybaselineskip}\relax +\vspace*{\@IEEEtrantmpdimenA}\fi} +% V1.8 compensate for \topskip at the top of top tables so caption text is on main text baseline +% use a strut set on the caption baseline within \@makecaption +\def\@IEEEtabletopskipstrut{\ifdim\prevdepth=-1000pt\rule{0pt}{\topskip}\fi} +% the \ifdim\prevdepth checks are always expected to be true for IEEE style float caption ordering +% because top of figure content and top of captions in tables is the first thing on the vertical +% list of these floats +% thanks to Donald Arseneau for his 2000/11/11 post "Re: caption hacking" with info on this topic. + + +\ifCLASSOPTIONcompsoc +% V1.7 compsoc \@makecaption +\ifCLASSOPTIONconference% compsoc conference +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\footnotesize {#1.}\nobreakspace\scshape #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\footnotesize \noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, center +\else% +\hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}% +\fi\fi} +% +\else% nonconference compsoc +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\sffamily\footnotesize #1}\\{\normalfont\sffamily\footnotesize #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +\setbox\@tempboxa\hbox{\normalfont\sffamily\footnotesize {#1.}\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\sffamily\footnotesize {#1.}\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\sffamily\footnotesize \noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, left justify +\else% +\hbox to\hsize{\normalfont\sffamily\footnotesize\box\@tempboxa\hfil}% +\fi\fi} +\fi +% +\else% traditional noncompsoc \@makecaption +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\footnotesize #1}\\{\normalfont\footnotesize\scshape #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +% 3/2001 use footnotesize, not small; use two nonbreaking spaces, not one +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\footnotesize\noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, center if conference, left justify otherwise +\else% +\ifCLASSOPTIONconference \hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}% +\else \hbox to\hsize{\normalfont\footnotesize\box\@tempboxa\hfil}% +\fi\fi\fi} +\fi + + + +% V1.7 disable captions class option, do so in a way that retains operation of \label +% within \caption +\ifCLASSOPTIONcaptionsoff +\long\def\@makecaption#1#2{\vspace*{2em}\footnotesize\bgroup\par\addvspace{0.5\baselineskip}\centering{\footnotesize #1}\par\addvspace{0.5\baselineskip}\egroup% +\let\@IEEEtemporiglabeldefsave\label +\let\@IEEEtemplabelargsave\relax +\def\label##1{\gdef\@IEEEtemplabelargsave{##1}}% +\setbox\@tempboxa\hbox{#2}% +\let\label\@IEEEtemporiglabeldefsave +\ifx\@IEEEtemplabelargsave\relax\else\label{\@IEEEtemplabelargsave}\fi} +\fi + + +% V1.7 define end environments with \def not \let so as to work OK with +% preview-latex +\newcounter{figure} +\def\thefigure{\@arabic\c@figure} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename\nobreakspace\thefigure} +% V1.8 within figures add \@IEEEfiguretopskipspace compensation to LaTeX2e's \@floatboxreset +\def\figure{\def\@floatboxreset{\reset@font\normalsize\@setminipage\@IEEEfiguretopskipspace}\@float{figure}} +\def\endfigure{\end@float} +% V1.8 also add \@IEEEfiguretopskipspace compensation to \figure* +\@namedef{figure*}{\def\@floatboxreset{\reset@font\normalsize\@setminipage\@IEEEfiguretopskipspace}\@dblfloat{figure}} +\@namedef{endfigure*}{\end@dblfloat} + +\newcounter{table} +\ifCLASSOPTIONcompsoc +\def\thetable{\arabic{table}} +\else +\def\thetable{\@Roman\c@table} +\fi +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename\nobreakspace\thetable} +% V1.6 The IEEE uses 8pt text for tables +% within tables alter LaTeX2e's \@floatboxreset to use \footnotesize +\def\table{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@float{table}} +\def\endtable{\end@float} +% v1.6b double column tables need to default to footnotesize as well. +\@namedef{table*}{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@dblfloat{table}} +\@namedef{endtable*}{\end@dblfloat} + + + + +%% -- Command Argument Scanning Support Functions -- +%% V1.8a + +% usage: \@IEEEstripouterbraces*{} +% \@IEEEstripouterbraces fully expands its argument (which it then stores +% in \@IEEEstripouterbracesarg) via \edef, then removes any outer enclosing +% braces, and finally stores the result in the macro +% \@IEEEstrippedouterbraces. +% +% For example: +% \@IEEEstripouterbraces{{{{ab}c}}} +% results in: +% +% \@IEEEstripouterbracesarg ==> a macro containing {{{ab}c}} +% \@IEEEstrippedouterbraces ==> a macro containing {ab}c +% +% the *-star form,\@IEEEstripouterbraces*, does not expand the argument +% contents during processing +\def\@IEEEstripouterbraces{\@ifstar{\let\@IEEEstripouterbracesdef=\def\@@IEEEstripouterbraces}{\let\@IEEEstripouterbracesdef=\edef\@@IEEEstripouterbraces}} + +\def\@@IEEEstripouterbraces#1{\@IEEEstripouterbracesdef\@IEEEstripouterbracesarg{#1}\relax +% If the macro is unchanged after being acquired as a single delimited +% argument, we know we have one sequence of tokens without any enclosing +% braces. Loop until this is true. +\loop + \expandafter\@@@IEEEstripouterbraces\@IEEEstripouterbracesarg\@IEEEgeneralsequenceDELIMITER +\ifx\@IEEEstrippedouterbraces\@IEEEstripouterbracesarg +\else + \let\@IEEEstripouterbracesarg\@IEEEstrippedouterbraces +\repeat} + +\def\@@@IEEEstripouterbraces#1\@IEEEgeneralsequenceDELIMITER{\def\@IEEEstrippedouterbraces{#1}} + + + +% usage: \@IEEEextractgroup*{} +% \@IEEEextractgroup fully expands its argument (which it then stores in +% \@IEEEextractgrouparg) via \edef and then assigns the first "brace group" +% of tokens to the macro \@IEEEextractedgroup. +% The remaining groups, if any, are stored in the macro +% \@IEEEextractedgroupremain. If the argument does not contain the requisite +% groups, the respective macros will be defined to be empty. +% There is an asymmetry in that \@IEEEextractedgroup is stripped of its first +% outer grouping while \@IEEEextractedgroupremain retains even the outer +% grouping (if present) that originally identified it as a group. +% +% For example: +% \@IEEEextractgroup{{{ab}}{c{de}}} +% results in: +% +% \@IEEEextractgrouparg ==> a macro containing {{ab}}{c{de}} +% \@IEEEextractedgroup ==> a macro containing {ab} +% \@IEEEextractedgroupremain ==> a macro containing {c{de}} +% +% The *-star form, \@IEEEextractgroup*, does not expand its argument +% contents during processing. +\def\@IEEEextractgroup{\@ifstar{\let\@IEEEextractgroupdef=\def\@@IEEEextractgroup}{\let\@IEEEextractgroupdef=\edef\@@IEEEextractgroup}} + +\def\@@IEEEextractgroup#1{\@IEEEextractgroupdef\@IEEEextractgrouparg{#1}\relax +% trap the case of an empty extracted group as this would cause problems with +% \@IEEEextractgroupremain's argument acquisition +\ifx\@IEEEextractgrouparg\@empty + \def\@IEEEextractedgroup{}\relax + \def\@IEEEextractedgroupremain{}\relax +\else + % We have to use some dirty tricks here. We want to insert {} around + % whatever remains after the first group so that TeX's argument scanner + % will preserve any originally enclosing braces as well as provide an + % empty argument to acquire even if there isn't a second group. + % In this first of two dirty tricks, we put a } at the end of the structure + % we are going to extract from. The \ifnum0=`{\fi keeps TeX happy to allow + % what would otherwise be an unbalanced macro definition for + % \@@IEEEextractgroup to be acceptable to it. + \ifnum0=`{\fi\expandafter\@IEEEextractgroupremain\@IEEEextractgrouparg}\relax +\fi} + +% In the second part of the dirty tricks, we insert a leading { right after +% the first group is acquired, but before the remainder is. Again, the +% \ifnum0=`}\fi keeps TeX happy during definition time, but will disappear +% during run time. +\def\@IEEEextractgroupremain#1{\def\@IEEEextractedgroup{#1}\expandafter\@@IEEEextractgroupremain\expandafter{\ifnum0=`}\fi} + +\def\@@IEEEextractgroupremain#1{\def\@IEEEextractedgroupremain{#1}} + + + +% \@IEEEextracttoken relocated at top because margin setting commands rely on it + + + +% usage: \@IEEEextracttokengroups*{} +% \@IEEEextracttokengroups fully expands its argument (which it then stores +% in \@IEEEextracttokengroupsarg) and then assigns the first "brace group" of +% tokens (with the outermost braces removed) to the macro +% \@IEEEextractedfirstgroup. +% The meaning of the first nonbrace (but including the empty group) token +% within this first group is assigned via \let to \@IEEEextractedfirsttoken +% as well as stored in the macro \@IEEEextractedfirsttokenmacro. If a first +% nonbrace token does not exist (or is an empty group), these will be \relax +% and empty, respectively. Tokens that would otherwise be discarded during +% the acquisition of the first token in the first group are stored in +% \@IEEEextractedfirsttokensdiscarded, however their original relative brace +% nesting depths are not guaranteed to be preserved. +% The first group within this first group is stored in the macro +% \@IEEEextractedfirstfirstgroup. +% Likewise for the next group after the first: \@IEEEextractednextgroup, +% \@IEEEextractednextfirstgroup, \@IEEEextractednextgroupfirsttoken, +% \@IEEEextractednextgroupfirsttokenmacro, and +% \@IEEEextractednextfirsttokensdiscarded. +% All tokens/groups after the first group, including any enclosing braces, +% are stored in the macro \@IEEEextractedafterfirstgroupremain which will +% be empty if none exist. +% +% For example: +% \@IEEEextracttokengroups{{{ab}{cd}}{{ef}g}} +% will result in: +% +% \@IEEEextracttokengroupsarg ==> a macro containing {{ab}{cd}}{{ef}g} +% \@IEEEextractedfirstgroup ==> a macro containing {ab}{cd} +% \@IEEEextractedafterfirstgroupremain ==> a macro containing {{ef}g} +% \@IEEEextractedfirsttoken ==> the letter a +% \@IEEEextractedfirsttokenmacro ==> a macro containing a +% \@IEEEextractedfirsttokensdiscarded ==> a macro containing bcd +% \@IEEEextractedfirstfirstgroup ==> a macro containing ab +% \@IEEEextractednextgroup ==> a macro containing {ef}g +% \@IEEEextractednextfirsttoken ==> the letter e +% \@IEEEextractednextfirsttokenmacro ==> a macro containing e +% \@IEEEextractednextfirsttokensdiscarded ==> a macro containing fg +% \@IEEEextractednextfirstgroup ==> a macro containing ef +% +% If given an empty argument, \@IEEEextractedfirsttoken and +% \@IEEEextractednextfirsttoken will be set to \relax +% and all the macros will be empty. +% the *-star form, \@IEEEextracttokengroups*, does not expand its argument +% contents during processing. +% +% Depends on: \@IEEEextractgroup, \@IEEEextracttoken +\def\@IEEEextracttokengroups{\@ifstar{\let\@IEEEextracttokengroupsdef=\def\@@IEEEextracttokengroups}{\let\@IEEEextracttokengroupsdef=\edef\@@IEEEextracttokengroups}} +\def\@@IEEEextracttokengroups#1{\@IEEEextracttokengroupsdef\@IEEEextracttokengroupsarg{#1}\relax +% begin extraction, these functions are safe with empty arguments +% first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextracttokengroupsarg}\relax +\let\@IEEEextractedfirstgroup\@IEEEextractedgroup +\let\@IEEEextractedafterfirstgroupremain\@IEEEextractedgroupremain +\expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax +\let\@IEEEextractedfirsttoken\@IEEEextractedtoken +\let\@IEEEextractedfirsttokenmacro\@IEEEextractedtokenmacro +\let\@IEEEextractedfirsttokensdiscarded\@IEEEextractedtokensdiscarded +% first first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax +\let\@IEEEextractedfirstfirstgroup\@IEEEextractedgroup +% next group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedafterfirstgroupremain}\relax +\let\@IEEEextractednextgroup\@IEEEextractedgroup +\expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractednextgroup}\relax +\let\@IEEEextractednextfirsttoken\@IEEEextractedtoken +\let\@IEEEextractednextfirsttokenmacro\@IEEEextractedtokenmacro +\let\@IEEEextractednextfirsttokensdiscarded\@IEEEextractedtokensdiscarded +% next first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractednextgroup}\relax +\let\@IEEEextractednextfirstgroup\@IEEEextractedgroup} + + +%% -- End of Command Argument Scanning Support Functions -- + + + + +%% +%% START OF IEEEeqnarray DEFINITIONS +%% +%% Inspired by the concepts, examples, and previous works of LaTeX +%% coders and developers such as Donald Arseneau, Fred Bartlett, +%% David Carlisle, Tony Liu, Frank Mittelbach, Piet van Oostrum, +%% Roland Winkler and Mark Wooding. +%% I don't make the claim that my work here is even near their calibre. ;) + + +\newif\if@IEEEeqnarrayboxnojot% flag to indicate if the environment was called as the star form +\@IEEEeqnarrayboxnojotfalse + +\newif\if@advanceIEEEeqncolcnt% tracks if the environment should advance the col counter +% allows a way to make an \IEEEeqnarraybox that can be used within an \IEEEeqnarray +% used by IEEEeqnarraymulticol so that it can work properly in both +\@advanceIEEEeqncolcnttrue + +\newcount\@IEEEeqnnumcols % tracks how many IEEEeqnarray cols are defined +\newcount\@IEEEeqncolcnt % tracks how many IEEEeqnarray cols the user actually used + + +% The default math style used by the columns +\def\IEEEeqnarraymathstyle{\displaystyle} +% The default text style used by the columns +% default to using the current font +\def\IEEEeqnarraytextstyle{\relax} + +% like the iedlistdecl but for \IEEEeqnarray +\def\IEEEeqnarraydecl{\relax} +\def\IEEEeqnarrayboxdecl{\relax} + + + +% V1.8 flags to indicate that equation numbering is to persist +\newif\if@IEEEeqnumpersist% +\@IEEEeqnumpersistfalse +\newif\if@IEEEsubeqnumpersist% +\@IEEEsubeqnumpersistfalse +% +% V1.8 flags to indicate if (sub)equation number of last line was preadvanced +\newif\if@IEEEeqnumpreadv% +\@IEEEeqnumpreadvfalse +\newif\if@IEEEsubeqnumpreadv% +\@IEEEsubeqnumpreadvfalse + +\newcount\@IEEEsubeqnnumrollback% saves previous value of IEEEsubequation number in case we need to restore it + +% \yesnumber is the opposite of \nonumber +% a novel concept with the same def as the equationarray package +% However, we give IEEE versions too since some LaTeX packages such as +% the MDWtools mathenv.sty redefine \nonumber to something else. +% This command is intended for use in non-IEEEeqnarray math environments +\providecommand{\yesnumber}{\global\@eqnswtrue} + + +% IEEEyes/nonumber +% V1.8 add persistant * forms +% These commands can alter the type of equation an IEEEeqnarray line is. +\def\IEEEyesnumber{\@ifstar{\global\@IEEEeqnumpersisttrue\global\@IEEEsubeqnumpersistfalse\@IEEEyesnumber}{\@IEEEyesnumber}} + +\def\@IEEEyesnumber{\global\@eqnswtrue +\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray +\ifnum\c@IEEEsubequation>0\relax + \stepcounter{equation}\setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label +\fi +% even if we reached this eqn num via a preadv, it is legit now +\global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse +\fi} + +\def\IEEEnonumber{\@ifstar{\global\@IEEEeqnumpersistfalse\global\@IEEEsubeqnumpersistfalse\global\@eqnswfalse}{\global\@eqnswfalse}} + + +\def\IEEEyessubnumber{\@ifstar{\global\@IEEEsubeqnumpersisttrue\@IEEEyessubnumber}{\@IEEEyessubnumber}} +% +\def\@IEEEyessubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray + \ifnum\c@IEEEsubequation>0\relax% if it already is a subequation, we are good to go as-is + \else% if we are a regular equation we have to watch out for two cases + \if@IEEEeqnumpreadv% if this equation is the result of a preadvance, backout and bump the sub eqnnum + \global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\addtocounter{IEEEsubequation}{1}\relax + \else% non-preadvanced equations just need initialization of their sub eqnnum + \setcounter{IEEEsubequation}{1}\relax + \fi + \fi% fi already is subequation + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore + \global\@eqnswtrue +\fi} + + +\def\IEEEnosubnumber{\@ifstar{\global\@IEEEsubeqnumpersistfalse\@IEEEnosubnumber}{\@IEEEnosubnumber}} +% +\def\@IEEEnosubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray + \if@eqnsw % we do nothing unless we know we will display because we play with the counters here + % if it currently is a subequation, bump up to the next equation number and turn off the subequation + \ifnum\c@IEEEsubequation>0\relax\addtocounter{equation}{1}\setcounter{IEEEsubequation}{0}\relax + \fi + \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore + \gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi +\fi} + + + +% allows users to "push away" equations that get too close to the equation numbers +\def\IEEEeqnarraynumspace{\hphantom{\ifnum\c@IEEEsubequation>0\relax\theIEEEsubequationdis\else\theequationdis\fi}} + +% provides a way to span multiple columns within IEEEeqnarray environments +% will consider \if@advanceIEEEeqncolcnt before globally advancing the +% column counter - so as to work within \IEEEeqnarraybox +% usage: \IEEEeqnarraymulticol{number cols. to span}{col type}{cell text} +\long\def\IEEEeqnarraymulticol#1#2#3{\multispan{#1}\relax +% check if column is defined for the precolumn definition +% We have to be careful here because TeX scans for & even within an \iffalse +% where it does not expand macros. So, if we used only one \ifx and a #3 +% appeared in the false branch and the user inserted another alignment +% structure that uses & in the \IEEEeqnarraymulticol{}, TeX will not see that +% there is an inner alignment in the false branch yet still will see any & +% there and will think that they apply to the outer alignment resulting in an +% incomplete \ifx error. +% So, here we use separate checks for the pre and post parts in order to keep +% the #3 outside of all conditionals. +\relax\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax +\csname @IEEEeqnarraycolPRE#2\endcsname +\else% if not, error and use default type +\@IEEEclspkgerror{Invalid column type "#2" in \string\IEEEeqnarraymulticol.\MessageBreak +Using a default centering column instead}% +{You must define IEEEeqnarray column types before use.}% +\csname @IEEEeqnarraycolPRE@IEEEdefault\endcsname +\fi +% The ten \relax are to help prevent misleading error messages in case a user +% accidently inserted a macro that tries to acquire additional arguments. +#3\relax\relax\relax\relax\relax\relax\relax\relax\relax\relax +% check if column is defined for the postcolumn definition +\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax +\csname @IEEEeqnarraycolPOST#2\endcsname +\else% if not, use the default type +\csname @IEEEeqnarraycolPOST@IEEEdefault\endcsname +\fi +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by #1\relax\fi} + +% like \omit, but maintains track of the column counter for \IEEEeqnarray +\def\IEEEeqnarrayomit{\omit\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by 1\relax\fi} + + +% provides a way to define a letter referenced column type +% usage: \IEEEeqnarraydefcol{col. type letter/name}{pre insertion text}{post insertion text} +\def\IEEEeqnarraydefcol#1#2#3{\expandafter\def\csname @IEEEeqnarraycolPRE#1\endcsname{#2}% +\expandafter\def\csname @IEEEeqnarraycolPOST#1\endcsname{#3}% +\expandafter\def\csname @IEEEeqnarraycolDEF#1\endcsname{1}} + + +% provides a way to define a numerically referenced inter-column glue types +% usage: \IEEEeqnarraydefcolsep{col. glue number}{glue definition} +\def\IEEEeqnarraydefcolsep#1#2{\expandafter\def\csname @IEEEeqnarraycolSEP\romannumeral #1\endcsname{#2}% +\expandafter\def\csname @IEEEeqnarraycolSEPDEF\romannumeral #1\endcsname{1}} + + +\def\@IEEEeqnarraycolisdefined{1}% just a macro for 1, used for checking undefined column types + + +% expands and appends the given argument to the \@IEEEtrantmptoksA token list +% used to build up the \halign preamble +\def\@IEEEappendtoksA#1{\edef\@@IEEEappendtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA #1}}% +\@@IEEEappendtoksA} + +% also appends to \@IEEEtrantmptoksA, but does not expand the argument +% uses \toks8 as a scratchpad register +\def\@IEEEappendNOEXPANDtoksA#1{\toks8={#1}% +\edef\@@IEEEappendNOEXPANDtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA\the\toks8}}% +\@@IEEEappendNOEXPANDtoksA} + +% define some common column types for the user +% math +\IEEEeqnarraydefcol{l}{$\IEEEeqnarraymathstyle}{$\hfil} +\IEEEeqnarraydefcol{c}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} +\IEEEeqnarraydefcol{r}{\hfil$\IEEEeqnarraymathstyle}{$} +\IEEEeqnarraydefcol{L}{$\IEEEeqnarraymathstyle{}}{{}$\hfil} +\IEEEeqnarraydefcol{C}{\hfil$\IEEEeqnarraymathstyle{}}{{}$\hfil} +\IEEEeqnarraydefcol{R}{\hfil$\IEEEeqnarraymathstyle{}}{{}$} +% text +\IEEEeqnarraydefcol{s}{\IEEEeqnarraytextstyle}{\hfil} +\IEEEeqnarraydefcol{t}{\hfil\IEEEeqnarraytextstyle}{\hfil} +\IEEEeqnarraydefcol{u}{\hfil\IEEEeqnarraytextstyle}{} + +% vertical rules +\IEEEeqnarraydefcol{v}{}{\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{vv}{\vrule width\arrayrulewidth\hfil}{\hfil\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{V}{}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{VV}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth\hfil}% +{\hfil\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} + +% horizontal rules +\IEEEeqnarraydefcol{h}{}{\leaders\hrule height\arrayrulewidth\hfil} +\IEEEeqnarraydefcol{H}{}{\leaders\vbox{\hrule width\arrayrulewidth\vskip\doublerulesep\hrule width\arrayrulewidth}\hfil} + +% plain +\IEEEeqnarraydefcol{x}{}{} +\IEEEeqnarraydefcol{X}{$}{$} + +% the default column type to use in the event a column type is not defined +\IEEEeqnarraydefcol{@IEEEdefault}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} + + +% a zero tabskip (used for "-" col types) +\def\@IEEEeqnarraycolSEPzero{0pt plus 0pt minus 0pt} +% a centering tabskip (used for "+" col types) +\def\@IEEEeqnarraycolSEPcenter{1000pt plus 0pt minus 1000pt} + +% top level default tabskip glues for the start, end, and inter-column +% may be reset within environments not always at the top level, e.g., \IEEEeqnarraybox +\edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPcenter}% default start glue +\edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPcenter}% default end glue +\edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue + + + +% creates a vertical rule that extends from the bottom to the top a a cell +% Provided in case other packages redefine \vline some other way. +% usage: \IEEEeqnarrayvrule[rule thickness] +% If no argument is provided, \arrayrulewidth will be used for the rule thickness. +\newcommand\IEEEeqnarrayvrule[1][\arrayrulewidth]{\vrule\@width#1\relax} + +% creates a blank separator row +% usage: \IEEEeqnarrayseprow[separation length][font size commands] +% default is \IEEEeqnarrayseprow[0.25\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers +\def\IEEEeqnarrayseprow{\relax\@ifnextchar[{\@IEEEeqnarrayseprow}{\@IEEEeqnarrayseprow[0.25\normalbaselineskip]}} +\def\@IEEEeqnarrayseprow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprow[#1]}{\@@IEEEeqnarrayseprow[#1][\relax]}} +\def\@@IEEEeqnarrayseprow[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% +\ifx\@IEEEeqnarrayseprowARGONE\@empty% +% get the skip value, based on the font commands +% use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 +% assign within a bogus box to confine the font changes +{\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% +\else% +{\setbox0=\hbox{#2\relax\global\skip5=#1}}% +\fi% +\@IEEEeqnarrayhoptolastcolumn\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} + +% creates a blank separator row, but omits all the column templates +% usage: \IEEEeqnarrayseprowcut[separation length][font size commands] +% default is \IEEEeqnarrayseprowcut[0.25\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers +\def\IEEEeqnarrayseprowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarrayseprowcut}{\@IEEEeqnarrayseprowcut[0.25\normalbaselineskip]}} +\def\@IEEEeqnarrayseprowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprowcut[#1]}{\@@IEEEeqnarrayseprowcut[#1][\relax]}} +\def\@@IEEEeqnarrayseprowcut[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% +\ifx\@IEEEeqnarrayseprowARGONE\@empty% +% get the skip value, based on the font commands +% use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 +% assign within a bogus box to confine the font changes +{\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% +\else% +{\setbox0=\hbox{#2\relax\global\skip5=#1}}% +\fi% +\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} + + + +% draws a single rule across all the columns optional +% argument determines the rule width, \arrayrulewidth is the default +% updates column counter as needed and turns off struts +% usage: \IEEEeqnarrayrulerow[rule line thickness] +\def\IEEEeqnarrayrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarrayrulerow}{\@IEEEeqnarrayrulerow[\arrayrulewidth]}} +\def\@IEEEeqnarrayrulerow[#1]{\leaders\hrule height#1\hfil\relax% put in our rule +% turn off any struts +\IEEEeqnarraystrutsize{0pt}{0pt}[\relax]\relax} + + +% draws a double rule by using a single rule row, a separator row, and then +% another single rule row +% first optional argument determines the rule thicknesses, \arrayrulewidth is the default +% second optional argument determines the rule spacing, \doublerulesep is the default +% usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] +\def\IEEEeqnarraydblrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarraydblrulerow}{\@IEEEeqnarraydblrulerow[\arrayrulewidth]}} +\def\@IEEEeqnarraydblrulerow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerow[#1]}% +{\@@IEEEeqnarraydblrulerow[#1][\doublerulesep]}} +\def\@@IEEEeqnarraydblrulerow[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% +% we allow the user to say \IEEEeqnarraydblrulerow[][] +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]\relax% +\fi% +\def\@IEEEeqnarraydblrulerowARG{#2}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\\\IEEEeqnarrayseprow[\doublerulesep][\relax]% +\else% +\\\IEEEeqnarrayseprow[#2][\relax]% +\fi% +\\\multispan{\@IEEEeqnnumcols}% +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\def\@IEEEeqnarraydblrulerowARG{#1}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +} + +% draws a double rule by using a single rule row, a separator (cutting) row, and then +% another single rule row +% first optional argument determines the rule thicknesses, \arrayrulewidth is the default +% second optional argument determines the rule spacing, \doublerulesep is the default +% usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] +\def\IEEEeqnarraydblrulerowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarraydblrulerowcut}{\@IEEEeqnarraydblrulerowcut[\arrayrulewidth]}} +\def\@IEEEeqnarraydblrulerowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerowcut[#1]}% +{\@@IEEEeqnarraydblrulerowcut[#1][\doublerulesep]}} +\def\@@IEEEeqnarraydblrulerowcut[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% +% we allow the user to say \IEEEeqnarraydblrulerow[][] +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +\def\@IEEEeqnarraydblrulerowARG{#2}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\\\IEEEeqnarrayseprowcut[\doublerulesep][\relax]% +\else% +\\\IEEEeqnarrayseprowcut[#2][\relax]% +\fi% +\\\multispan{\@IEEEeqnnumcols}% +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\def\@IEEEeqnarraydblrulerowARG{#1}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +} + + + +% inserts a full row's worth of &'s +% relies on \@IEEEeqnnumcols to provide the correct number of columns +% uses \@IEEEtrantmptoksA, \count0 as scratch registers +\def\@IEEEeqnarrayhoptolastcolumn{\@IEEEtrantmptoksA={}\count0=1\relax% +\loop% add cols if the user did not use them all +\ifnum\count0<\@IEEEeqnnumcols\relax% +\@IEEEappendtoksA{&}% +\advance\count0 by 1\relax% update the col count +\repeat% +\the\@IEEEtrantmptoksA%execute the &'s +} + + + +\newif\if@IEEEeqnarrayISinner % flag to indicate if we are within the lines +\@IEEEeqnarrayISinnerfalse % of an IEEEeqnarray - after the IEEEeqnarraydecl + +\edef\@IEEEeqnarrayTHEstrutheight{0pt} % height and depth of IEEEeqnarray struts +\edef\@IEEEeqnarrayTHEstrutdepth{0pt} + +\edef\@IEEEeqnarrayTHEmasterstrutheight{0pt} % default height and depth of +\edef\@IEEEeqnarrayTHEmasterstrutdepth{0pt} % struts within an IEEEeqnarray + +\edef\@IEEEeqnarrayTHEmasterstrutHSAVE{0pt} % saved master strut height +\edef\@IEEEeqnarrayTHEmasterstrutDSAVE{0pt} % and depth + +\newif\if@IEEEeqnarrayusemasterstrut % flag to indicate that the master strut value +\@IEEEeqnarrayusemasterstruttrue % is to be used + + + +% saves the strut height and depth of the master strut +\def\@IEEEeqnarraymasterstrutsave{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% save values +\edef\@IEEEeqnarrayTHEmasterstrutHSAVE{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutDSAVE{\the\dimen2}} + +% restores the strut height and depth of the master strut +\def\@IEEEeqnarraymasterstrutrestore{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutHSAVE\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutDSAVE\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% restore values +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}} + + +% globally restores the strut height and depth to the +% master values and sets the master strut flag to true +\def\@IEEEeqnarraystrutreset{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% restore values +\xdef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\xdef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\global\@IEEEeqnarrayusemasterstruttrue} + + +% if the master strut is not to be used, make the current +% values of \@IEEEeqnarrayTHEstrutheight, \@IEEEeqnarrayTHEstrutdepth +% and the use master strut flag, global +% this allows user strut commands issued in the last column to be carried +% into the isolation/strut column +\def\@IEEEeqnarrayglobalizestrutstatus{\relax% +\if@IEEEeqnarrayusemasterstrut\else% +\xdef\@IEEEeqnarrayTHEstrutheight{\@IEEEeqnarrayTHEstrutheight}% +\xdef\@IEEEeqnarrayTHEstrutdepth{\@IEEEeqnarrayTHEstrutdepth}% +\global\@IEEEeqnarrayusemasterstrutfalse% +\fi} + + + +% usage: \IEEEeqnarraystrutsize{height}{depth}[font size commands] +% If called outside the lines of an IEEEeqnarray, sets the height +% and depth of both the master and local struts. If called inside +% an IEEEeqnarray line, sets the height and depth of the local strut +% only and sets the flag to indicate the use of the local strut +% values. If the height or depth is left blank, 0.7\normalbaselineskip +% and 0.3\normalbaselineskip will be used, respectively. +% The optional argument can be used to evaluate the lengths under +% a different font size and styles. If none is specified, the current +% font is used. +% uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 +\def\IEEEeqnarraystrutsize#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsize{#1}{#2}}{\@IEEEeqnarraystrutsize{#1}{#2}[\relax]}} +\def\@IEEEeqnarraystrutsize#1#2[#3]{\def\@IEEEeqnarraystrutsizeARG{#1}% +\ifx\@IEEEeqnarraystrutsizeARG\@empty% +{\setbox0=\hbox{#3\relax\global\skip3=0.7\normalbaselineskip}}% +\skip0=\skip3\relax% +\else% arg one present +{\setbox0=\hbox{#3\relax\global\skip3=#1\relax}}% +\skip0=\skip3\relax% +\fi% if null arg +\def\@IEEEeqnarraystrutsizeARG{#2}% +\ifx\@IEEEeqnarraystrutsizeARG\@empty% +{\setbox0=\hbox{#3\relax\global\skip3=0.3\normalbaselineskip}}% +\skip2=\skip3\relax% +\else% arg two present +{\setbox0=\hbox{#3\relax\global\skip3=#2\relax}}% +\skip2=\skip3\relax% +\fi% if null arg +% remove stretchability, just to be safe +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +\if@IEEEeqnarrayISinner% inner does not touch master strut size +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstrutfalse% do not use master +\else% outer, have to set master strut too +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstruttrue% use master strut +\fi} + + +% usage: \IEEEeqnarraystrutsizeadd{added height}{added depth}[font size commands] +% If called outside the lines of an IEEEeqnarray, adds the given height +% and depth to both the master and local struts. +% If called inside an IEEEeqnarray line, adds the given height and depth +% to the local strut only and sets the flag to indicate the use +% of the local strut values. +% In both cases, if a height or depth is left blank, 0pt is used instead. +% The optional argument can be used to evaluate the lengths under +% a different font size and styles. If none is specified, the current +% font is used. +% uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 +\def\IEEEeqnarraystrutsizeadd#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsizeadd{#1}{#2}}{\@IEEEeqnarraystrutsizeadd{#1}{#2}[\relax]}} +\def\@IEEEeqnarraystrutsizeadd#1#2[#3]{\def\@IEEEeqnarraystrutsizearg{#1}% +\ifx\@IEEEeqnarraystrutsizearg\@empty% +\skip0=0pt\relax% +\else% arg one present +{\setbox0=\hbox{#3\relax\global\skip3=#1}}% +\skip0=\skip3\relax% +\fi% if null arg +\def\@IEEEeqnarraystrutsizearg{#2}% +\ifx\@IEEEeqnarraystrutsizearg\@empty% +\skip2=0pt\relax% +\else% arg two present +{\setbox0=\hbox{#3\relax\global\skip3=#2}}% +\skip2=\skip3\relax% +\fi% if null arg +% remove stretchability, just to be safe +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +\if@IEEEeqnarrayISinner% inner does not touch master strut size +% get local strut size +\expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% +% add it to the user supplied values +\advance\dimen0 by \skip0\relax% +\advance\dimen2 by \skip2\relax% +% update the local strut size +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstrutfalse% do not use master +\else% outer, have to set master strut too +% get master strut size +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% add it to the user supplied values +\advance\dimen0 by \skip0\relax% +\advance\dimen2 by \skip2\relax% +% update the local and master strut sizes +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstruttrue% use master strut +\fi} + + +% allow user a way to see the struts +\newif\ifIEEEvisiblestruts +\IEEEvisiblestrutsfalse + +% inserts an invisible strut using the master or local strut values +% uses scratch registers \skip0, \skip2, \dimen0, \dimen2 +\def\@IEEEeqnarrayinsertstrut{\relax% +\if@IEEEeqnarrayusemasterstrut +% get master strut size +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +\else% +% get local strut size +\expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% +\fi% +% remove stretchability, probably not needed +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +% allow user to see struts if desired +\ifIEEEvisiblestruts% +\vrule width0.2pt height\dimen0 depth\dimen2\relax% +\else% +\vrule width0pt height\dimen0 depth\dimen2\relax\fi} + + +% creates an invisible strut, useable even outside \IEEEeqnarray +% if \IEEEvisiblestrutstrue, the strut will be visible and 0.2pt wide. +% usage: \IEEEstrut[height][depth][font size commands] +% default is \IEEEstrut[0.7\normalbaselineskip][0.3\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \dimen0, \dimen2, \skip0, \skip2 +\def\IEEEstrut{\relax\@ifnextchar[{\@IEEEstrut}{\@IEEEstrut[0.7\normalbaselineskip]}} +\def\@IEEEstrut[#1]{\relax\@ifnextchar[{\@@IEEEstrut[#1]}{\@@IEEEstrut[#1][0.3\normalbaselineskip]}} +\def\@@IEEEstrut[#1][#2]{\relax\@ifnextchar[{\@@@IEEEstrut[#1][#2]}{\@@@IEEEstrut[#1][#2][\relax]}} +\def\@@@IEEEstrut[#1][#2][#3]{\mbox{#3\relax% +\def\@IEEEstrutARG{#1}% +\ifx\@IEEEstrutARG\@empty% +\skip0=0.7\normalbaselineskip\relax% +\else% +\skip0=#1\relax% +\fi% +\def\@IEEEstrutARG{#2}% +\ifx\@IEEEstrutARG\@empty% +\skip2=0.3\normalbaselineskip\relax% +\else% +\skip2=#2\relax% +\fi% +% remove stretchability, probably not needed +\dimen0\skip0\relax% +\dimen2\skip2\relax% +\ifIEEEvisiblestruts% +\vrule width0.2pt height\dimen0 depth\dimen2\relax% +\else% +\vrule width0.0pt height\dimen0 depth\dimen2\relax\fi}} + + +% enables strut mode by setting a default strut size and then zeroing the +% \baselineskip, \lineskip, \lineskiplimit and \jot +\def\IEEEeqnarraystrutmode{\IEEEeqnarraystrutsize{0.7\normalbaselineskip}{0.3\normalbaselineskip}[\relax]% +\baselineskip=0pt\lineskip=0pt\lineskiplimit=0pt\jot=0pt} + + +% equation and subequation forms to use to setup hyperref's \@currentHref +\def\@IEEEtheHrefequation{equation.\theHequation} +\def\@IEEEtheHrefsubequation{equation.\theHequation\alph{IEEEsubequation}} + + +\def\IEEEeqnarray{\@IEEEeqnumpersisttrue\@IEEEsubeqnumpersistfalse\@IEEEeqnarray} +\def\endIEEEeqnarray{\end@IEEEeqnarray} + +\@namedef{IEEEeqnarray*}{\@IEEEeqnumpersistfalse\@IEEEsubeqnumpersistfalse\@IEEEeqnarray} +\@namedef{endIEEEeqnarray*}{\end@IEEEeqnarray} + + +% \IEEEeqnarray is an enhanced \eqnarray. +% The star form defaults to not putting equation numbers at the end of each row. +% usage: \IEEEeqnarray[decl]{cols} +\def\@IEEEeqnarray{\relax\@ifnextchar[{\@@IEEEeqnarray}{\@@IEEEeqnarray[\relax]}} +% We have to be careful here to normalize catcodes just before acquiring the +% cols as that specification may contain punctuation which could be subject +% to document catcode changes. +\def\@@IEEEeqnarray[#1]{\begingroup\IEEEnormalcatcodes\@@@IEEEeqnarray[#1]} +\def\@@@IEEEeqnarray[#1]#2{\endgroup + % default to showing the equation number or not based on whether or not + % the star form was involked + \if@IEEEeqnumpersist\global\@eqnswtrue + \else% not the star form + \global\@eqnswfalse + \fi% if star form + % provide a basic hyperref \theHequation if this has not already been setup (hyperref not loaded, or no section counter) + \@ifundefined{theHequation}{\def\theHequation{\arabic{equation}}}{}\relax + % provide dummy hyperref commands in case hyperref is not loaded + \providecommand{\Hy@raisedlink}[1]{}\relax + \providecommand{\hyper@anchorstart}[1]{}\relax + \providecommand{\hyper@anchorend}{}\relax + \providecommand{\@currentHref}{}\relax + \@IEEEeqnumpreadvfalse% reset eqnpreadv flag + \@IEEEsubeqnumpreadvfalse% reset subeqnpreadv flag + \@IEEEeqnarrayISinnerfalse% not yet within the lines of the halign + \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default + \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise + \IEEEvisiblestrutsfalse% diagnostic mode defaults to off + % no extra space unless the user specifically requests it + \lineskip=0pt\relax + \lineskiplimit=0pt\relax + \baselineskip=\normalbaselineskip\relax% + \jot=\IEEEnormaljot\relax% + \mathsurround\z@\relax% no extra spacing around math + \@advanceIEEEeqncolcnttrue% advance the col counter for each col the user uses, + % used in \IEEEeqnarraymulticol and in the preamble build + %V1.8 Here we preadvance to the next equation number. + % If the user later wants a continued subequation, we can roll back. + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation% + \stepcounter{equation}\@IEEEeqnumpreadvtrue% advance equation counter before first line + \setcounter{IEEEsubequation}{0}% no subequation yet + \let\@IEEEcurrentlabelsave\@currentlabel% save current label as we later change it globally + \let\@IEEEcurrentHrefsave\@currentHref% save current href label as we later change it globally + \def\@currentlabel{\p@equation\theequation}% redefine the ref label + \def\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \IEEEeqnarraydecl\relax% allow a way for the user to make global overrides + #1\relax% allow user to override defaults + \let\\\@IEEEeqnarraycr% replace newline with one that can put in eqn. numbers + \global\@IEEEeqncolcnt\z@% col. count = 0 for first line + \@IEEEbuildpreamble{#2}\relax% build the preamble and put it into \@IEEEtrantmptoksA + % put in the column for the equation number + \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first + \toks0={##}% + % advance the \@IEEEeqncolcnt for the isolation col, this helps with error checking + \@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}% + % add the isolation column + \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% + % advance the \@IEEEeqncolcnt for the equation number col, this helps with error checking + \@IEEEappendtoksA{&\global\advance\@IEEEeqncolcnt by 1\relax}% + % add the equation number col to the preamble + \@IEEEappendtoksA{\tabskip\z@skip\hb@xt@\z@\bgroup\hss\the\toks0\egroup}% + % note \@IEEEeqnnumcols does not count the equation col or isolation col + % set the starting tabskip glue as determined by the preamble build + \tabskip=\@IEEEBPstartglue\relax + % begin the display alignment + \@IEEEeqnarrayISinnertrue% commands are now within the lines + $$\everycr{}\halign to\displaywidth\bgroup + % "exspand" the preamble + \span\the\@IEEEtrantmptoksA\cr} + +% enter isolation/strut column (or the next column if the user did not use +% every column), record the strut status, complete the columns, do the strut if needed, +% restore counters (to backout any equation setup for a next line that was never used) +% to their correct values and exit +\def\end@IEEEeqnarray{\@IEEEeqnarrayglobalizestrutstatus&\@@IEEEeqnarraycr\egroup +\if@IEEEsubeqnumpreadv\global\advance\c@IEEEsubequation\m@ne\fi +\if@IEEEeqnumpreadv\global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\fi +\global\let\@currentlabel\@IEEEcurrentlabelsave% restore current label +\global\let\@currentHref\@IEEEcurrentHrefsave% restore current href label +$$\@ignoretrue} + + +% IEEEeqnarray uses a modifed \\ instead of the plain \cr to +% end rows. This allows for things like \\*[vskip amount] +% These "cr" macros are modified versions of those for LaTeX2e's eqnarray +% the {\ifnum0=`} braces must be kept away from the last column to avoid +% altering spacing of its math, so we use & to advance to the next column +% as there is an isolation/strut column after the user's columns +\def\@IEEEeqnarraycr{\@IEEEeqnarrayglobalizestrutstatus&% save strut status and advance to next column + {\ifnum0=`}\fi + \@ifstar{% + \global\@eqpen\@M\@IEEEeqnarrayYCR + }{% + \global\@eqpen\interdisplaylinepenalty \@IEEEeqnarrayYCR + }% +} + +\def\@IEEEeqnarrayYCR{\@testopt\@IEEEeqnarrayXCR\z@skip} + +\def\@IEEEeqnarrayXCR[#1]{% + \ifnum0=`{\fi}% + \@@IEEEeqnarraycr + \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}}% + +\def\@@IEEEeqnarraycr{\@IEEEtrantmptoksA={}% clear token register + \advance\@IEEEeqncolcnt by -1\relax% adjust col count because of the isolation column + \ifnum\@IEEEeqncolcnt>\@IEEEeqnnumcols\relax + \@IEEEclspkgerror{Too many columns within the IEEEeqnarray\MessageBreak + environment}% + {Use fewer \string &'s or put more columns in the IEEEeqnarray column\MessageBreak + specifications.}\relax% + \else + \loop% add cols if the user did not use them all + \ifnum\@IEEEeqncolcnt<\@IEEEeqnnumcols\relax + \@IEEEappendtoksA{&}% + \advance\@IEEEeqncolcnt by 1\relax% update the col count + \repeat + % this number of &'s will take us the the isolation column + \fi + % execute the &'s + \the\@IEEEtrantmptoksA% + % handle the strut/isolation column + \@IEEEeqnarrayinsertstrut% do the strut if needed + \@IEEEeqnarraystrutreset% reset the strut system for next line or IEEEeqnarray + &% and enter the equation number column + \if@eqnsw% only if we display something + \Hy@raisedlink{\hyper@anchorstart{\@currentHref}}% start a hyperref anchor + \global\@IEEEeqnumpreadvfalse\relax% displaying an equation number means + \global\@IEEEsubeqnumpreadvfalse\relax% the equation counters point to valid equations + % V1.8 Here we setup the counters, currentlabel and status for what would be the *next* + % equation line as would be the case under the current settings. However, there are two problems. + % One problem is that there might not ever be a next line. The second problem is that the user + % may later alter the meaning of a line with commands such as \IEEEyessubnumber. So, to handle + % these cases we have to record the current values of the (sub)equation counters and revert back + % to them if the next line is changed or never comes. The \if@IEEEeqnumpreadv, \if@IEEEsubeqnumpreadv + % and \@IEEEsubeqnnumrollback stuff tracks this. + % The logic to handle all this is surprisingly complex, but a nice feature of the approach here is + % that the equation counters and labels remain valid for what the line would be unless a + % \IEEEyessubnumber et al. later changes it. So, any hyperref links are always correct. + \ifnum\c@IEEEsubequation>0\relax% handle subequation + \theIEEEsubequationdis\relax + \if@IEEEsubeqnumpersist% setup for default type of next line + \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \else + % if no subeqnum persist, go ahead and setup for a new equation number + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation + \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax + \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi + \else% display a standard equation number + \theequationdis\relax + \setcounter{IEEEsubequation}{0}\relax% not really needed + \if@IEEEsubeqnumpersist% setup for default type of next line + % subequations that follow plain equations carry the same equation number e.g, 5, 5a rather than 5, 6a + \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \else + % if no subeqnum persist, go ahead and setup for a new equation number + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation + \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax + \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi + \fi% + \Hy@raisedlink{\hyper@anchorend}% end hyperref anchor + \fi% fi only if we display something + % reset the flags to indicate the default preferences of the display of equation numbers + \if@IEEEeqnumpersist\global\@eqnswtrue\else\global\@eqnswfalse\fi + \if@IEEEsubeqnumpersist\global\@eqnswtrue\fi% ditto for the subequation flag + % reset the number of columns the user actually used + \global\@IEEEeqncolcnt\z@\relax + % the real end of the line + \cr} + + + + + +% \IEEEeqnarraybox is like \IEEEeqnarray except the box form puts everything +% inside a vtop, vbox, or vcenter box depending on the letter in the second +% optional argument (t,b,c). Vbox is the default. Unlike \IEEEeqnarray, +% equation numbers are not displayed and \IEEEeqnarraybox can be nested. +% \IEEEeqnarrayboxm is for math mode (like \array) and does not put the vbox +% within an hbox. +% \IEEEeqnarrayboxt is for text mode (like \tabular) and puts the vbox within +% a \hbox{$ $} construct. +% \IEEEeqnarraybox will auto detect whether to use \IEEEeqnarrayboxm or +% \IEEEeqnarrayboxt depending on the math mode. +% The third optional argument specifies the width this box is to be set to - +% natural width is the default. +% The * forms do not add \jot line spacing +% usage: \IEEEeqnarraybox[decl][pos][width]{cols} +\def\IEEEeqnarrayboxm{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} +\def\endIEEEeqnarrayboxm{\end@IEEEeqnarraybox} +\@namedef{IEEEeqnarrayboxm*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarrayboxm*}{\end@IEEEeqnarraybox} + +\def\IEEEeqnarrayboxt{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} +\def\endIEEEeqnarrayboxt{\end@IEEEeqnarraybox} +\@namedef{IEEEeqnarrayboxt*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarrayboxt*}{\end@IEEEeqnarraybox} + +\def\IEEEeqnarraybox{\@IEEEeqnarrayboxnojotfalse\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% +\@IEEEeqnarraybox} +\def\endIEEEeqnarraybox{\end@IEEEeqnarraybox} + +\@namedef{IEEEeqnarraybox*}{\@IEEEeqnarrayboxnojottrue\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% +\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarraybox*}{\end@IEEEeqnarraybox} + +% flag to indicate if the \IEEEeqnarraybox needs to put things into an hbox{$ $} +% for \vcenter in non-math mode +\newif\if@IEEEeqnarrayboxHBOXSW% +\@IEEEeqnarrayboxHBOXSWfalse + +\def\@IEEEeqnarraybox{\relax\@ifnextchar[{\@@IEEEeqnarraybox}{\@@IEEEeqnarraybox[\relax]}} +% We have to be careful here to normalize catcodes just before acquiring the +% cols as that specification may contain punctuation which could be subject +% to document catcode changes. +\def\@@IEEEeqnarraybox[#1]{\relax\begingroup\IEEEnormalcatcodes\@ifnextchar[{\@@@IEEEeqnarraybox[#1]}{\@@@IEEEeqnarraybox[#1][b]}} +\def\@@@IEEEeqnarraybox[#1][#2]{\relax\@ifnextchar[{\@@@@IEEEeqnarraybox[#1][#2]}{\@@@@IEEEeqnarraybox[#1][#2][\relax]}} + +% #1 = decl; #2 = t,b,c; #3 = width, #4 = col specs +\def\@@@@IEEEeqnarraybox[#1][#2][#3]#4{\endgroup\@IEEEeqnarrayISinnerfalse % not yet within the lines of the halign + \@IEEEeqnarraymasterstrutsave% save current master strut values + \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default + \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise + \IEEEvisiblestrutsfalse% diagnostic mode defaults to off + % no extra space unless the user specifically requests it + \lineskip=0pt\relax% + \lineskiplimit=0pt\relax% + \baselineskip=\normalbaselineskip\relax% + \jot=\IEEEnormaljot\relax% + \mathsurround\z@\relax% no extra spacing around math + % the default end glues are zero for an \IEEEeqnarraybox + \edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPzero}% default start glue + \edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPzero}% default end glue + \edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue + \@advanceIEEEeqncolcntfalse% do not advance the col counter for each col the user uses, + % used in \IEEEeqnarraymulticol and in the preamble build + \IEEEeqnarrayboxdecl\relax% allow a way for the user to make global overrides + #1\relax% allow user to override defaults + \let\\\@IEEEeqnarrayboxcr% replace newline with one that allows optional spacing + \@IEEEbuildpreamble{#4}\relax% build the preamble and put it into \@IEEEtrantmptoksA + % add an isolation column to the preamble to stop \\'s {} from getting into the last col + \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first + \toks0={##}% + % add the isolation column to the preamble + \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% + % set the starting tabskip glue as determined by the preamble build + \tabskip=\@IEEEBPstartglue\relax + % begin the alignment + \everycr{}% + % use only the very first token to determine the positioning + \@IEEEextracttoken{#2}\relax + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: IEEEeqnarraybox position specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi + % \@IEEEextractedtoken has the first token, the rest are ignored + % if we need to put things into and hbox and go into math mode, do so now + \if@IEEEeqnarrayboxHBOXSW \leavevmode \hbox \bgroup $\fi% + % use the appropriate vbox type + \if\@IEEEextractedtoken t\relax\vtop\else\if\@IEEEextractedtoken c\relax% + \vcenter\else\vbox\fi\fi\bgroup% + \@IEEEeqnarrayISinnertrue% commands are now within the lines + \ifx#3\relax\halign\else\halign to #3\relax\fi% + \bgroup + % "exspand" the preamble + \span\the\@IEEEtrantmptoksA\cr} + +% carry strut status and enter the isolation/strut column, +% exit from math mode if needed, and exit +\def\end@IEEEeqnarraybox{\@IEEEeqnarrayglobalizestrutstatus% carry strut status +&% enter isolation/strut column +\@IEEEeqnarrayinsertstrut% do strut if needed +\@IEEEeqnarraymasterstrutrestore% restore the previous master strut values +% reset the strut system for next IEEEeqnarray +% (sets local strut values back to previous master strut values) +\@IEEEeqnarraystrutreset% +% ensure last line, exit from halign, close vbox +\crcr\egroup\egroup% +% exit from math mode and close hbox if needed +\if@IEEEeqnarrayboxHBOXSW $\egroup\fi} + + + +% IEEEeqnarraybox uses a modifed \\ instead of the plain \cr to +% end rows. This allows for things like \\[vskip amount] +% This "cr" macros are modified versions those for LaTeX2e's eqnarray +% For IEEEeqnarraybox, \\* is the same as \\ +% the {\ifnum0=`} braces must be kept away from the last column to avoid +% altering spacing of its math, so we use & to advance to the isolation/strut column +% carry strut status into isolation/strut column +\def\@IEEEeqnarrayboxcr{\@IEEEeqnarrayglobalizestrutstatus% carry strut status +&% enter isolation/strut column +\@IEEEeqnarrayinsertstrut% do strut if needed +% reset the strut system for next line or IEEEeqnarray +\@IEEEeqnarraystrutreset% +{\ifnum0=`}\fi% +\@ifstar{\@IEEEeqnarrayboxYCR}{\@IEEEeqnarrayboxYCR}} + +% test and setup the optional argument to \\[] +\def\@IEEEeqnarrayboxYCR{\@testopt\@IEEEeqnarrayboxXCR\z@skip} + +% IEEEeqnarraybox does not automatically increase line spacing by \jot +\def\@IEEEeqnarrayboxXCR[#1]{\ifnum0=`{\fi}% +\cr\noalign{\if@IEEEeqnarrayboxnojot\else\vskip\jot\fi\vskip#1\relax}} + + + +% usage: \@IEEEbuildpreamble{column specifiers} +% starts the halign preamble build +% the assembled preamble is put in \@IEEEtrantmptoksA +\def\@IEEEbuildpreamble#1{\@IEEEtrantmptoksA={}% clear token register +\let\@IEEEBPcurtype=u%current column type is not yet known +\let\@IEEEBPprevtype=s%the previous column type was the start +\let\@IEEEBPnexttype=u%next column type is not yet known +% ensure these are valid +\def\@IEEEBPcurglue={0pt plus 0pt minus 0pt}% +\def\@IEEEBPcurcolname{@IEEEdefault}% name of current column definition +% currently acquired numerically referenced glue +% use a name that is easier to remember +\let\@IEEEBPcurnum=\@IEEEtrantmpcountA% +\@IEEEBPcurnum=0% +% tracks number of columns in the preamble +\@IEEEeqnnumcols=0% +% record the default end glues +\edef\@IEEEBPstartglue{\@IEEEeqnarraycolSEPdefaultstart}% +\edef\@IEEEBPendglue{\@IEEEeqnarraycolSEPdefaultend}% +\edef\@IEEEedefMACRO{#1}\relax% fully expand the preamble to support macro containers +% now parse the user's column specifications +% \ignorespaces is used as a delimiter, need at least one trailing \relax because +% \@@IEEEbuildpreamble looks into the future +\expandafter\@@IEEEbuildpreamble\@IEEEedefMACRO\ignorespaces\relax\relax} + + +% usage: \@@IEEEbuildpreamble{current column}{next column} +% parses and builds the halign preamble +\def\@@IEEEbuildpreamble#1#2{\let\@@nextIEEEbuildpreamble=\@@IEEEbuildpreamble% +% use only the very first token to check the end +\@IEEEextracttokengroups{#1}\relax +\ifx\@IEEEextractedfirsttoken\ignorespaces\let\@@nextIEEEbuildpreamble=\@@IEEEfinishpreamble\else% +% identify current and next token type +\@IEEEgetcoltype{#1}{\@IEEEBPcurtype}{1}% current, error on invalid +\@IEEEgetcoltype{#2}{\@IEEEBPnexttype}{0}% next, no error on invalid next +% if curtype is a glue, get the glue def +\if\@IEEEBPcurtype g\@IEEEgetcurglue{#1}{\@IEEEBPcurglue}\fi% +% if curtype is a column, get the column def and set the current column name +\if\@IEEEBPcurtype c\@IEEEgetcurcol{#1}\fi% +% if curtype is a numeral, acquire the user defined glue +\if\@IEEEBPcurtype n\@IEEEprocessNcol{#1}\fi% +% process the acquired glue +\if\@IEEEBPcurtype g\@IEEEprocessGcol\fi% +% process the acquired col +\if\@IEEEBPcurtype c\@IEEEprocessCcol\fi% +% ready prevtype for next col spec. +\let\@IEEEBPprevtype=\@IEEEBPcurtype% +% be sure and put back the future token(s) as a group +\fi\@@nextIEEEbuildpreamble{#2}} + + +% usage: \@@IEEEfinishpreamble{discarded} +% executed just after preamble build is completed +% warn about zero cols, and if prevtype type = u, put in end tabskip glue +% argument is not used +\def\@@IEEEfinishpreamble#1{\ifnum\@IEEEeqnnumcols<1\relax +\@IEEEclspkgerror{No column specifiers declared for IEEEeqnarray}% +{At least one column type must be declared for each IEEEeqnarray.}% +\fi%num cols less than 1 +%if last type undefined, set default end tabskip glue +\if\@IEEEBPprevtype u\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue}\fi} + + +% usage: \@IEEEgetcoltype{col specifier}{\output}{error more} +% Identify and return the column specifier's type code in the given +% \output macro: +% n = number +% g = glue (any other char in catagory 12) +% c = letter +% e = \ignorespaces (end of sequence) +% u = undefined +% error mode: 0 = no error message, 1 = error on invalid char +\def\@IEEEgetcoltype#1#2#3{% +% use only the very first token to determine the type +\@IEEEextracttoken{#1}\relax +% \@IEEEextractedtoken has the first token, the rest are discarded +\let#2=u\relax% assume invalid until know otherwise +\ifx\@IEEEextractedtoken\ignorespaces\let#2=e\else +\ifcat\@IEEEextractedtoken\relax\else% screen out control sequences +\if0\@IEEEextractedtoken\let#2=n\else +\if1\@IEEEextractedtoken\let#2=n\else +\if2\@IEEEextractedtoken\let#2=n\else +\if3\@IEEEextractedtoken\let#2=n\else +\if4\@IEEEextractedtoken\let#2=n\else +\if5\@IEEEextractedtoken\let#2=n\else +\if6\@IEEEextractedtoken\let#2=n\else +\if7\@IEEEextractedtoken\let#2=n\else +\if8\@IEEEextractedtoken\let#2=n\else +\if9\@IEEEextractedtoken\let#2=n\else +\ifcat,\@IEEEextractedtoken\let#2=g\relax +\else\ifcat a\@IEEEextractedtoken\let#2=c\relax\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi +\if#2u\relax +\if0\noexpand#3\relax\else\@IEEEclspkgerror{Invalid character in column specifications}% +{Only letters, numerals and certain other symbols are allowed \MessageBreak +as IEEEeqnarray column specifiers.}\fi\fi} + + +% usage: \@IEEEgetcurcol{col specifier} +% verify the letter referenced column exists +% and return its name in \@IEEEBPcurcolname +% if column specifier is invalid, use the default column @IEEEdefault +\def\@IEEEgetcurcol#1{\expandafter\ifx\csname @IEEEeqnarraycolDEF#1\endcsname\@IEEEeqnarraycolisdefined% +\def\@IEEEBPcurcolname{#1}\else% invalid column name +\@IEEEclspkgerror{Invalid column type "#1" in column specifications.\MessageBreak +Using a default centering column instead}% +{You must define IEEEeqnarray column types before use.}% +\def\@IEEEBPcurcolname{@IEEEdefault}\fi} + + +% usage: \@IEEEgetcurglue{glue specifier}{\output} +% identify the predefined (punctuation) glue value +% and return it in the given output macro +\def\@IEEEgetcurglue#1#2{% +% ! = \! (neg small) -0.16667em (-3/18 em) +% , = \, (small) 0.16667em ( 3/18 em) +% : = \: (med) 0.22222em ( 4/18 em) +% ; = \; (large) 0.27778em ( 5/18 em) +% ' = \quad 1em +% " = \qquad 2em +% . = 0.5\arraycolsep +% / = \arraycolsep +% ? = 2\arraycolsep +% * = 1fil +% + = \@IEEEeqnarraycolSEPcenter +% - = \@IEEEeqnarraycolSEPzero +% Note that all em values are referenced to the math font (textfont2) fontdimen6 +% value for 1em. +% +% use only the very first token to determine the type +\@IEEEextracttoken{#1}\relax +\ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: IEEEeqnarray predefined inter-column glue type specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax +\fi +% get the math font 1em value +% LaTeX2e's NFSS2 does not preload the fonts, but \IEEEeqnarray needs +% to gain access to the math (\textfont2) font's spacing parameters. +% So we create a bogus box here that uses the math font to ensure +% that \textfont2 is loaded and ready. If this is not done, +% the \textfont2 stuff here may not work. +% Thanks to Bernd Raichle for his 1997 post on this topic. +{\setbox0=\hbox{$\displaystyle\relax$}}% +% fontdimen6 has the width of 1em (a quad). +\@IEEEtrantmpdimenA=\fontdimen6\textfont2\relax% +% identify the glue value based on the first token +% we discard anything after the first +\if!\@IEEEextractedtoken\@IEEEtrantmpdimenA=-0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if,\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if:\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.22222\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if;\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.27778\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if'\@IEEEextractedtoken\@IEEEtrantmpdimenA=1\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if"\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if.\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.5\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else +\if/\@IEEEextractedtoken\edef#2{\the\arraycolsep}\else +\if?\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else +\if *\@IEEEextractedtoken\edef#2{0pt plus 1fil minus 0pt}\else +\if+\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPcenter}\else +\if-\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPzero}\else +\edef#2{\@IEEEeqnarraycolSEPzero}% +\@IEEEclspkgerror{Invalid predefined inter-column glue type "#1" in\MessageBreak +column specifications. Using a default value of\MessageBreak +0pt instead}% +{Only !,:;'"./?*+ and - are valid predefined glue types in the\MessageBreak +IEEEeqnarray column specifications.}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + + +% usage: \@IEEEprocessNcol{digit} +% process a numerical digit from the column specification +% and look up the corresponding user defined glue value +% can transform current type from n to g or a as the user defined glue is acquired +\def\@IEEEprocessNcol#1{\if\@IEEEBPprevtype g% +\@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak +specifications. Ignoring consecutive glue specifiers\MessageBreak +after the first}% +{You cannot have two or more glue types next to each other\MessageBreak +in the IEEEeqnarray column specifications.}% +\let\@IEEEBPcurtype=a% abort this glue, future digits will be discarded +\@IEEEBPcurnum=0\relax% +\else% if we previously aborted a glue +\if\@IEEEBPprevtype a\@IEEEBPcurnum=0\let\@IEEEBPcurtype=a%maintain digit abortion +\else%acquire this number +% save the previous type before the numerical digits started +\if\@IEEEBPprevtype n\else\let\@IEEEBPprevsavedtype=\@IEEEBPprevtype\fi% +\multiply\@IEEEBPcurnum by 10\relax% +\advance\@IEEEBPcurnum by #1\relax% add in number, \relax is needed to stop TeX's number scan +\if\@IEEEBPnexttype n\else%close acquisition +\expandafter\ifx\csname @IEEEeqnarraycolSEPDEF\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname\@IEEEeqnarraycolisdefined% +\edef\@IEEEBPcurglue{\csname @IEEEeqnarraycolSEP\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname}% +\else%user glue not defined +\@IEEEclspkgerror{Invalid user defined inter-column glue type "\number\@IEEEBPcurnum" in\MessageBreak +column specifications. Using a default value of\MessageBreak +0pt instead}% +{You must define all IEEEeqnarray numerical inter-column glue types via\MessageBreak +\string\IEEEeqnarraydefcolsep \space before they are used in column specifications.}% +\edef\@IEEEBPcurglue{\@IEEEeqnarraycolSEPzero}% +\fi% glue defined or not +\let\@IEEEBPcurtype=g% change the type to reflect the acquired glue +\let\@IEEEBPprevtype=\@IEEEBPprevsavedtype% restore the prev type before this number glue +\@IEEEBPcurnum=0\relax%ready for next acquisition +\fi%close acquisition, get glue +\fi%discard or acquire number +\fi%prevtype glue or not +} + + +% process an acquired glue +% add any acquired column/glue pair to the preamble +\def\@IEEEprocessGcol{\if\@IEEEBPprevtype a\let\@IEEEBPcurtype=a%maintain previous glue abortions +\else +% if this is the start glue, save it, but do nothing else +% as this is not used in the preamble, but before +\if\@IEEEBPprevtype s\edef\@IEEEBPstartglue{\@IEEEBPcurglue}% +\else%not the start glue +\if\@IEEEBPprevtype g%ignore if back to back glues +\@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak +specifications. Ignoring consecutive glue specifiers\MessageBreak +after the first}% +{You cannot have two or more glue types next to each other\MessageBreak +in the IEEEeqnarray column specifications.}% +\let\@IEEEBPcurtype=a% abort this glue +\else% not a back to back glue +\if\@IEEEBPprevtype c\relax% if the previoustype was a col, add column/glue pair to preamble +\ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi +\toks0={##}% +% make preamble advance col counter if this environment needs this +\if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi +% insert the column defintion into the preamble, being careful not to expand +% the column definition +\@IEEEappendtoksA{\tabskip=\@IEEEBPcurglue}% +\@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname}% +\@IEEEappendtoksA{\the\toks0}% +\@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\endgroup}% +\advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble +\else% error: non-start glue with no pending column +\@IEEEclspkgerror{Inter-column glue specifier without a prior column\MessageBreak +type in the column specifications. Ignoring this glue\MessageBreak +specifier}% +{Except for the first and last positions, glue can be placed only\MessageBreak +between column types.}% +\let\@IEEEBPcurtype=a% abort this glue +\fi% previous was a column +\fi% back-to-back glues +\fi% is start column glue +\fi% prev type not a +} + + +% process an acquired letter referenced column and, if necessary, add it to the preamble +\def\@IEEEprocessCcol{\if\@IEEEBPnexttype g\else +\if\@IEEEBPnexttype n\else +% we have a column followed by something other than a glue (or numeral glue) +% so we must add this column to the preamble now +\ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi%col separator for those after the first +\if\@IEEEBPnexttype e\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue\relax}\else%put in end glue +\@IEEEappendtoksA{\tabskip=\@IEEEeqnarraycolSEPdefaultmid\relax}\fi% or default mid glue +\toks0={##}% +% make preamble advance col counter if this environment needs this +\if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi +% insert the column definition into the preamble, being careful not to expand +% the column definition +\@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname}% +\@IEEEappendtoksA{\the\toks0}% +\@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\endgroup}% +\advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble +\fi%next type not numeral +\fi%next type not glue +} + + +%% +%% END OF IEEEeqnarray DEFINITIONS +%% + + + + + +% set up the running headers and footers +% +% header and footer font and size specifications +\def\@IEEEheaderstyle{\normalfont\scriptsize} +\def\@IEEEfooterstyle{\normalfont\scriptsize} +% +% compsoc uses sans-serif headers and footers +\ifCLASSOPTIONcompsoc + \def\@IEEEheaderstyle{\normalfont\sffamily\scriptsize} + \def\@IEEEfooterstyle{\normalfont\sffamily\scriptsize} +\fi + + +% standard page style, ps@headings +\def\ps@headings{% default to standard twoside headers, no footers +% will change later if the mode requires otherwise +\def\@oddhead{\hbox{}\@IEEEheaderstyle\rightmark\hfil\thepage}\relax +\def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\let\@oddfoot\@empty +\let\@evenfoot\@empty +\ifCLASSOPTIONtechnote + % technote twoside + \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax + \def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\fi +\ifCLASSOPTIONdraftcls + % draft footers + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax +\fi +% oneside +\if@twoside\else + % standard one side headers + \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax + \let\@evenhead\@empty + \ifCLASSOPTIONdraftcls + % oneside draft footers + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \let\@evenfoot\@empty + \fi +\fi +% turn off headers for conferences +\ifCLASSOPTIONconference + \let\@oddhead\@empty + \let\@evenhead\@empty +\fi +% turn off footers for draftclsnofoot +\ifCLASSOPTIONdraftclsnofoot + \let\@oddfoot\@empty + \let\@evenfoot\@empty +\fi} + + +% title page style, ps@IEEEtitlepagestyle +\def\ps@IEEEtitlepagestyle{% default title page headers, no footers +\def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax +\def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\let\@oddfoot\@empty +\let\@evenfoot\@empty +% will change later if the mode requires otherwise +\ifCLASSOPTIONdraftcls + % draft footers + \ifCLASSOPTIONdraftclsnofoot\else + % but only if not draftclsnofoot + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax + \fi +\else + % all nondraft mode footers + \if@IEEEusingpubid + % for title pages that are using a pubid + % do not repeat pubid on the title page if using a peer review cover page + \ifCLASSOPTIONpeerreview\else + % for noncompsoc papers, the pubid uses footnotesize and + % is at the same vertical position as where the last baseline would normally be + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \ifCLASSOPTIONcompsoc + % for compsoc papers, the pubid is at the same vertical position as the normal footer + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \fi + \fi + \fi +\fi +% turn off headers for conferences +\ifCLASSOPTIONconference + \let\@oddhead\@empty + \let\@evenhead\@empty +\fi} + + +% peer review cover page style, ps@IEEEpeerreviewcoverpagestyle +\def\ps@IEEEpeerreviewcoverpagestyle{% default peer review cover no headers, no footers +\let\@oddhead\@empty +\let\@evenhead\@empty +\let\@oddfoot\@empty +\let\@evenfoot\@empty +% will change later if the mode requires otherwise +\ifCLASSOPTIONdraftcls + % draft footers + \ifCLASSOPTIONdraftclsnofoot\else + % but only if not draftclsnofoot + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax + \fi +\else + % all nondraft mode footers + \if@IEEEusingpubid + % for peer review cover pages that are using a pubid + % for noncompsoc papers, the pubid uses footnotesize and + % is at the same vertical position as where the last baseline would normally be + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \ifCLASSOPTIONcompsoc + % for compsoc papers, the pubid is at the same vertical position as the normal footer + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \fi + \fi +\fi} + + + +%% Defines the command for putting the header. +%% Note that all the text is forced into uppercase, if you have some text +%% that needs to be in lower case, for instance et. al., then either manually +%% set \leftmark and \rightmark or use \MakeLowercase{et. al.} within the +%% arguments to \markboth. +%% V1.7b add \protect to work with Babel +\def\markboth#1#2{\def\leftmark{\MakeUppercase{\protect#1}}% +\def\rightmark{\MakeUppercase{\protect#2}}} + +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} + + + + +%% CITATION AND BIBLIOGRAPHY COMMANDS +%% +%% V1.6 no longer supports the older, nonstandard \shortcite and \citename setup stuff +% +% +% Modify Latex2e \@citex to separate citations with "], [" +\def\@citex[#1]#2{% + \let\@citea\@empty + \@cite{\@for\@citeb:=#2\do + {\@citea\def\@citea{], [}% + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi + \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}% + \G@refundefinedtrue + \@latex@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {\hbox{\csname b@\@citeb\endcsname}}}}{#1}} + +% V1.6 we create hooks for the optional use of Donald Arseneau's +% cite.sty package. cite.sty is "smart" and will notice that the +% following format controls are already defined and will not +% redefine them. The result will be the proper sorting of the +% citation numbers and auto detection of 3 or more entry "ranges" - +% all in IEEE style: [1], [2], [5]--[7], [12] +% This also allows for an optional note, i.e., \cite[mynote]{..}. +% If the \cite with note has more than one reference, the note will +% be applied to the last of the listed references. It is generally +% desired that if a note is given, only one reference is listed in +% that \cite. +% Thanks to Mr. Arseneau for providing the required format arguments +% to produce the IEEE style. +\def\citepunct{], [} +\def\citedash{]--[} + +% V1.7 default to using same font for urls made by url.sty +\AtBeginDocument{\csname url@samestyle\endcsname} + +% V1.6 class files should always provide these +\def\newblock{\hskip .11em\@plus.33em\@minus.07em} +\let\@openbib@code\@empty +% V1.8b article.cls is now providing these too +% we do not use \@mkboth, nor alter the page style +\newenvironment{theindex} + {\if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi + \twocolumn[\section*{\indexname}]% + \parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \columnseprule \z@ + \columnsep 35\p@ + \let\item\@idxitem} + {\if@restonecol\onecolumn\else\clearpage\fi} +\newcommand\@idxitem{\par\hangindent 40\p@} +\newcommand\subitem{\@idxitem \hspace*{20\p@}} +\newcommand\subsubitem{\@idxitem \hspace*{30\p@}} +\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} + + + +% Provide support for the control entries of IEEEtran.bst V1.00 and later. +% V1.7 optional argument allows for a different aux file to be specified in +% order to handle multiple bibliographies. For example, with multibib.sty: +% \newcites{sec}{Secondary Literature} +% \bstctlcite[@auxoutsec]{BSTcontrolhak} +\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}} +\def\@bstctlcite[#1]#2{\@bsphack + \@for\@citeb:=#2\do{% + \edef\@citeb{\expandafter\@firstofone\@citeb}% + \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}% + \@esphack} + +% \IEEEnoauxwrite{} allows for citations that do not add to or affect +% the order of the existing citation list. Can be useful for \cite +% within \thanks{}. +\DeclareRobustCommand{\IEEEnoauxwrite}[1]{\relax +\if@filesw +\@fileswfalse +#1\relax\relax\relax\relax\relax +\@fileswtrue +\else +#1\relax\relax\relax\relax\relax +\fi} + +% V1.6 provide a way for a user to execute a command just before +% a given reference number - used to insert a \newpage to balance +% the columns on the last page +\edef\@IEEEtriggerrefnum{0} % the default of zero means that + % the command is not executed +\def\@IEEEtriggercmd{\newpage} + +% allow the user to alter the triggered command +\long\def\IEEEtriggercmd#1{\long\def\@IEEEtriggercmd{#1}} + +% allow user a way to specify the reference number just before the +% command is executed +\def\IEEEtriggeratref#1{\@IEEEtrantmpcountA=#1% +\edef\@IEEEtriggerrefnum{\the\@IEEEtrantmpcountA}}% + +% trigger command at the given reference +\def\@IEEEbibitemprefix{\@IEEEtrantmpcountA=\@IEEEtriggerrefnum\relax% +\advance\@IEEEtrantmpcountA by -1\relax% +\ifnum\c@enumiv=\@IEEEtrantmpcountA\relax\@IEEEtriggercmd\relax\fi} + + +\def\@biblabel#1{[#1]} + +% compsoc journals and conferences left align the reference numbers +\@IEEEcompsoconly{\def\@biblabel#1{[#1]\hfill}} + +% controls bib item spacing +\def\IEEEbibitemsep{0pt plus .5pt} + +\@IEEEcompsocconfonly{\def\IEEEbibitemsep{0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}} + + +\def\thebibliography#1{\section*{\refname}% + \addcontentsline{toc}{section}{\refname}% + % V1.6 add some rubber space here and provide a command trigger + \footnotesize\vskip 0.3\baselineskip plus 0.1\baselineskip minus 0.1\baselineskip% + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep\relax + \itemsep \IEEEbibitemsep\relax + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \let\@IEEElatexbibitem\bibitem% + \def\bibitem{\@IEEEbibitemprefix\@IEEElatexbibitem}% +\def\newblock{\hskip .11em plus .33em minus .07em}% +% originally: +% \sloppy\clubpenalty4000\widowpenalty4000% +% by adding the \interlinepenalty here, we make it more +% difficult, but not impossible, for LaTeX to break within a reference. +% The IEEE almost never breaks a reference (but they do it more often with +% technotes). You may get an underfull vbox warning around the bibliography, +% but the final result will be much more like what the IEEE will publish. +% MDS 11/2000 +\ifCLASSOPTIONtechnote\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty100% +\else\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty500\fi% + \sfcode`\.=1000\relax} +\let\endthebibliography=\endlist + + + + +% TITLE PAGE COMMANDS +% +% +% \IEEEmembership is used to produce the sublargesize italic font used to indicate author +% IEEE membership. compsoc uses a large size sans slant font +\def\IEEEmembership#1{{\@IEEEnotcompsoconly{\sublargesize}\normalfont\@IEEEcompsoconly{\sffamily}\textit{#1}}} + + +% \IEEEauthorrefmark{} produces a footnote type symbol to indicate author affiliation. +% When given an argument of 1 to 9, \IEEEauthorrefmark{} follows the standard LaTeX footnote +% symbol sequence convention. However, for arguments 10 and above, \IEEEauthorrefmark{} +% reverts to using lower case roman numerals, so it cannot overflow. Do note that you +% cannot use \footnotemark[] in place of \IEEEauthorrefmark{} within \author as the footnote +% symbols will have been turned off to prevent \thanks from creating footnote marks. +% \IEEEauthorrefmark{} produces a symbol that appears to LaTeX as having zero vertical +% height - this allows for a more compact line packing, but the user must ensure that +% the interline spacing is large enough to prevent \IEEEauthorrefmark{} from colliding +% with the text above. +% V1.7 make this a robust command +% V1.8 transmag uses an arabic author affiliation symbol +\ifCLASSOPTIONtransmag +\DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize #1}}} +\else +\DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or% + \mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger% + \or \ddagger\ddagger \else\textsuperscript{\expandafter\romannumeral#1}\fi}}}} +\fi + + +% FONT CONTROLS AND SPACINGS FOR CONFERENCE MODE AUTHOR NAME AND AFFILIATION BLOCKS +% +% The default font styles for the author name and affiliation blocks (confmode) +\def\@IEEEauthorblockNstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize} +\def\@IEEEauthorblockAstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\@IEEEcompsocconfonly{\itshape}\normalsize} +% The default if the user does not use an author block +\def\@IEEEauthordefaulttextstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize} + +% adjustment spacing from title (or special paper notice) to author name blocks (confmode) +% can be negative +\def\@IEEEauthorblockconfadjspace{-0.25em} +% compsoc conferences need more space here +\@IEEEcompsocconfonly{\def\@IEEEauthorblockconfadjspace{0.75\@IEEEnormalsizeunitybaselineskip}} + +% spacing between name and affiliation blocks (confmode) +% This can be negative. +% The IEEE doesn't want any added spacing here, but I will leave these +% controls in place in case they ever change their mind. +% Personally, I like 0.75ex. +%\def\@IEEEauthorblockNtopspace{0.75ex} +%\def\@IEEEauthorblockAtopspace{0.75ex} +\def\@IEEEauthorblockNtopspace{0.0ex} +\def\@IEEEauthorblockAtopspace{0.0ex} +\ifCLASSOPTIONtransmag +% transmag uses one line of space above first affiliation block +\def\@IEEEauthorblockAtopspace{1\@IEEEnormalsizeunitybaselineskip} +\fi + +% baseline spacing within name and affiliation blocks (confmode) +% must be positive, spacings below certain values will make +% the position of line of text sensitive to the contents of the +% line above it i.e., whether or not the prior line has descenders, +% subscripts, etc. For this reason it is a good idea to keep +% these above 2.6ex +\def\@IEEEauthorblockNinterlinespace{2.6ex} +\def\@IEEEauthorblockAinterlinespace{2.75ex} + +% This tracks the required strut size. +% See the \@IEEEauthorhalign command for the actual default value used. +\def\@IEEEauthorblockXinterlinespace{2.7ex} + +% variables to retain font size and style across groups +% values given here have no effect as they will be overwritten later +\gdef\@IEEESAVESTATEfontsize{10} +\gdef\@IEEESAVESTATEfontbaselineskip{12} +\gdef\@IEEESAVESTATEfontencoding{OT1} +\gdef\@IEEESAVESTATEfontfamily{ptm} +\gdef\@IEEESAVESTATEfontseries{m} +\gdef\@IEEESAVESTATEfontshape{n} + +% saves the current font attributes +\def\@IEEEcurfontSAVE{\global\let\@IEEESAVESTATEfontsize\f@size% +\global\let\@IEEESAVESTATEfontbaselineskip\f@baselineskip% +\global\let\@IEEESAVESTATEfontencoding\f@encoding% +\global\let\@IEEESAVESTATEfontfamily\f@family% +\global\let\@IEEESAVESTATEfontseries\f@series% +\global\let\@IEEESAVESTATEfontshape\f@shape} + +% restores the saved font attributes +\def\@IEEEcurfontRESTORE{\fontsize{\@IEEESAVESTATEfontsize}{\@IEEESAVESTATEfontbaselineskip}% +\fontencoding{\@IEEESAVESTATEfontencoding}% +\fontfamily{\@IEEESAVESTATEfontfamily}% +\fontseries{\@IEEESAVESTATEfontseries}% +\fontshape{\@IEEESAVESTATEfontshape}% +\selectfont} + + +% variable to indicate if the current block is the first block in the column +\newif\if@IEEEprevauthorblockincol \@IEEEprevauthorblockincolfalse + + +% the command places a strut with height and depth = \@IEEEauthorblockXinterlinespace +% we use this technique to have complete manual control over the spacing of the lines +% within the halign environment. +% We set the below baseline portion at 30%, the above +% baseline portion at 70% of the total length. +% Responds to changes in the document's \baselinestretch +\def\@IEEEauthorstrutrule{\@IEEEtrantmpdimenA\@IEEEauthorblockXinterlinespace% +\@IEEEtrantmpdimenA=\baselinestretch\@IEEEtrantmpdimenA% +\rule[-0.3\@IEEEtrantmpdimenA]{0pt}{\@IEEEtrantmpdimenA}} + + +% blocks to hold the authors' names and affilations. +% Makes formatting easy for conferences +% +% use real definitions in conference mode +% name block +\def\IEEEauthorblockN#1{\relax\@IEEEauthorblockNstyle% set the default text style +\gdef\@IEEEauthorblockXinterlinespace{0pt}% disable strut for spacer row +% the \expandafter hides the \cr in conditional tex, see the array.sty docs +% for details, probably not needed here as the \cr is in a macro +% do a spacer row if needed +\if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockNtopspaceline\fi +\global\@IEEEprevauthorblockincoltrue% we now have a block in this column +%restore the correct strut value +\gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockNinterlinespace}% +% input the author names +#1% +% end the row if the user did not already +\crcr} +% spacer row for names +\def\@IEEEauthorblockNtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockNtopspace}} +% +% affiliation block +\def\IEEEauthorblockA#1{\relax\@IEEEauthorblockAstyle% set the default text style +\gdef\@IEEEauthorblockXinterlinespace{0pt}%disable strut for spacer row +% the \expandafter hides the \cr in conditional tex, see the array.sty docs +% for details, probably not needed here as the \cr is in a macro +% do a spacer row if needed +\if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockAtopspaceline\fi +\global\@IEEEprevauthorblockincoltrue% we now have a block in this column +%restore the correct strut value +\gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockAinterlinespace}% +% input the author affiliations +#1% +% end the row if the user did not already +\crcr +% V1.8 transmag does not use any additional affiliation spacing after the first author +\ifCLASSOPTIONtransmag\gdef\@IEEEauthorblockAtopspace{0pt}\fi} + +% spacer row for affiliations +\def\@IEEEauthorblockAtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockAtopspace}} + + +% allow papers to compile even if author blocks are used in modes other +% than conference or peerreviewca. For such cases, we provide dummy blocks. +\ifCLASSOPTIONconference +\else + \ifCLASSOPTIONpeerreviewca\else + % not conference, peerreviewca or transmag mode + \ifCLASSOPTIONtransmag\else + \def\IEEEauthorblockN#1{#1}% + \def\IEEEauthorblockA#1{#1}% + \fi + \fi +\fi + + + +% we provide our own halign so as not to have to depend on tabular +\def\@IEEEauthorhalign{\@IEEEauthordefaulttextstyle% default text style + \lineskip=0pt\relax% disable line spacing + \lineskiplimit=0pt\relax% + \baselineskip=0pt\relax% + \@IEEEcurfontSAVE% save the current font + \mathsurround\z@\relax% no extra spacing around math + \let\\\@IEEEauthorhaligncr% replace newline with halign friendly one + \tabskip=0pt\relax% no column spacing + \everycr{}% ensure no problems here + \@IEEEprevauthorblockincolfalse% no author blocks yet + \def\@IEEEauthorblockXinterlinespace{2.7ex}% default interline space + \vtop\bgroup%vtop box + \halign\bgroup&\relax\hfil\@IEEEcurfontRESTORE\relax ##\relax + \hfil\@IEEEcurfontSAVE\@IEEEauthorstrutrule\cr} + +% ensure last line, exit from halign, close vbox +\def\end@IEEEauthorhalign{\crcr\egroup\egroup} + +% handle bogus star form +\def\@IEEEauthorhaligncr{{\ifnum0=`}\fi\@ifstar{\@@IEEEauthorhaligncr}{\@@IEEEauthorhaligncr}} + +% test and setup the optional argument to \\[] +\def\@@IEEEauthorhaligncr{\@testopt\@@@IEEEauthorhaligncr\z@skip} + +% end the line and do the optional spacer +\def\@@@IEEEauthorhaligncr[#1]{\ifnum0=`{\fi}\cr\noalign{\vskip#1\relax}} + + + +% flag to prevent multiple \and warning messages +\newif\if@IEEEWARNand +\@IEEEWARNandtrue + +% if in conference or peerreviewca modes, we support the use of \and as \author is a +% tabular environment, otherwise we warn the user that \and is invalid +% outside of conference or peerreviewca modes. +\def\and{\relax} % provide a bogus \and that we will then override + +\renewcommand{\and}[1][\relax]{\if@IEEEWARNand\typeout{** WARNING: \noexpand\and is valid only + when in conference or peerreviewca}\typeout{modes (line \the\inputlineno).}\fi\global\@IEEEWARNandfalse} + +\ifCLASSOPTIONconference% +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi +\ifCLASSOPTIONpeerreviewca +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi +% V1.8 transmag uses conference author format +\ifCLASSOPTIONtransmag +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi + +% page clearing command +% based on LaTeX2e's \cleardoublepage, but allows different page styles +% for the inserted blank pages +\def\@IEEEcleardoublepage#1{\clearpage\if@twoside\ifodd\c@page\else +\hbox{}\thispagestyle{#1}\newpage\if@twocolumn\hbox{}\thispagestyle{#1}\newpage\fi\fi\fi} + +% V1.8b hooks to allow adjustment of space above title +\def\IEEEtitletopspace{0.5\baselineskip} +% an added extra amount to allow for adjustment/offset +\def\IEEEtitletopspaceextra{0pt} + +% user command to invoke the title page +\def\maketitle{\par% + \begingroup% + \normalfont% + \def\thefootnote{}% the \thanks{} mark type is empty + \def\footnotemark{}% and kill space from \thanks within author + \let\@makefnmark\relax% V1.7, must *really* kill footnotemark to remove all \textsuperscript spacing as well. + \footnotesize% equal spacing between thanks lines + \footnotesep 0.7\baselineskip%see global setting of \footnotesep for more info + % V1.7 disable \thanks note indention for compsoc + \@IEEEcompsoconly{\long\def\@makefntext##1{\parindent 1em\noindent\hbox{\@makefnmark}##1}}% + \normalsize% + \ifCLASSOPTIONpeerreview + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \thispagestyle{IEEEpeerreviewcoverpagestyle}\@thanks% + \else + \if@twocolumn% + \ifCLASSOPTIONtechnote% + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \else + \twocolumn[{\IEEEquantizevspace{\@maketitle}[\IEEEquantizedisabletitlecmds]{0pt}[-\topskip]{\baselineskip}{\@IEEENORMtitlevspace}{\@IEEEMINtitlevspace}\@IEEEaftertitletext}]% + \fi + \else + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \fi + \thispagestyle{IEEEtitlepagestyle}\@thanks% + \fi + % pullup page for pubid if used. + \if@IEEEusingpubid + \enlargethispage{-\@IEEEpubidpullup}% + \fi + \endgroup + \setcounter{footnote}{0}\let\maketitle\relax\let\@maketitle\relax + \gdef\@thanks{}% + % v1.6b do not clear these as we will need the title again for peer review papers + % \gdef\@author{}\gdef\@title{}% + \let\thanks\relax} + + +% V1.8 parbox to format \@IEEEtitleabstractindextext +\long\def\@IEEEtitleabstractindextextbox#1{\parbox{1\textwidth}{#1}} +% V1.8 compsoc is partial width +\ifCLASSOPTIONcompsoc +% comparison with proofs suggests it's in the range of 92.1-92.3% +\long\def\@IEEEtitleabstractindextextbox#1{\parbox{0.922\textwidth}{\@IEEEcompsocnotconfonly{\rightskip\@flushglue\leftskip\z@skip}#1}} +\fi + +% formats the Title, authors names, affiliations and special paper notice +% THIS IS A CONTROLLED SPACING COMMAND! Do not allow blank lines or unintentional +% spaces to enter the definition - use % at the end of each line +\def\@maketitle{\newpage +\bgroup\par\vskip\IEEEtitletopspace\vskip\IEEEtitletopspaceextra\centering% +\ifCLASSOPTIONtechnote% technotes, V1.8a abstract and index terms are not treated differently for compsoc technotes + {\bfseries\large\@IEEEcompsoconly{\Large\sffamily}\@title\par}\vskip 1.3em{\lineskip .5em\@IEEEcompsoconly{\large\sffamily}\@author + \@IEEEspecialpapernotice\par}\relax +\else% not a technote + \vskip0.2em{\Huge\ifCLASSOPTIONtransmag\bfseries\LARGE\fi\@IEEEcompsoconly{\sffamily}\@IEEEcompsocconfonly{\normalfont\normalsize\vskip 2\@IEEEnormalsizeunitybaselineskip + \bfseries\Large}\@IEEEcompsocnotconfonly{\vskip 0.75\@IEEEnormalsizeunitybaselineskip}\@title\par}\relax + \@IEEEcompsocnotconfonly{\vskip 0.5\@IEEEnormalsizeunitybaselineskip}\vskip1.0em\par% + % V1.6 handle \author differently if in conference mode + \ifCLASSOPTIONconference% + {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par}\relax + \else% peerreviewca, peerreview or journal + \ifCLASSOPTIONpeerreviewca + % peerreviewca handles author names just like conference mode + {\@IEEEcompsoconly{\sffamily}\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par + {\@IEEEcompsoconly{\vskip 1.5em\relax + \@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\par\noindent\hfill + \IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax + \else% journal, peerreview or transmag + \ifCLASSOPTIONtransmag + % transmag also handles author names just like conference mode + % it also uses \@IEEEtitleabstractindextex, but with one line less + % space above, and one more below + {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par + {\vspace{0.5\baselineskip}\relax\@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\vspace{-1\baselineskip}\par}}\relax + \else% journal or peerreview + {\lineskip.5em\@IEEEcompsoconly{\sffamily}\sublargesize\@author\@IEEEspecialpapernotice\par + {\@IEEEcompsoconly{\vskip 1.5em\relax + \@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\par\noindent\hfill + \IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax + \fi + \fi + \fi +\fi\par\addvspace{0.5\baselineskip}\egroup} + + +% V1.7 Computer Society "diamond line" which follows index terms for nonconference papers +% V1.8a full width diamond line for single column use +\def\@IEEEcompsocdiamondlinei{\vrule depth 0pt height 0.5pt width 4cm\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\vrule depth 0pt height 0.5pt width 4cm\relax} +% V1.8a narrower width diamond line for double column use +\def\@IEEEcompsocdiamondlineii{\vrule depth 0pt height 0.5pt width 2.5cm\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\vrule depth 0pt height 0.5pt width 2.5cm\relax} +% V1.8a bare core without rules to base a last resort on for very narrow linewidths +\def\@IEEEcompsocdiamondlineiii{\mbox{}\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\mbox{}\relax} + +% V1.8a allow \IEEEcompsocdiamondline to adjust for different linewidths. +% Use \@IEEEcompsocdiamondlinei if its width is less than 0.66\linewidth (0.487 nominal for single column) +% if not, fall back to \@IEEEcompsocdiamondlineii if its width is less than 0.75\linewidth (0.659 nominal for double column) +% if all else fails, try to make a custom diamondline based on the abnormally narrow linewidth +\def\IEEEcompsocdiamondline{\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlinei}\relax +\ifdim\@IEEEtrantmpdimenA<0.66\linewidth\relax\@IEEEcompsocdiamondlinei\relax +\else +\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlineii}\relax +\ifdim\@IEEEtrantmpdimenA<0.75\linewidth\relax\@IEEEcompsocdiamondlineii\relax +\else +\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlineiii}\relax +\@IEEEtrantmpdimenB=\linewidth\relax +\addtolength{\@IEEEtrantmpdimenB}{-1\@IEEEtrantmpdimenA}\relax +\vrule depth 0pt height 0.5pt width 0.33\@IEEEtrantmpdimenB\@IEEEcompsocdiamondlineiii\vrule depth 0pt height 0.5pt width 0.33\@IEEEtrantmpdimenB\relax +\fi\fi} + + +% V1.7 standard LateX2e \thanks, but with \itshape under compsoc. Also make it a \long\def +% We also need to trigger the one-shot footnote rule +\def\@IEEEtriggeroneshotfootnoterule{\global\@IEEEenableoneshotfootnoteruletrue} + + +\long\def\thanks#1{\footnotemark + \protected@xdef\@thanks{\@thanks + \protect\footnotetext[\the\c@footnote]{\@IEEEcompsoconly{\itshape + \protect\@IEEEtriggeroneshotfootnoterule\relax}\ignorespaces#1}}} +\let\@thanks\@empty + + +% V1.7 allow \author to contain \par's. This is needed to allow \thanks to contain \par. +\long\def\author#1{\gdef\@author{#1}} + + +% in addition to setting up IEEEitemize, we need to remove a baselineskip space above and +% below it because \list's \pars introduce blank lines because of the footnote struts. +\def\@IEEEsetupcompsocitemizelist{\def\labelitemi{$\bullet$}% +\setlength{\IEEElabelindent}{0pt}\setlength{\labelsep}{1.2em}\setlength{\parskip}{0pt}% +\setlength{\partopsep}{0pt}\setlength{\topsep}{0.5\baselineskip}\vspace{-1\baselineskip}\relax} + + +% flag for fake non-compsoc \IEEEcompsocthanksitem - prevents line break on very first item +\newif\if@IEEEbreakcompsocthanksitem \@IEEEbreakcompsocthanksitemfalse + +\ifCLASSOPTIONcompsoc +% V1.7 compsoc bullet item \thanks +% also, we need to redefine this to destroy the argument in \IEEEquantizevspace +\long\def\IEEEcompsocitemizethanks#1{\relax\@IEEEbreakcompsocthanksitemfalse\footnotemark + \protected@xdef\@thanks{\@thanks + \protect\footnotetext[\the\c@footnote]{\itshape\protect\@IEEEtriggeroneshotfootnoterule + {\let\IEEEiedlistdecl\relax\protect\begin{IEEEitemize}[\protect\@IEEEsetupcompsocitemizelist]\ignorespaces#1\relax + \protect\end{IEEEitemize}}\protect\vspace{-1\baselineskip}}}} +\DeclareRobustCommand*{\IEEEcompsocthanksitem}{\item} +\else +% non-compsoc, allow for dual compilation via rerouting to normal \thanks +\long\def\IEEEcompsocitemizethanks#1{\thanks{#1}} +% redirect to "pseudo-par" \hfil\break\indent after swallowing [] from \IEEEcompsocthanksitem[] +\DeclareRobustCommand{\IEEEcompsocthanksitem}{\@ifnextchar [{\@IEEEthanksswallowoptionalarg}% +{\@IEEEthanksswallowoptionalarg[\relax]}} +% be sure and break only after first item, be sure and ignore spaces after optional argument +\def\@IEEEthanksswallowoptionalarg[#1]{\relax\if@IEEEbreakcompsocthanksitem\hfil\break +\indent\fi\@IEEEbreakcompsocthanksitemtrue\ignorespaces} +\fi + + +% V1.6b define the \IEEEpeerreviewmaketitle as needed +\ifCLASSOPTIONpeerreview +\def\IEEEpeerreviewmaketitle{\@IEEEcleardoublepage{empty}% +\ifCLASSOPTIONtwocolumn +\twocolumn[{\IEEEquantizevspace{\@IEEEpeerreviewmaketitle}[\IEEEquantizedisabletitlecmds]{0pt}[-\topskip]{\baselineskip}{\@IEEENORMtitlevspace}{\@IEEEMINtitlevspace}}] +\else +\newpage\@IEEEpeerreviewmaketitle\@IEEEstatictitlevskip +\fi +\thispagestyle{IEEEtitlepagestyle}} +\else +% \IEEEpeerreviewmaketitle does nothing if peer review option has not been selected +\def\IEEEpeerreviewmaketitle{\relax} +\fi + +% peerreview formats the repeated title like the title in journal papers. +\def\@IEEEpeerreviewmaketitle{\bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEcompsoconly{\sffamily}% +\normalfont\normalsize\vskip0.2em{\Huge\@title\par}\vskip1.0em\par +\par\addvspace{0.5\baselineskip}\egroup} + + + +% V1.6 +% this is a static rubber spacer between the title/authors and the main text +% used for single column text, or when the title appears in the first column +% of two column text (technotes). +\def\@IEEEstatictitlevskip{{\normalfont\normalsize +% adjust spacing to next text +% v1.6b handle peer review papers +\ifCLASSOPTIONpeerreview +% for peer review papers, the same value is used for both title pages +% regardless of the other paper modes + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip +\else + \ifCLASSOPTIONconference% conference + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip% + \else% + \ifCLASSOPTIONtechnote% technote + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip% + \else% journal uses more space + \vskip 2.5\baselineskip plus 0.75\baselineskip minus 0.375\baselineskip% + \fi + \fi +\fi}} + + +% set the nominal and minimum values for the quantized title spacer +% the quantization algorithm will not allow the spacer size to +% become less than \@IEEEMINtitlevspace - instead it will be lengthened +% default to journal values +\def\@IEEENORMtitlevspace{2.5\baselineskip} +\def\@IEEEMINtitlevspace{2\baselineskip} +% conferences and technotes need tighter spacing +\ifCLASSOPTIONconference% conference + \def\@IEEENORMtitlevspace{1\baselineskip} + \def\@IEEEMINtitlevspace{0.75\baselineskip} +\fi +\ifCLASSOPTIONtechnote% technote + \def\@IEEENORMtitlevspace{1\baselineskip} + \def\@IEEEMINtitlevspace{0.75\baselineskip} +\fi + + +% V1.8a +\def\IEEEquantizevspace{\begingroup\@ifstar{\@IEEEquantizevspacestarformtrue\@IEEEquantizevspace}{\@IEEEquantizevspacestarformfalse\@IEEEquantizevspace}} +% \IEEEquantizevspace[output dimen register]{object}[object decl] +% {top baselineskip} +% [offset][prevdepth][lineskip limit][lineskip] +% {unit height}{nominal vspace}{minimum vspace} +% +% Calculates and creates the vspace needed to make the combined height with +% the given object an integer multiple of the given unit height. This command +% is more general than the older \@IEEEdynamictitlevspace it replaces. +% +% The star form has no effect at present, but is reserved for future use. +% +% If the optional argument [output dimen register] is given, the calculated +% vspace height is stored in the given output dimen (or skip) register +% and no other action is taken, otherwise the object followed by a vspace* +% of the appropriate height is evaluated/output. +% +% The optional object decl (declarations) is code that is evaluated just +% before the object's height is evaluated. Its intented purpose is to allow +% for the alteration or disabling of code within the object during internal +% height evaluation (e.g., \long\def\thanks#1{\relax} ). +% This special code is not invoked if/when the object is rendered at the end. +% +% The nominal vspace is the target value of the added vspace and the minimum +% vspace is the lower allowed limit. The vspacer will be the value that achieves +% integral overall height, in terms of the given unit height, that is closest +% to the nominal vspace and that is not less than the specified minimum vspace. +% +% The line spacing algorithm of TeX is somewhat involved and requires special +% care with regard to the first line of a vertical list (which is indicated +% when \prevdepth is -1000pt or less). top baselineskip specifies the +% baselineskip or topskip used prior to the object. If the height of the +% first line of the object is greater than the given top baselineskip, then +% the top baselineskip is subtracted from the height of the first line and +% that difference is considered along with the rest of the object height +% (because the object will be shifted down by an amount = +% top line height - top baselineskip). Otherwise, the height of the first line +% of the object is ignored as far as the calculations are concerned. +% This algorithm is adequate for objects that appear at the top of a page +% (e.g., titles) where \topskip spacing is used. +% +% However, as explained on page 78 of the TeXbook, interline spacing is more +% complex when \baselineskip is being used (indicated by \prevdepth > +% -1000pt). The four optional parameters offset, prevdepth, lineskip limit and +% lineskip are assumed to be equal to be 0pt, \prevdepth, \lineskiplimit and +% \lineskip, respectively, if they are omitted. +% +% The prevdepth is the depth of the line before the object, the lineskip limit +% specifies how close the top of the object can come to the bottom of the +% previous line before \baselineskip is ignored and \lineskip is inserted +% between the object and the line above it. Lineskip does not come into +% play unless the first line of the object is high enough to "get too close" +% (as specified by lineskiplimit) to the line before it. The the prevdepth, +% lineskip limit, and lineskip optional parameters are not needed for the +% first object/line on a page (i.e., prevdepth <= -1000pt) where the simplier +% \topskip spacing rules are in effect. +% +% Offset is a manual adjustment that is added to the height calculations of +% object irrespective of the value of \prevdepth. It is useful when the top +% baselineskip will result in a noninteger unit height object placement even +% if the object itself has integral height. e.g., a footnotesize baselineskip +% is used before the object, thus an offset of, say -3pt, can be given as a +% correction. + +% Common combinations of these parameters include: +% +% top baselineskip: (and default values for offset, prevdepth, etc.) +% \topskip % for objects that appear at the top of a page +% \maxdimen % always ignore the height of the top line +% 0pt % always consider any positive height of the top line +% +% for objects to appear inline in normal text: +% top baselineskip = \baselineskip +% +% set prevdepth = -1000pt and top baselineskip = 0pt to consider the +% overall height of the object without any other external skip +% consideration + +\newif\if@IEEEquantizevspacestarform % flag to indicate star form +\newif\if@IEEEquantizevspaceuseoutdimenreg % flag to indicate output dimen register is to be used +% Use our own private registers because the object could contain a +% structure that uses the existing tmp scratch pad registers +\newdimen\@IEEEquantizeheightA +\newdimen\@IEEEquantizeheightB +\newdimen\@IEEEquantizeheightC +\newdimen\@IEEEquantizeprevdepth % need to save this early as can change +\newcount\@IEEEquantizemultiple +\newbox\@IEEEquantizeboxA + + +\def\@IEEEquantizevspace{\@ifnextchar [{\@IEEEquantizevspaceuseoutdimenregtrue\@@IEEEquantizevspace}{\@IEEEquantizevspaceuseoutdimenregfalse\@@IEEEquantizevspace[]}} + + +\long\def\@@IEEEquantizevspace[#1]#2{\relax +% acquire and store +% #1 optional output dimen register +% #2 object +\edef\@IEEEquantizeoutdimenreg{#1}\relax +% allow for object specifications that contain parameters +\@IEEEtrantmptoksA={#2}\relax +\long\edef\@IEEEquantizeobject{\the\@IEEEtrantmptoksA}\relax +\@ifnextchar [{\@@@IEEEquantizevspace}{\@@@IEEEquantizevspace[\relax]}} + +\long\def\@@@IEEEquantizevspace[#1]#2{\relax +% acquire and store +% [#1] optional object decl, is \relax if not given by user +% #2 top baselineskip +% allow for object decl specifications that have parameters +\@IEEEtrantmptoksA={#1}\relax +\long\edef\@IEEEquantizeobjectdecl{\the\@IEEEtrantmptoksA}\relax +\edef\@IEEEquantizetopbaselineskip{#2}\ivIEEEquantizevspace} + +% acquire optional argument set and store +% [offset][prevdepth][lineskip limit][lineskip] +\def\ivIEEEquantizevspace{\@ifnextchar [{\@vIEEEquantizevspace}{\@vIEEEquantizevspace[0pt]}} +\def\@vIEEEquantizevspace[#1]{\edef\@IEEEquantizeoffset{#1}\@ifnextchar [{\@viIEEEquantizevspace}{\@viIEEEquantizevspace[\prevdepth]}} +\def\@viIEEEquantizevspace[#1]{\@IEEEquantizeprevdepth=#1\relax\@ifnextchar [{\@viiIEEEquantizevspace}{\@viiIEEEquantizevspace[\lineskiplimit]}} +\def\@viiIEEEquantizevspace[#1]{\edef\@IEEEquantizelineskiplimit{#1}\@ifnextchar [{\@viiiIEEEquantizevspace}{\@viiiIEEEquantizevspace[\lineskip]}} +\def\@viiiIEEEquantizevspace[#1]{\edef\@IEEEquantizelineskip{#1}\@ixIEEEquantizevspace} + +% main routine +\def\@ixIEEEquantizevspace#1#2#3{\relax +\edef\@IEEEquantizeunitheight{#1}\relax +\edef\@IEEEquantizenomvspace{#2}\relax +\edef\@IEEEquantizeminvspace{#3}\relax +% \@IEEEquantizeoutdimenreg +% \@IEEEquantizeobject +% \@IEEEquantizeobjectdecl +% \@IEEEquantizetopbaselineskip +% \@IEEEquantizeoffset +% \@IEEEquantizeprevdepth +% \@IEEEquantizelineskiplimit +% \@IEEEquantizelineskip +% \@IEEEquantizeunitheight +% \@IEEEquantizenomvspace +% \@IEEEquantizeminvspace +% get overall height of object +\setbox\@IEEEquantizeboxA\vbox{\begingroup\@IEEEquantizeobjectdecl\@IEEEquantizeobject\relax\endgroup}\relax +\@IEEEquantizeheightA\ht\@IEEEquantizeboxA\relax +% get height of first line of object +\setbox\@IEEEquantizeboxA\vtop{\begingroup\@IEEEquantizeobjectdecl\@IEEEquantizeobject\relax\endgroup}\relax +\@IEEEquantizeheightB\ht\@IEEEquantizeboxA\relax +\ifdim\@IEEEquantizeprevdepth>-1000pt\relax % prevdepth > -1000pf means full baselineskip\lineskip rules in effect +% lineskip spacing rule takes effect if height of top line > baselineskip - prevdepth - lineskiplimit, +% otherwise the baselineskip rule is in effect and the height of the first line does not matter at all. +\@IEEEquantizeheightC=\@IEEEquantizetopbaselineskip\relax +\advance\@IEEEquantizeheightC-\@IEEEquantizeprevdepth\relax +\advance\@IEEEquantizeheightC-\@IEEEquantizelineskiplimit\relax % this works even though \@IEEEquantizelineskiplimit is a macro because TeX allows --10pt notation +\ifdim\@IEEEquantizeheightB>\@IEEEquantizeheightC\relax +% lineskip spacing rule is in effect i.e., the object is going to be shifted down relative to the +% baselineskip set position by its top line height (already a part of the total height) + prevdepth + lineskip - baselineskip +\advance\@IEEEquantizeheightA\@IEEEquantizeprevdepth\relax +\advance\@IEEEquantizeheightA\@IEEEquantizelineskip\relax +\advance\@IEEEquantizeheightA-\@IEEEquantizetopbaselineskip\relax +\else +% height of first line <= \@IEEEquantizetopbaselineskip - \@IEEEquantizeprevdepth - \@IEEEquantizelineskiplimit +% standard baselineskip rules are in effect, so don't consider height of first line +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightB\relax +\fi +% +\else % prevdepth <= -1000pt, simplier \topskip type rules in effect +\ifdim\@IEEEquantizeheightB>\@IEEEquantizetopbaselineskip +% height of top line (already included in the total height) in excess of +% baselineskip is the amount it will be downshifted +\advance\@IEEEquantizeheightA-\@IEEEquantizetopbaselineskip\relax +\else +% height of first line is irrelevant, remove it +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightB\relax +\fi +\fi % prevdepth <= -1000pt +% +% adjust height for any manual offset +\advance\@IEEEquantizeheightA\@IEEEquantizeoffset\relax +% add in nominal spacer +\advance\@IEEEquantizeheightA\@IEEEquantizenomvspace\relax +% check for nonzero unitheight +\@IEEEquantizeheightB=\@IEEEquantizeunitheight\relax +\ifnum\@IEEEquantizeheightB=0\relax +\@IEEEclspkgerror{IEEEquantizevspace unit height cannot be zero. Assuming 10pt.}% +{Division by zero is not allowed.} +\@IEEEquantizeheightB=10pt\relax +\fi +% get integer number of lines +\@IEEEquantizemultiple=\@IEEEquantizeheightA\relax +\divide\@IEEEquantizemultiple\@IEEEquantizeheightB\relax +% set A to contain the excess height over the \@IEEEquantizemultiple of lines +% A = height - multiple*unitheight +\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\multiply\@IEEEquantizeheightC\@IEEEquantizemultiple\relax +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightC\relax +% set B to contain the height short of \@IEEEquantizemultiple+1 of lines +% B = unitheight - A +\advance\@IEEEquantizeheightB-\@IEEEquantizeheightA\relax +% choose A or B based on which is closer +\@IEEEquantizeheightC\@IEEEquantizenomvspace\relax +\ifdim\@IEEEquantizeheightA<\@IEEEquantizeheightB\relax +% C = nomvspace - A, go with lower +\advance\@IEEEquantizeheightC-\@IEEEquantizeheightA\relax +\else +% C = nomvspace + B, go with upper +\advance\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\fi +% if violate lower bound, use next integer bound +\ifdim\@IEEEquantizeheightC<\@IEEEquantizeminvspace\relax +% A + B = unitheight +\advance\@IEEEquantizeheightC\@IEEEquantizeheightA\relax +\advance\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\fi +% export object and spacer outside of group +\global\let\@IEEEquantizeobjectout\@IEEEquantizeobject\relax +\global\@IEEEquantizeheightC\@IEEEquantizeheightC\relax +\endgroup +\if@IEEEquantizevspaceuseoutdimenreg +\@IEEEquantizeoutdimenreg=\@IEEEquantizeheightC\relax +\else +\@IEEEquantizeobjectout\relax +\vskip\@IEEEquantizeheightC\relax +\fi} + + +% user command to disable all global assignments, possible use within object decl +\def\IEEEquantizedisableglobal{\let\global\relax +\let\gdef\def +\let\xdef\edef} +% user command to allow for the disabling of \thanks and other commands, possible use within object decl +\def\IEEEquantizedisabletitlecmds{\long\def\thanks##1{\relax}\relax +\long\def\IEEEcompsocitemizethanks##1{\relax}\def\newpage{\relax}} + + + + + +% V1.6 +% we allow the user access to the last part of the title area +% useful in emergencies such as when a different spacing is needed +% This text is NOT compensated for in the dynamic sizer. +\let\@IEEEaftertitletext=\relax +\long\def\IEEEaftertitletext#1{\def\@IEEEaftertitletext{#1}} + + +% V1.7 provide a way for users to enter abstract and keywords +% into the onecolumn title are. This text is compensated for +% in the dynamic sizer. +\let\@IEEEtitleabstractindextext=\relax +\long\def\IEEEtitleabstractindextext#1{\def\@IEEEtitleabstractindextext{#1}} + +% V1.7 provide a way for users to get the \@IEEEtitleabstractindextext if +% not in compsoc or transmag journal mode - this way abstract and keywords +% can still be placed in their conventional position if not in those modes. +\def\IEEEdisplaynontitleabstractindextext{% +% display for all conference formats +\ifCLASSOPTIONconference\@IEEEtitleabstractindextext\relax +\else% non-conferences + % V1.8a display for all technotes + \ifCLASSOPTIONtechnote\@IEEEtitleabstractindextext\relax + % V1.8a add diamond line after abstract and index terms for compsoc technotes + \@IEEEcompsoconly{\noindent\hfill\IEEEcompsocdiamondline\hfill\hbox{}\par}\relax + \else % non-conferences and non-technotes + \ifCLASSOPTIONcompsoc% display if not compsoc and not transmag + \else + \ifCLASSOPTIONtransmag + \else% not compsoc journal nor transmag journal + \@IEEEtitleabstractindextext\relax + \fi + \fi + \fi +\fi} + + +% command to allow alteration of baselinestretch, but only if the current +% baselineskip is unity. Used to tweak the compsoc abstract and keywords line spacing. +\def\@IEEEtweakunitybaselinestretch#1{{\def\baselinestretch{1}\selectfont +\global\@tempskipa\baselineskip}\ifnum\@tempskipa=\baselineskip% +\def\baselinestretch{#1}\selectfont\fi\relax} + + +% abstract and keywords are in \small, except +% for 9pt docs in which they are in \footnotesize +% Because 9pt docs use an 8pt footnotesize, \small +% becomes a rather awkward 8.5pt +\def\@IEEEabskeysecsize{\small} +\ifx\CLASSOPTIONpt\@IEEEptsizenine + \def\@IEEEabskeysecsize{\footnotesize} +\fi + +% compsoc journals use \footnotesize, compsoc conferences use normalsize +\@IEEEcompsoconly{\def\@IEEEabskeysecsize{\footnotesize}} +\@IEEEcompsocconfonly{\def\@IEEEabskeysecsize{\small}} + + +% V1.6 have abstract and keywords strip leading spaces, pars and newlines +% so that spacing is more tightly controlled. +\def\abstract{\normalfont + \if@twocolumn + \@IEEEabskeysecsize\bfseries\textit{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +% V1.6 The IEEE wants only 1 pica from end of abstract to introduction heading when in +% conference mode (the heading already has this much above it) +\def\endabstract{\relax\ifCLASSOPTIONconference\vspace{0ex}\else\vspace{1.34ex}\fi\par\if@twocolumn\else\endquotation\fi + \normalfont\normalsize} + +\def\IEEEkeywords{\normalfont + \if@twocolumn + \@IEEEabskeysecsize\bfseries\textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +\def\endIEEEkeywords{\relax\ifCLASSOPTIONtechnote\vspace{1.34ex}\else\vspace{0.67ex}\fi + \par\if@twocolumn\else\endquotation\fi% + \normalfont\normalsize} + +% V1.7 compsoc keywords index terms +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONconference% compsoc conference +\def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\bfseries + \if@twocolumn + \@IEEEabskeysecsize\noindent\textit{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} +\def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\bfseries + \if@twocolumn + \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent + \textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} + \else% compsoc not conference +\def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily + \if@twocolumn + \@IEEEabskeysecsize\noindent\textbf{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} +\def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily + \if@twocolumn + \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent + \textbf{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} + \fi +\fi + +% V1.8 transmag keywords index terms +% no abstract name, use indentation +\ifCLASSOPTIONtransmag +\def\abstract{\normalfont\parindent 1em\relax + \if@twocolumn + \@IEEEabskeysecsize\bfseries\indent + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize + \textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} + +\def\IEEEkeywords{\normalfont\parindent 1em\relax + \if@twocolumn + \@IEEEabskeysecsize\vspace{1\baselineskip}\bfseries\indent\textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\vspace{1\baselineskip}\centering\@IEEEabskeysecsize + \textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +\fi + + + +% gobbles all leading \, \\ and \par, upon finding first token that +% is not a \ , \\ or a \par, it ceases and returns that token +% +% used to strip leading \, \\ and \par from the input +% so that such things in the beginning of an environment will not +% affect the formatting of the text +\long\def\@IEEEgobbleleadPARNLSP#1{\let\@IEEEswallowthistoken=0% +\let\@IEEEgobbleleadPARNLSPtoken#1% +\let\@IEEEgobbleleadPARtoken=\par% +\let\@IEEEgobbleleadNLtoken=\\% +\let\@IEEEgobbleleadSPtoken=\ % +\def\@IEEEgobbleleadSPMACRO{\ }% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadPARtoken% +\let\@IEEEswallowthistoken=1% +\fi% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadNLtoken% +\let\@IEEEswallowthistoken=1% +\fi% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPtoken% +\let\@IEEEswallowthistoken=1% +\fi% +% a control space will come in as a macro +% when it is the last one on a line +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPMACRO% +\let\@IEEEswallowthistoken=1% +\fi% +% if we have to swallow this token, do so and taste the next one +% else spit it out and stop gobbling +\ifx\@IEEEswallowthistoken 1\let\@IEEEnextgobbleleadPARNLSP=\@IEEEgobbleleadPARNLSP\else% +\let\@IEEEnextgobbleleadPARNLSP=#1\fi% +\@IEEEnextgobbleleadPARNLSP}% + + + + +% TITLING OF SECTIONS +\def\@IEEEsectpunct{:\ \,} % Punctuation after run-in section heading (headings which are + % part of the paragraphs), need little bit more than a single space + % spacing from section number to title +% compsoc conferences use regular period/space punctuation +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference +\def\@IEEEsectpunct{.\ } +\fi\fi + + +\def\@seccntformat#1{\csname the#1dis\endcsname\hskip 0.5em\relax} + +\ifCLASSOPTIONcompsoc +% compsoc journals need extra spacing +\ifCLASSOPTIONconference\else +\def\@seccntformat#1{\csname the#1dis\endcsname\hskip 1em\relax} +\fi\fi + +%v1.7 put {} after #6 to allow for some types of user font control +%and use \@@par rather than \par +\def\@sect#1#2#3#4#5#6[#7]#8{% + \ifnum #2>\c@secnumdepth + \let\@svsec\@empty + \else + \refstepcounter{#1}% + % load section label and spacer into \@svsec + \protected@edef\@svsec{\@seccntformat{#1}\relax}% + \fi% + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@% tempskipa determines whether is treated as a high + \begingroup #6{\relax% or low level heading + \noindent % subsections are NOT indented + % print top level headings. \@svsec is label, #8 is heading title + % The IEEE does not block indent the section title text, it flows like normal + {\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\@@par}}% + \endgroup + \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else + \protect\numberline{\csname the#1\endcsname}\fi#7}% + \else % printout low level headings + % svsechd seems to swallow the trailing space, protect it with \mbox{} + % got rid of sectionmark stuff + \def\@svsechd{#6{\hskip #3\relax\@svsec #8\@IEEEsectpunct\mbox{}}% + \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else + \protect\numberline{\csname the#1\endcsname}\fi#7}}% + \fi%skip down + \@xsect{#5}} + + +% section* handler +%v1.7 put {} after #4 to allow for some types of user font control +%and use \@@par rather than \par +\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax + \ifdim \@tempskipa>\z@ + %\begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup + % The IEEE does not block indent the section title text, it flows like normal + \begingroup \noindent #4{\relax{\hskip #1}{\interlinepenalty \@M #5\@@par}}\endgroup + % svsechd swallows the trailing space, protect it with \mbox{} + \else \def\@svsechd{#4{\hskip #1\relax #5\@IEEEsectpunct\mbox{}}}\fi + \@xsect{#3}} + + +%% SECTION heading spacing and font +%% +% arguments are: #1 - sectiontype name +% (for \@sect) #2 - section level +% #3 - section heading indent +% #4 - top separation (absolute value used, neg indicates not to indent main text) +% If negative, make stretch parts negative too! +% #5 - (absolute value used) positive: bottom separation after heading, +% negative: amount to indent main text after heading +% Both #4 and #5 negative means to indent main text and use negative top separation +% #6 - font control +% You've got to have \normalfont\normalsize in the font specs below to prevent +% trouble when you do something like: +% \section{Note}{\ttfamily TT-TEXT} is known to ... +% The IEEE sometimes REALLY stretches the area before a section +% heading by up to about 0.5in. However, it may not be a good +% idea to let LaTeX have quite this much rubber. +\ifCLASSOPTIONconference% +% The IEEE wants section heading spacing to decrease for conference mode +\def\section{\@startsection{section}{1}{\z@}{1.5ex plus 1.5ex minus 0.5ex}% +{0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{1.5ex plus 1.5ex minus 0.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\else % for journals +\def\section{\@startsection{section}{1}{\z@}{3.0ex plus 1.5ex minus 1.5ex}% V1.6 3.0ex from 3.5ex +{0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{3.5ex plus 1.5ex minus 1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\fi + +% for both journals and conferences +% decided to put in a little rubber above the section, might help somebody +\def\subsubsection{\@startsection{subsubsection}{3}{\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize\itshape}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize\itshape}}% + + +% compsoc +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference +% compsoc conference +\def\section{\@startsection{section}{1}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\large\bfseries}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\sublargesize\bfseries}}% +\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{0ex}{\normalfont\normalsize\bfseries}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize}}% +\else% compsoc journals +% use negative top separation as compsoc journals do not indent paragraphs after section titles +\def\section{\@startsection{section}{1}{\z@}{-3.5ex plus -2ex minus -1.5ex}% +{0.7ex plus 1ex minus 0ex}{\normalfont\sublargesize\sffamily\bfseries\scshape}}% +% Note that subsection and smaller may not be correct for the Computer Society, +% I have to look up an example. +\def\subsection{\@startsection{subsection}{2}{\z@}{-3.5ex plus -1.5ex minus -1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\sffamily\bfseries}}% +\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex plus -1ex minus -1ex}% +{0.5ex plus 0.5ex minus 0ex}{\normalfont\normalsize\sffamily\itshape}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{-0ex plus -0.1ex minus -0.1ex}% +{0ex}{\normalfont\normalsize}}% +\fi\fi + +% transmag +\ifCLASSOPTIONtransmag +\def\subsection{\@startsection{subsection}{2}{0.75\parindent}{3.5ex plus 1.5ex minus 1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\def\subsubsection{\@startsection{subsubsection}{3}{1.25\parindent}{0.1ex plus 0.1ex minus 0.1ex}% +{0.1ex}{\normalfont\normalsize\itshape}}% +\fi + + +% V1.8a provide for a raised line Introduction section for use with Computer +% Society papers. We have to remove any spacing glue after the section +% heading and then remove the blank line for the new paragraph after it. +% LaTeX's section handler alters \everypar and we need to propogate those +% changes outside of the \parbox lest there be spacing problems at the top +% of the next section. +\def\IEEEraisesectionheading#1{\noindent\raisebox{1.5\baselineskip}[0pt][0pt]{\parbox[b]{\columnwidth}{#1\unskip\global\everypar=\everypar}}\vspace{-1\baselineskip}\vspace{-\parskip}\par} + + + +%% ENVIRONMENTS +% "box" symbols at end of proofs +\def\IEEEQEDclosed{\mbox{\rule[0pt]{1.3ex}{1.3ex}}} % for a filled box +% V1.6 some journals use an open box instead that will just fit around a closed one +\def\IEEEQEDopen{{\setlength{\fboxsep}{0pt}\setlength{\fboxrule}{0.2pt}\fbox{\rule[0pt]{0pt}{1.3ex}\rule[0pt]{1.3ex}{0pt}}}} +\ifCLASSOPTIONcompsoc +\def\IEEEQED{\IEEEQEDopen} % default to open for compsoc +\else +\def\IEEEQED{\IEEEQEDclosed} % otherwise default to closed +\fi + +%V1.8 flag to indicate if QED symbol is to be shown +\newif\if@IEEEQEDshow \@IEEEQEDshowtrue +\def\IEEEproofindentspace{2\parindent}% V1.8 allow user to change indentation amount if desired +% v1.7 name change to avoid namespace collision with amsthm. Also add support +% for an optional argument. +\def\IEEEproof{\@ifnextchar[{\@IEEEproof}{\@IEEEproof[\IEEEproofname]}} +\def\@IEEEproof[#1]{\@IEEEQEDshowtrue\par\noindent\hspace{\IEEEproofindentspace}{\itshape #1: }} +\def\endIEEEproof{\if@IEEEQEDshow\hspace*{\fill}\nobreakspace\IEEEQED\fi\par} +% qedhere for equation environments, similar to AMS \qedhere +\def\IEEEQEDhereeqn{\global\@IEEEQEDshowfalse\eqno\let\eqno\relax\let\leqno\relax + \let\veqno\relax\hbox{\IEEEQED}} +% IEEE style qedhere for IEEEeqnarray and other environments +\def\IEEEQEDhere{\global\@IEEEQEDshowfalse\IEEEQED} +% command to disable QED at end of IEEEproof +\def\IEEEQEDoff{\global\@IEEEQEDshowfalse} + + +%\itemindent is set to \z@ by list, so define new temporary variable +\newdimen\@IEEEtmpitemindent + +\ifCLASSOPTIONcompsoc +% V1.8a compsoc uses bold theorem titles, a period instead of a colon, vertical spacing, and hanging indentation +% V1.8 allow long theorem names to break across lines. +% Thanks to Miquel Payaro for reporting this. +\def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\relax + \topsep 0.2\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip + \rmfamily\trivlist\hangindent\parindent% + \item[]\textit{\bfseries\noindent #1\ #2.} \itemindent\@IEEEtmpitemindent\relax} +\def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\relax +\topsep 0.2\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip +\rmfamily\trivlist\hangindent\parindent% +% V1.6 The IEEE is back to using () around theorem names which are also in italics +% Thanks to Christian Peel for reporting this. + \item[]\textit{\bfseries\noindent #1\ #2\ (#3).} \itemindent\@IEEEtmpitemindent\relax} +% V1.7 remove bogus \unskip that caused equations in theorems to collide with +% lines below. +\def\@endtheorem{\endtrivlist\vskip 0.25\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip} +\else +% +% noncompsoc +% +% V1.8 allow long theorem names to break across lines. +% Thanks to Miquel Payaro for reporting this. +\def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\relax\topsep 0pt\rmfamily\trivlist% + \item[]\textit{\indent #1\ #2:} \itemindent\@IEEEtmpitemindent\relax} +\def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\relax\topsep 0pt\rmfamily \trivlist% +% V1.6 The IEEE is back to using () around theorem names which are also in italics +% Thanks to Christian Peel for reporting this. + \item[]\textit{\indent #1\ #2\ (#3):} \itemindent\@IEEEtmpitemindent\relax} +% V1.7 remove bogus \unskip that caused equations in theorems to collide with +% lines below. +\def\@endtheorem{\endtrivlist} +\fi + + + +% V1.6 +% display command for the section the theorem is in - so that \thesection +% is not used as this will be in Roman numerals when we want arabic. +% LaTeX2e uses \def\@thmcounter#1{\noexpand\arabic{#1}} for the theorem number +% (second part) display and \def\@thmcountersep{.} as a separator. +% V1.7 intercept calls to the section counter and reroute to \@IEEEthmcounterinsection +% to allow \appendix(ices} to override as needed. +% +% special handler for sections, allows appendix(ices) to override +\gdef\@IEEEthmcounterinsection#1{\arabic{#1}} +% string macro +\edef\@IEEEstringsection{section} + +% redefine the #1#2[#3] form of newtheorem to use a hook to \@IEEEthmcounterinsection +% if section in_counter is used +\def\@xnthm#1#2[#3]{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@newctr{#1}[#3]% + \edef\@IEEEstringtmp{#3} + \ifx\@IEEEstringtmp\@IEEEstringsection + \expandafter\xdef\csname the#1\endcsname{% + \noexpand\@IEEEthmcounterinsection{#3}\@thmcountersep + \@thmcounter{#1}}% + \else + \expandafter\xdef\csname the#1\endcsname{% + \expandafter\noexpand\csname the#3\endcsname \@thmcountersep + \@thmcounter{#1}}% + \fi + \global\@namedef{#1}{\@thm{#1}{#2}}% + \global\@namedef{end#1}{\@endtheorem}}} + + + +%% SET UP THE DEFAULT PAGESTYLE +\pagestyle{headings} +\pagenumbering{arabic} + +% normally the page counter starts at 1 +\setcounter{page}{1} +% however, for peerreview the cover sheet is page 0 or page -1 +% (for duplex printing) +\ifCLASSOPTIONpeerreview + \if@twoside + \setcounter{page}{-1} + \else + \setcounter{page}{0} + \fi +\fi + +% standard book class behavior - let bottom line float up and down as +% needed when single sided +\ifCLASSOPTIONtwoside\else\raggedbottom\fi +% if two column - turn on twocolumn, allow word spacings to stretch more and +% enforce a rigid position for the last lines +\ifCLASSOPTIONtwocolumn +% the peer review option delays invoking twocolumn + \ifCLASSOPTIONpeerreview\else + \twocolumn + \fi +\sloppy +\flushbottom +\fi + + + + +% \APPENDIX and \APPENDICES definitions + +% This is the \@ifmtarg command from the LaTeX ifmtarg package +% by Peter Wilson (CUA) and Donald Arseneau +% \@ifmtarg is used to determine if an argument to a command +% is present or not. +% For instance: +% \@ifmtarg{#1}{\typeout{empty}}{\typeout{has something}} +% \@ifmtarg is used with our redefined \section command if +% \appendices is invoked. +% The command \section will behave slightly differently depending +% on whether the user specifies a title: +% \section{My appendix title} +% or not: +% \section{} +% This way, we can eliminate the blank lines where the title +% would be, and the unneeded : after Appendix in the table of +% contents +\begingroup +\catcode`\Q=3 +\long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil} +\long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4} +\endgroup +% end of \@ifmtarg defs + + +% V1.7 +% command that allows the one time saving of the original definition +% of section to \@IEEEappendixsavesection for \appendix or \appendices +% we don't save \section here as it may be redefined later by other +% packages (hyperref.sty, etc.) +\def\@IEEEsaveoriginalsectiononce{\let\@IEEEappendixsavesection\section +\let\@IEEEsaveoriginalsectiononce\relax} + +% neat trick to grab and process the argument from \section{argument} +% we process differently if the user invoked \section{} with no +% argument (title) +% note we reroute the call to the old \section* +\def\@IEEEprocessthesectionargument#1{% +\@ifmtarg{#1}{% +\@IEEEappendixsavesection*{\appendixname\nobreakspace\thesectiondis}% +\addcontentsline{toc}{section}{\appendixname\nobreakspace\thesection}}{% +\@IEEEappendixsavesection*{\appendixname\nobreakspace\thesectiondis\\* #1}% +\addcontentsline{toc}{section}{\appendixname\nobreakspace\thesection: #1}}} + +% we use this if the user calls \section{} after +% \appendix-- which has no meaning. So, we ignore the +% command and its argument. Then, warn the user. +\def\@IEEEdestroythesectionargument#1{\typeout{** WARNING: Ignoring useless +\protect\section\space in Appendix (line \the\inputlineno).}} + + +% remember \thesection forms will be displayed in \ref calls +% and in the Table of Contents. +% The \sectiondis form is used in the actual heading itself + +% appendix command for one single appendix +% normally has no heading. However, if you want a +% heading, you can do so via the optional argument: +% \appendix[Optional Heading] +\def\appendix{\relax} +\renewcommand{\appendix}[1][]{\@IEEEsaveoriginalsectiononce\par + % v1.6 keep hyperref's identifiers unique + \gdef\theHsection{Appendix.A}% + % v1.6 adjust hyperref's string name for the section + \xdef\Hy@chapapp{appendix}% + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{subsubsection}{0}% + \setcounter{paragraph}{0}% + \gdef\thesection{A}% + \gdef\thesectiondis{}% + \gdef\thesubsection{\Alph{subsection}}% + \gdef\@IEEEthmcounterinsection##1{A} + \refstepcounter{section}% update the \ref counter + \@ifmtarg{#1}{\@IEEEappendixsavesection*{\appendixname}% + \addcontentsline{toc}{section}{\appendixname}}{% + \@IEEEappendixsavesection*{\appendixname\nobreakspace\\* #1}% + \addcontentsline{toc}{section}{\appendixname: #1}}% + % redefine \section command for appendix + % leave \section* as is + \def\section{\@ifstar{\@IEEEappendixsavesection*}{% + \@IEEEdestroythesectionargument}}% throw out the argument + % of the normal form +} + + + +% appendices command for multiple appendices +% user then calls \section with an argument (possibly empty) to +% declare the individual appendices +\def\appendices{\@IEEEsaveoriginalsectiononce\par + % v1.6 keep hyperref's identifiers unique + \gdef\theHsection{Appendix.\Alph{section}}% + % v1.6 adjust hyperref's string name for the section + \xdef\Hy@chapapp{appendix}% + \setcounter{section}{-1}% we want \refstepcounter to use section 0 + \setcounter{subsection}{0}% + \setcounter{subsubsection}{0}% + \setcounter{paragraph}{0}% + \ifCLASSOPTIONromanappendices% + \gdef\thesection{\Roman{section}}% + \gdef\thesectiondis{\Roman{section}}% + \@IEEEcompsocconfonly{\gdef\thesectiondis{\Roman{section}.}}% + \gdef\@IEEEthmcounterinsection##1{A\arabic{##1}} + \else% + \gdef\thesection{\Alph{section}}% + \gdef\thesectiondis{\Alph{section}}% + \@IEEEcompsocconfonly{\gdef\thesectiondis{\Alph{section}.}}% + \gdef\@IEEEthmcounterinsection##1{\Alph{##1}} + \fi% + \refstepcounter{section}% update the \ref counter + \setcounter{section}{0}% NEXT \section will be the FIRST appendix + % redefine \section command for appendices + % leave \section* as is + \def\section{\@ifstar{\@IEEEappendixsavesection*}{% process the *-form + \refstepcounter{section}% or is a new section so, + \@IEEEprocessthesectionargument}}% process the argument + % of the normal form +} + + + +% V1.7 compoc uses nonbold drop cap and small caps word style +\ifCLASSOPTIONcompsoc + \def\IEEEPARstartFONTSTYLE{\mdseries} + \def\IEEEPARstartWORDFONTSTYLE{\scshape} + \def\IEEEPARstartWORDCAPSTYLE{\relax} +\fi +% +% +% \IEEEPARstart +% Definition for the big two line drop cap letter at the beginning of the +% first paragraph of journal papers. The first argument is the first letter +% of the first word, the second argument is the remaining letters of the +% first word which will be rendered in upper case. +% In V1.6 this has been completely rewritten to: +% +% 1. no longer have problems when the user begins an environment +% within the paragraph that uses \IEEEPARstart. +% 2. auto-detect and use the current font family +% 3. revise handling of the space at the end of the first word so that +% interword glue will now work as normal. +% 4. produce correctly aligned edges for the (two) indented lines. +% +% We generalize things via control macros - playing with these is fun too. +% +% V1.7 added more control macros to make it easy for IEEEtrantools.sty users +% to change the font style. +% +% the number of lines that are indented to clear it +% may need to increase if using decenders +\providecommand{\IEEEPARstartDROPLINES}{2} +% minimum number of lines left on a page to allow a \@IEEEPARstart +% Does not take into consideration rubber shrink, so it tends to +% be overly cautious +\providecommand{\IEEEPARstartMINPAGELINES}{2} +% V1.7 the height of the drop cap is adjusted to match the height of this text +% in the current font (when \IEEEPARstart is called). +\providecommand{\IEEEPARstartHEIGHTTEXT}{T} +% the depth the letter is lowered below the baseline +% the height (and size) of the letter is determined by the sum +% of this value and the height of the \IEEEPARstartHEIGHTTEXT in the current +% font. It is a good idea to set this value in terms of the baselineskip +% so that it can respond to changes therein. +\providecommand{\IEEEPARstartDROPDEPTH}{1.1\baselineskip} +% V1.7 the font the drop cap will be rendered in, +% can take zero or one argument. +\providecommand{\IEEEPARstartFONTSTYLE}{\bfseries} +% V1.7 any additional, non-font related commands needed to modify +% the drop cap letter, can take zero or one argument. +\providecommand{\IEEEPARstartCAPSTYLE}{\MakeUppercase} +% V1.7 the font that will be used to render the rest of the word, +% can take zero or one argument. +\providecommand{\IEEEPARstartWORDFONTSTYLE}{\relax} +% V1.7 any additional, non-font related commands needed to modify +% the rest of the word, can take zero or one argument. +\providecommand{\IEEEPARstartWORDCAPSTYLE}{\MakeUppercase} +% This is the horizontal separation distance from the drop letter to the main text. +% Lengths that depend on the font (e.g., ex, em, etc.) will be referenced +% to the font that is active when \IEEEPARstart is called. +\providecommand{\IEEEPARstartSEP}{0.15em} +% V1.7 horizontal offset applied to the left of the drop cap. +\providecommand{\IEEEPARstartHOFFSET}{0em} +% V1.7 Italic correction command applied at the end of the drop cap. +\providecommand{\IEEEPARstartITLCORRECT}{\/} + +% width of the letter output, set globally. Can be used in \IEEEPARstartSEP +% or \IEEEPARstartHOFFSET, but not the height lengths. +\newdimen\IEEEPARstartletwidth +\IEEEPARstartletwidth 0pt\relax + +% definition of \IEEEPARstart +% THIS IS A CONTROLLED SPACING AREA, DO NOT ALLOW SPACES WITHIN THESE LINES +% +% The token \@IEEEPARstartfont will be globally defined after the first use +% of \IEEEPARstart and will be a font command which creates the big letter +% The first argument is the first letter of the first word and the second +% argument is the rest of the first word(s). +\def\IEEEPARstart#1#2{\par{% +% if this page does not have enough space, break it and lets start +% on a new one +\@IEEEtranneedspace{\IEEEPARstartMINPAGELINES\baselineskip}{\relax}% +% V1.7 move this up here in case user uses \textbf for \IEEEPARstartFONTSTYLE +% which uses command \leavevmode which causes an unwanted \indent to be issued +\noindent +% calculate the desired height of the big letter +% it extends from the top of \IEEEPARstartHEIGHTTEXT in the current font +% down to \IEEEPARstartDROPDEPTH below the current baseline +\settoheight{\@IEEEtrantmpdimenA}{\IEEEPARstartHEIGHTTEXT}% +\addtolength{\@IEEEtrantmpdimenA}{\IEEEPARstartDROPDEPTH}% +% extract the name of the current font in bold +% and place it in \@IEEEPARstartFONTNAME +\def\@IEEEPARstartGETFIRSTWORD##1 ##2\relax{##1}% +{\IEEEPARstartFONTSTYLE{\selectfont\edef\@IEEEPARstartFONTNAMESPACE{\fontname\font\space}% +\xdef\@IEEEPARstartFONTNAME{\expandafter\@IEEEPARstartGETFIRSTWORD\@IEEEPARstartFONTNAMESPACE\relax}}}% +% define a font based on this name with a point size equal to the desired +% height of the drop letter +\font\@IEEEPARstartsubfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenA\relax% +% save this value as a counter (integer) value (sp points) +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenA% +% now get the height of the actual letter produced by this font size +\settoheight{\@IEEEtrantmpdimenB}{\@IEEEPARstartsubfont\IEEEPARstartCAPSTYLE{#1}}% +% If something bogus happens like the first argument is empty or the +% current font is strange, do not allow a zero height. +\ifdim\@IEEEtrantmpdimenB=0pt\relax% +\typeout{** WARNING: IEEEPARstart drop letter has zero height! (line \the\inputlineno)}% +\typeout{ Forcing the drop letter font size to 10pt.}% +\@IEEEtrantmpdimenB=10pt% +\fi% +% and store it as a counter +\@IEEEtrantmpcountB=\@IEEEtrantmpdimenB% +% Since a font size doesn't exactly correspond to the height of the capital +% letters in that font, the actual height of the letter, \@IEEEtrantmpcountB, +% will be less than that desired, \@IEEEtrantmpcountA +% we need to raise the font size, \@IEEEtrantmpdimenA +% by \@IEEEtrantmpcountA / \@IEEEtrantmpcountB +% But, TeX doesn't have floating point division, so we have to use integer +% division. Hence the use of the counters. +% We need to reduce the denominator so that the loss of the remainder will +% have minimal affect on the accuracy of the result +\divide\@IEEEtrantmpcountB by 200% +\divide\@IEEEtrantmpcountA by \@IEEEtrantmpcountB% +% Then reequalize things when we use TeX's ability to multiply by +% floating point values +\@IEEEtrantmpdimenB=0.005\@IEEEtrantmpdimenA% +\multiply\@IEEEtrantmpdimenB by \@IEEEtrantmpcountA% +% \@IEEEPARstartfont is globaly set to the calculated font of the big letter +% We need to carry this out of the local calculation area to to create the +% big letter. +\global\font\@IEEEPARstartfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenB% +% Now set \@IEEEtrantmpdimenA to the width of the big letter +% We need to carry this out of the local calculation area to set the +% hanging indent +\settowidth{\global\@IEEEtrantmpdimenA}{\@IEEEPARstartfont +\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}}}% +% end of the isolated calculation environment +\global\IEEEPARstartletwidth\@IEEEtrantmpdimenA\relax% +% add in the extra clearance we want +\advance\@IEEEtrantmpdimenA by \IEEEPARstartSEP\relax% +% add in the optional offset +\advance\@IEEEtrantmpdimenA by \IEEEPARstartHOFFSET\relax% +% V1.7 don't allow negative offsets to produce negative hanging indents +\@IEEEtrantmpdimenB\@IEEEtrantmpdimenA +\ifnum\@IEEEtrantmpdimenB < 0 \@IEEEtrantmpdimenB 0pt\fi +% \@IEEEtrantmpdimenA has the width of the big letter plus the +% separation space and \@IEEEPARstartfont is the font we need to use +% Now, we make the letter and issue the hanging indent command +% The letter is placed in a box of zero width and height so that other +% text won't be displaced by it. +\hangindent\@IEEEtrantmpdimenB\hangafter=-\IEEEPARstartDROPLINES% +\makebox[0pt][l]{\hspace{-\@IEEEtrantmpdimenA}% +\raisebox{-\IEEEPARstartDROPDEPTH}[0pt][0pt]{\hspace{\IEEEPARstartHOFFSET}% +\@IEEEPARstartfont\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}% +\hspace{\IEEEPARstartSEP}}}% +{\IEEEPARstartWORDFONTSTYLE{\IEEEPARstartWORDCAPSTYLE{\selectfont#2}}}} + + + + +% determines if the space remaining on a given page is equal to or greater +% than the specified space of argument one +% if not, execute argument two (only if the remaining space is greater than zero) +% and issue a \newpage +% +% example: \@IEEEtranneedspace{2in}{\vfill} +% +% Does not take into consideration rubber shrinkage, so it tends to +% be overly cautious +% Based on an example posted by Donald Arseneau +% Note this macro uses \@IEEEtrantmpdimenB internally for calculations, +% so DO NOT PASS \@IEEEtrantmpdimenB to this routine +% if you need a dimen register, import with \@IEEEtrantmpdimenA instead +\def\@IEEEtranneedspace#1#2{\penalty-100\begingroup%shield temp variable +\@IEEEtrantmpdimenB\pagegoal\advance\@IEEEtrantmpdimenB-\pagetotal% space left +\ifdim #1>\@IEEEtrantmpdimenB\relax% not enough space left +\ifdim\@IEEEtrantmpdimenB>\z@\relax #2\fi% +\newpage% +\fi\endgroup} + + + +% IEEEbiography ENVIRONMENT +% Allows user to enter biography leaving place for picture (adapts to font size) +% As of V1.5, a new optional argument allows you to have a real graphic! +% V1.5 and later also fixes the "colliding biographies" which could happen when a +% biography's text was shorter than the space for the photo. +% MDS 7/2001 +% V1.6 prevent multiple biographies from making multiple TOC entries +\newif\if@IEEEbiographyTOCentrynotmade +\global\@IEEEbiographyTOCentrynotmadetrue + +% biography counter so hyperref can jump directly to the biographies +% and not just the previous section +\newcounter{IEEEbiography} +\setcounter{IEEEbiography}{0} + +% photo area size +\def\@IEEEBIOphotowidth{1.0in} % width of the biography photo area +\def\@IEEEBIOphotodepth{1.25in} % depth (height) of the biography photo area +% area cleared for photo +\def\@IEEEBIOhangwidth{1.14in} % width cleared for the biography photo area +\def\@IEEEBIOhangdepth{1.25in} % depth cleared for the biography photo area + % actual depth will be a multiple of + % \baselineskip, rounded up +\def\@IEEEBIOskipN{4\baselineskip}% nominal value of the vskip above the biography + +\newenvironment{IEEEbiography}[2][]{\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize% +\unitlength 1in\parskip=0pt\par\parindent 1em\interlinepenalty500% +% we need enough space to support the hanging indent +% the nominal value of the spacer +% and one extra line for good measure +\@IEEEtrantmpdimenA=\@IEEEBIOhangdepth% +\advance\@IEEEtrantmpdimenA by \@IEEEBIOskipN% +\advance\@IEEEtrantmpdimenA by 1\baselineskip% +% if this page does not have enough space, break it and lets start +% with a new one +\@IEEEtranneedspace{\@IEEEtrantmpdimenA}{\relax}% +% nominal spacer can strech, not shrink use 1fil so user can out stretch with \vfill +\vskip \@IEEEBIOskipN plus 1fil minus 0\baselineskip% +% the default box for where the photo goes +\def\@IEEEtempbiographybox{{\setlength{\fboxsep}{0pt}\framebox{% +\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}\centering PLACE\\ PHOTO\\ HERE \end{minipage}}}}% +% +% detect if the optional argument was supplied, this requires the +% \@ifmtarg command as defined in the appendix section above +% and if so, override the default box with what they want +\@ifmtarg{#1}{\relax}{\def\@IEEEtempbiographybox{\mbox{\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}% +\centering% +#1% +\end{minipage}}}}% end if optional argument supplied +% Make an entry into the table of contents only if we have not done so before +\if@IEEEbiographyTOCentrynotmade% +% link labels to the biography counter so hyperref will jump +% to the biography, not the previous section +\setcounter{IEEEbiography}{-1}% +\refstepcounter{IEEEbiography}% +\addcontentsline{toc}{section}{Biographies}% +\global\@IEEEbiographyTOCentrynotmadefalse% +\fi% +% one more biography +\refstepcounter{IEEEbiography}% +% Make an entry for this name into the table of contents +\addcontentsline{toc}{subsection}{#2}% +% V1.6 properly handle if a new paragraph should occur while the +% hanging indent is still active. Do this by redefining \par so +% that it will not start a new paragraph. (But it will appear to the +% user as if it did.) Also, strip any leading pars, newlines, or spaces. +\let\@IEEEBIOORGparCMD=\par% save the original \par command +\edef\par{\hfil\break\indent}% the new \par will not be a "real" \par +\settoheight{\@IEEEtrantmpdimenA}{\@IEEEtempbiographybox}% get height of biography box +\@IEEEtrantmpdimenB=\@IEEEBIOhangdepth% +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenB% countA has the hang depth +\divide\@IEEEtrantmpcountA by \baselineskip% calculates lines needed to produce the hang depth +\advance\@IEEEtrantmpcountA by 1% ensure we overestimate +% set the hanging indent +\hangindent\@IEEEBIOhangwidth% +\hangafter-\@IEEEtrantmpcountA% +% reference the top of the photo area to the top of a capital T +\settoheight{\@IEEEtrantmpdimenB}{\mbox{T}}% +% set the photo box, give it zero width and height so as not to disturb anything +\noindent\makebox[0pt][l]{\hspace{-\@IEEEBIOhangwidth}\raisebox{\@IEEEtrantmpdimenB}[0pt][0pt]{% +\raisebox{-\@IEEEBIOphotodepth}[0pt][0pt]{\@IEEEtempbiographybox}}}% +% now place the author name and begin the bio text +\noindent\textbf{#2\ }\@IEEEgobbleleadPARNLSP}{\relax\let\par=\@IEEEBIOORGparCMD\par% +% 7/2001 V1.5 detect when the biography text is shorter than the photo area +% and pad the unused area - preventing a collision from the next biography entry +% MDS +\ifnum \prevgraf <\@IEEEtrantmpcountA\relax% detect when the biography text is shorter than the photo + \advance\@IEEEtrantmpcountA by -\prevgraf% calculate how many lines we need to pad + \advance\@IEEEtrantmpcountA by -1\relax% we compensate for the fact that we indented an extra line + \@IEEEtrantmpdimenA=\baselineskip% calculate the length of the padding + \multiply\@IEEEtrantmpdimenA by \@IEEEtrantmpcountA% + \noindent\rule{0pt}{\@IEEEtrantmpdimenA}% insert an invisible support strut +\fi% +\par\normalfont} + + + +% V1.6 +% added biography without a photo environment +\newenvironment{IEEEbiographynophoto}[1]{% +% Make an entry into the table of contents only if we have not done so before +\if@IEEEbiographyTOCentrynotmade% +% link labels to the biography counter so hyperref will jump +% to the biography, not the previous section +\setcounter{IEEEbiography}{-1}% +\refstepcounter{IEEEbiography}% +\addcontentsline{toc}{section}{Biographies}% +\global\@IEEEbiographyTOCentrynotmadefalse% +\fi% +% one more biography +\refstepcounter{IEEEbiography}% +% Make an entry for this name into the table of contents +\addcontentsline{toc}{subsection}{#1}% +\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize\interlinepenalty500% +\vskip 4\baselineskip plus 1fil minus 0\baselineskip% +\parskip=0pt\par% +\noindent\textbf{#1\ }\@IEEEgobbleleadPARNLSP}{\relax\par\normalfont} + + +% provide the user with some old font commands +% got this from article.cls +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} +\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} + + +% SPECIAL PAPER NOTICE COMMANDS +% +% holds the special notice text +\def\@IEEEspecialpapernotice{\relax} + +% for special papers, like invited papers, the user can do: +% \IEEEspecialpapernotice{(Invited Paper)} before \maketitle +\def\IEEEspecialpapernotice#1{\ifCLASSOPTIONconference% +\def\@IEEEspecialpapernotice{{\sublargesize\textit{#1}\vspace*{1em}}}% +\else% +\def\@IEEEspecialpapernotice{{\\*[1.5ex]\sublargesize\textit{#1}}\vspace*{-2ex}}% +\fi} + + + + +% PUBLISHER ID COMMANDS +% to insert a publisher's ID footer +% V1.6 \IEEEpubid has been changed so that the change in page size and style +% occurs in \maketitle. \IEEEpubid must now be issued prior to \maketitle +% use \IEEEpubidadjcol as before - in the second column of the title page +% These changes allow \maketitle to take the reduced page height into +% consideration when dynamically setting the space between the author +% names and the maintext. +% +% the amount the main text is pulled up to make room for the +% publisher's ID footer +% The IEEE uses about 1.3\baselineskip for journals, +% dynamic title spacing will clean up the fraction +\def\@IEEEpubidpullup{1.3\baselineskip} +\ifCLASSOPTIONtechnote +% for technotes it must be an integer of baselineskip as there can be no +% dynamic title spacing for two column mode technotes (the title is in the +% in first column) and we should maintain an integer number of lines in the +% second column +% There are some examples (such as older issues of "Transactions on +% Information Theory") in which the IEEE really pulls the text off the ID for +% technotes - about 0.55in (or 4\baselineskip). We'll use 2\baselineskip +% and call it even. +\def\@IEEEpubidpullup{2\baselineskip} +\fi + +% V1.7 compsoc does not use a pullup +\ifCLASSOPTIONcompsoc +\def\@IEEEpubidpullup{0pt} +\fi + +% holds the ID text +\def\@IEEEpubid{\relax} + +% flag so \maketitle can tell if \IEEEpubid was called +\newif\if@IEEEusingpubid +\global\@IEEEusingpubidfalse +% issue this command in the page to have the ID at the bottom +% V1.6 use before \maketitle +\def\IEEEpubid#1{\def\@IEEEpubid{#1}\global\@IEEEusingpubidtrue} + + +% command which will pull up (shorten) the column it is executed in +% to make room for the publisher ID. Place in the second column of +% the title page when using \IEEEpubid +% Is smart enough not to do anything when in single column text or +% if the user hasn't called \IEEEpubid +% currently needed in for the second column of a page with the +% publisher ID. If not needed in future releases, please provide this +% command and define it as \relax for backward compatibility +% v1.6b do not allow command to operate if the peer review option has been +% selected because \IEEEpubidadjcol will not be on the cover page. +% V1.7 do nothing if compsoc +\def\IEEEpubidadjcol{\ifCLASSOPTIONcompsoc\else\ifCLASSOPTIONpeerreview\else +\if@twocolumn\if@IEEEusingpubid\enlargethispage{-\@IEEEpubidpullup}\fi\fi\fi\fi} + +% Special thanks to Peter Wilson, Daniel Luecking, and the other +% gurus at comp.text.tex, for helping me to understand how best to +% implement the IEEEpubid command in LaTeX. + + + +%% Lockout some commands under various conditions + +% general purpose bit bucket +\newsavebox{\@IEEEtranrubishbin} + +% flags to prevent multiple warning messages +\newif\if@IEEEWARNthanks +\newif\if@IEEEWARNIEEEPARstart +\newif\if@IEEEWARNIEEEbiography +\newif\if@IEEEWARNIEEEbiographynophoto +\newif\if@IEEEWARNIEEEpubid +\newif\if@IEEEWARNIEEEpubidadjcol +\newif\if@IEEEWARNIEEEmembership +\newif\if@IEEEWARNIEEEaftertitletext +\@IEEEWARNthankstrue +\@IEEEWARNIEEEPARstarttrue +\@IEEEWARNIEEEbiographytrue +\@IEEEWARNIEEEbiographynophototrue +\@IEEEWARNIEEEpubidtrue +\@IEEEWARNIEEEpubidadjcoltrue +\@IEEEWARNIEEEmembershiptrue +\@IEEEWARNIEEEaftertitletexttrue + + +%% Lockout some commands when in various modes, but allow them to be restored if needed +%% +% save commands which might be locked out +% so that the user can later restore them if needed +\let\@IEEESAVECMDthanks\thanks +\let\@IEEESAVECMDIEEEPARstart\IEEEPARstart +\let\@IEEESAVECMDIEEEbiography\IEEEbiography +\let\@IEEESAVECMDendIEEEbiography\endIEEEbiography +\let\@IEEESAVECMDIEEEbiographynophoto\IEEEbiographynophoto +\let\@IEEESAVECMDendIEEEbiographynophoto\endIEEEbiographynophoto +\let\@IEEESAVECMDIEEEpubid\IEEEpubid +\let\@IEEESAVECMDIEEEpubidadjcol\IEEEpubidadjcol +\let\@IEEESAVECMDIEEEmembership\IEEEmembership +\let\@IEEESAVECMDIEEEaftertitletext\IEEEaftertitletext + + +% disable \IEEEPARstart when in draft mode +% This may have originally been done because the pre-V1.6 drop letter +% algorithm had problems with a non-unity baselinestretch +% At any rate, it seems too formal to have a drop letter in a draft +% paper. +\ifCLASSOPTIONdraftcls +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** ATTENTION: \noexpand\IEEEPARstart + is disabled in draft mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} +\fi +% and for technotes +\ifCLASSOPTIONtechnote +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart + is locked out for technotes (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} +\fi + + +% lockout unneeded commands when in conference mode +\ifCLASSOPTIONconference +% when locked out, \thanks, \IEEEbiography, \IEEEbiographynophoto, \IEEEpubid, +% \IEEEmembership and \IEEEaftertitletext will all swallow their given text. +% \IEEEPARstart will output a normal character instead +% warn the user about these commands only once to prevent the console screen +% from filling up with redundant messages +\def\thanks#1{\if@IEEEWARNthanks\typeout{** WARNING: \noexpand\thanks + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNthanksfalse} +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} + + +% LaTeX treats environments and commands with optional arguments differently. +% the actual ("internal") command is stored as \\commandname +% (accessed via \csname\string\commandname\endcsname ) +% the "external" command \commandname is a macro with code to determine +% whether or not the optional argument is presented and to provide the +% default if it is absent. So, in order to save and restore such a command +% we would have to save and restore \\commandname as well. But, if LaTeX +% ever changes the way it names the internal names, the trick would break. +% Instead let us just define a new environment so that the internal +% name can be left undisturbed. +\newenvironment{@IEEEbogusbiography}[2][]{\if@IEEEWARNIEEEbiography\typeout{** WARNING: \noexpand\IEEEbiography + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographyfalse% +\setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax} +% and make biography point to our bogus biography +\let\IEEEbiography=\@IEEEbogusbiography +\let\endIEEEbiography=\end@IEEEbogusbiography + +\renewenvironment{IEEEbiographynophoto}[1]{\if@IEEEWARNIEEEbiographynophoto\typeout{** WARNING: \noexpand\IEEEbiographynophoto + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographynophotofalse% +\setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax} + +\def\IEEEpubid#1{\if@IEEEWARNIEEEpubid\typeout{** WARNING: \noexpand\IEEEpubid + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidfalse} +\def\IEEEpubidadjcol{\if@IEEEWARNIEEEpubidadjcol\typeout{** WARNING: \noexpand\IEEEpubidadjcol + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidadjcolfalse} +\def\IEEEmembership#1{\if@IEEEWARNIEEEmembership\typeout{** WARNING: \noexpand\IEEEmembership + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEmembershipfalse} +\def\IEEEaftertitletext#1{\if@IEEEWARNIEEEaftertitletext\typeout{** WARNING: \noexpand\IEEEaftertitletext + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEaftertitletextfalse} +\fi + + +% provide a way to restore the commands that are locked out +\def\IEEEoverridecommandlockouts{% +\typeout{** ATTENTION: Overriding command lockouts (line \the\inputlineno).}% +\let\thanks\@IEEESAVECMDthanks% +\let\IEEEPARstart\@IEEESAVECMDIEEEPARstart% +\let\IEEEbiography\@IEEESAVECMDIEEEbiography% +\let\endIEEEbiography\@IEEESAVECMDendIEEEbiography% +\let\IEEEbiographynophoto\@IEEESAVECMDIEEEbiographynophoto% +\let\endIEEEbiographynophoto\@IEEESAVECMDendIEEEbiographynophoto% +\let\IEEEpubid\@IEEESAVECMDIEEEpubid% +\let\IEEEpubidadjcol\@IEEESAVECMDIEEEpubidadjcol% +\let\IEEEmembership\@IEEESAVECMDIEEEmembership% +\let\IEEEaftertitletext\@IEEESAVECMDIEEEaftertitletext} + + + +% need a backslash character for typeout output +{\catcode`\|=0 \catcode`\\=12 +|xdef|@IEEEbackslash{\}} + + +% hook to allow easy disabling of all legacy warnings +\def\@IEEElegacywarn#1#2{\typeout{** ATTENTION: \@IEEEbackslash #1 is deprecated (line \the\inputlineno). +Use \@IEEEbackslash #2 instead.}} + + +% provide some legacy IEEEtran commands +\def\IEEEcompsoctitleabstractindextext{\@IEEElegacywarn{IEEEcompsoctitleabstractindextext}{IEEEtitleabstractindextext}\IEEEtitleabstractindextext} +\def\IEEEdisplaynotcompsoctitleabstractindextext{\@IEEElegacywarn{IEEEdisplaynotcompsoctitleabstractindextext}{IEEEdisplaynontitleabstractindextext}\IEEEdisplaynontitleabstractindextext} +% provide some legacy IEEEtran environments + + +% V1.8a no more support for these legacy commands +%\def\authorblockA{\@IEEElegacywarn{authorblockA}{IEEEauthorblockA}\IEEEauthorblockA} +%\def\authorblockN{\@IEEElegacywarn{authorblockN}{IEEEauthorblockN}\IEEEauthorblockN} +%\def\authorrefmark{\@IEEElegacywarn{authorrefmark}{IEEEauthorrefmark}\IEEEauthorrefmark} +%\def\PARstart{\@IEEElegacywarn{PARstart}{IEEEPARstart}\IEEEPARstart} +%\def\pubid{\@IEEElegacywarn{pubid}{IEEEpubid}\IEEEpubid} +%\def\pubidadjcol{\@IEEElegacywarn{pubidadjcol}{IEEEpubidadjcol}\IEEEpubidadjcol} +%\def\specialpapernotice{\@IEEElegacywarn{specialpapernotice}{IEEEspecialpapernotice}\IEEEspecialpapernotice} +% and environments +%\def\keywords{\@IEEElegacywarn{keywords}{IEEEkeywords}\IEEEkeywords} +%\def\endkeywords{\endIEEEkeywords} +% V1.8 no more support for legacy IED list commands +%\let\labelindent\IEEElabelindent +%\def\calcleftmargin{\@IEEElegacywarn{calcleftmargin}{IEEEcalcleftmargin}\IEEEcalcleftmargin} +%\def\setlabelwidth{\@IEEElegacywarn{setlabelwidth}{IEEEsetlabelwidth}\IEEEsetlabelwidth} +%\def\usemathlabelsep{\@IEEElegacywarn{usemathlabelsep}{IEEEusemathlabelsep}\IEEEusemathlabelsep} +%\def\iedlabeljustifyc{\@IEEElegacywarn{iedlabeljustifyc}{IEEEiedlabeljustifyc}\IEEEiedlabeljustifyc} +%\def\iedlabeljustifyl{\@IEEElegacywarn{iedlabeljustifyl}{IEEEiedlabeljustifyl}\IEEEiedlabeljustifyl} +%\def\iedlabeljustifyr{\@IEEElegacywarn{iedlabeljustifyr}{IEEEiedlabeljustifyr}\IEEEiedlabeljustifyr} +% V1.8 no more support for QED and proof stuff +%\def\QED{\@IEEElegacywarn{QED}{IEEEQED}\IEEEQED} +%\def\QEDclosed{\@IEEElegacywarn{QEDclosed}{IEEEQEDclosed}\IEEEQEDclosed} +%\def\QEDopen{\@IEEElegacywarn{QEDopen}{IEEEQEDopen}\IEEEQEDopen} +%\AtBeginDocument{\def\proof{\@IEEElegacywarn{proof}{IEEEproof}\IEEEproof}\def\endproof{\endIEEEproof}} +% V1.8 no longer support biography or biographynophoto +%\def\biography{\@IEEElegacywarn{biography}{IEEEbiography}\IEEEbiography} +%\def\biographynophoto{\@IEEElegacywarn{biographynophoto}{IEEEbiographynophoto}\IEEEbiographynophoto} +%\def\endbiography{\endIEEEbiography} +%\def\endbiographynophoto{\endIEEEbiographynophoto} +% V1.7 and later no longer supports \overrideIEEEmargins +%\def\overrideIEEEmargins{% +%\typeout{** WARNING: \string\overrideIEEEmargins \space no longer supported (line \the\inputlineno).}% +%\typeout{** Use the \string\CLASSINPUTinnersidemargin, \string\CLASSINPUToutersidemargin \space controls instead.}} + +\endinput + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of IEEEtran.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%% +% That's all folks! + diff --git a/synthetic/bck/background.tex b/synthetic/bck/background.tex new file mode 100644 index 0000000..e8a0c30 --- /dev/null +++ b/synthetic/bck/background.tex @@ -0,0 +1,53 @@ +In this section we introduce key notions as well as previous works on which we base our study. + +\subsection{Machine learning and classification} +In classification tasks, a machine learning model is a function that maps features of a data record to its label. +This function has an architecture which describes the strucure of the internal computing as well as parameters. +For instance with mono dimensialon data, the afine model is $f(x) = ax+b$ where $x$ is the feature and $a$ and $b$ are the parameters. +In generale the range of $f$ is $\mathbb{R}$ and we call $f(x)$ the soft label or the logit of $x$. +Because classification problems require discreat values, we apply a threshold to the soft label under which the predicted label is 0 and above which it is 1. + +Training a machine learning model means using an optimization algorithm that will find optimal parameters to minimize a loss function $l$. +In the previous example, the optimization problem is $\text{min}_{(a,b)\in\mathbb{R}^2}l(f(x),y)$ where $y$ is the ground truth: the label of $x$ in the dataset. + +\subsection{Synthetic datas} +A generator is a function that takes as input a real dataset and outputs a synthetic dataset. +This definition is general enough so that the identity function is a generator. +Even though synthetic datasets are supposedely different than real world datasets. +We refer to the output of the identiy generator as real data while refering to the output of anyother generator as synthetic data. + +In addition to the identity generator we use General Adversarial Networks (GAN)~\cite{gan}. +The goal of a GAN is to generate realistic samples given a distribution of multivariate data. +To do so a GAN leverages two neural networks: a generator and a discriminator. +The domain of the generator (its input space) is of low dimension with respect to its codomain (its output space) which has the same dimension as the data we want to generate. +For instance with 64 by 64 images, the codomain is a matrix with 64 rows and 64 columns. +To generate a new sample, we evaluate the generator on a sample of a multivariate standard normal distribution where the dimension is the domain's dimension. +This output is the new generated synthetic data point. + +The discriminator is only used when training the GAN with the goal of making sure that the generator produces realistic data. +To do so, the discriminator is a neural network with a classification goal: infer if a sample is synthetic or real. +Hence in the training procedure, the discriminatore and the generator are in competition: the generator goal is to fool the discriminator into classifing synthetic data as real data. + + +\subsection{Membership inference attack} +This attack infers the membership status: weather a data record has been used in the training (member $m$) of a machin learning model or not (non-member $\bar{m}$). +%Shadow model +In practice, this attack is made by leveraging shadow models: models that imitates the behaviour of the target~\cite{shokri2017membership}. +This technique allows an attacker to construct a dataset of logits and ground truth labeld by the membership status. + +%Yeom et all +Overfitting is one of the major historical difficulities of machine learning~\cite{hawkins2004problem}. +The generalization error is the differecne between the average loss of members and the average loss of non-members. +The more this error is, the more the model overfits. +Yeom et all. show that overfitting is the major factor that allow memberhsip inference attack~\cite{yeom}. +They build an attack that assume the attacker has access to a dataset of losses labeled by the membership status. +It allows them to build a model to infer the membership status from the losses of the data records. + +%DP +Differential privacy is a probabilistic definition that bound mambership inference attack's success. +In practice, thoes guaranties are achieved thrgout gradient clipping and additive noise in the training algorithme~\cite{abadi2016deep}. + +\subsection{Attribut inference attack} +Model predictions and especially soft labelscan be dependent on a sensitive attribute such as race or sex. +For instance, the prediction of recidivism in predictive justice is dependent on the race of the guilty~\cite{EO}. +Attribut inference attack (AIA) leverage bias in model predictions to infer sensitive attributes of data records~\cite{song2020overlearning}. diff --git a/synthetic/bck/biblio.bib b/synthetic/bck/biblio.bib new file mode 100644 index 0000000..fa524ee --- /dev/null +++ b/synthetic/bck/biblio.bib @@ -0,0 +1,196 @@ +@misc{song2020overlearning, + title={Overlearning Reveals Sensitive Attributes}, + author={Congzheng Song and Vitaly Shmatikov}, + year={2020}, + eprint={1905.11742}, + archivePrefix={arXiv}, + primaryClass={cs.LG} +} + +@article{EO, + author = {Moritz Hardt and + Eric Price and + Nathan Srebro}, + title = {Equality of Opportunity in Supervised Learning}, + journal = {CoRR}, + volume = {abs/1610.02413}, + year = {2016}, + url = {http://arxiv.org/abs/1610.02413}, + eprinttype = {arXiv}, + eprint = {1610.02413}, + timestamp = {Tue, 26 Apr 2022 09:17:17 +0200}, + biburl = {https://dblp.org/rec/journals/corr/HardtPS16.bib}, + bibsource = {dblp computer science bibliography, https://dblp.org} +} + +@article{hawkins2004problem, + title={The problem of overfitting}, + author={Hawkins, Douglas M}, + journal={Journal of chemical information and computer sciences}, + volume={44}, + number={1}, + pages={1--12}, + year={2004}, + publisher={ACS Publications} +} + +@misc{yeom, + title={Privacy Risk in Machine Learning: Analyzing the Connection to Overfitting}, + author={Samuel Yeom and Irene Giacomelli and Matt Fredrikson and Somesh Jha}, + year={2018}, + eprint={1709.01604}, + archivePrefix={arXiv}, + primaryClass={cs.CR} +} + +@misc{vgg16, + title={Very Deep Convolutional Networks for Large-Scale Image Recognition}, + author={Karen Simonyan and Andrew Zisserman}, + year={2015}, + eprint={1409.1556}, + archivePrefix={arXiv}, + primaryClass={cs.CV}, + url={https://arxiv.org/abs/1409.1556}, +} +@misc{CGAN, + title={Conditional Generative Adversarial Nets}, + author={Mehdi Mirza and Simon Osindero}, + year={2014}, + eprint={1411.1784}, + archivePrefix={arXiv}, + primaryClass={cs.LG}, + url={https://arxiv.org/abs/1411.1784}, +} +@ARTICLE{cnn, + + author={Rawat, Waseem and Wang, Zenghui}, + + journal={Neural Computation}, + + title={Deep Convolutional Neural Networks for Image Classification: A Comprehensive Review}, + + year={2017}, + + volume={29}, + + number={9}, + + pages={2352-2449}, + + keywords={}, + + doi={10.1162/neco_a_00990}} + +@misc{dcgan, + title={Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks}, + author={Alec Radford and Luke Metz and Soumith Chintala}, + year={2016}, + eprint={1511.06434}, + archivePrefix={arXiv}, + primaryClass={cs.LG}, + url={https://arxiv.org/abs/1511.06434} +} +@inproceedings{gan, +author = {Goodfellow, Ian J. and Pouget-Abadie, Jean and Mirza, Mehdi and Xu, Bing and Warde-Farley, David and Ozair, Sherjil and Courville, Aaron and Bengio, Yoshua}, +title = {Generative adversarial nets}, +year = {2014}, +publisher = {MIT Press}, +address = {Cambridge, MA, USA}, +booktitle = {Proceedings of the 27th International Conference on Neural Information Processing Systems - Volume 2}, +pages = {2672–2680}, +numpages = {9}, +location = {Montreal, Canada}, +series = {NIPS'14} +} +@misc{ctgan, + title={Modeling Tabular data using Conditional GAN}, + author={Lei Xu and Maria Skoularidou and Alfredo Cuesta-Infante and Kalyan Veeramachaneni}, + year={2019}, + eprint={1907.00503}, + archivePrefix={arXiv}, + primaryClass={cs.LG}, + url={https://arxiv.org/abs/1907.00503}, +} +@article{bellovin2019privacy, + title={Privacy and synthetic datasets}, + author={Bellovin, Steven M and Dutta, Preetam K and Reitinger, Nathan}, + journal={Stan. Tech. L. Rev.}, + volume={22}, + pages={1}, + year={2019}, + publisher={HeinOnline} +} + +@inproceedings{ping2017datasynthesizer, + title={Datasynthesizer: Privacy-preserving synthetic datasets}, + author={Ping, Haoyue and Stoyanovich, Julia and Howe, Bill}, + booktitle={Proceedings of the 29th International Conference on Scientific and Statistical Database Management}, + pages={1--5}, + year={2017} +} + +@inproceedings{kuppa2021towards, + title={Towards improving privacy of synthetic datasets}, + author={Kuppa, Aditya and Aouad, Lamine and Le-Khac, Nhien-An}, + booktitle={Annual Privacy Forum}, + pages={106--119}, + year={2021}, + organization={Springer} +} + +@article{tai2023user, + title={User-Driven Synthetic Dataset Generation with Quantifiable Differential Privacy}, + author={Tai, Bo-Chen and Tsou, Yao-Tung and Li, Szu-Chuang and Huang, Yennun and Tsai, Pei-Yuan and Tsai, Yu-Cheng}, + journal={IEEE Transactions on Services Computing}, + year={2023}, + publisher={IEEE} +} +@article{stadler2020synthetic, + title={Synthetic data-A privacy mirage}, + author={Stadler, Theresa and Oprisanu, Bristena and Troncoso, Carmela}, + journal={arXiv preprint arXiv:2011.07018}, + year={2020}, + publisher={Nov} +} + +@inproceedings{jordon2021hide, + title={Hide-and-seek privacy challenge: Synthetic data generation vs. patient re-identification}, + author={Jordon, James and Jarrett, Daniel and Saveliev, Evgeny and Yoon, Jinsung and Elbers, Paul and Thoral, Patrick and Ercole, Ari and Zhang, Cheng and Belgrave, Danielle and van der Schaar, Mihaela}, + booktitle={NeurIPS 2020 Competition and Demonstration Track}, + pages={206--215}, + year={2021}, + organization={PMLR} +} + +@inproceedings{abadi2016deep, + title={Deep learning with differential privacy}, + author={Abadi, Martin and Chu, Andy and Goodfellow, Ian and McMahan, H Brendan and Mironov, Ilya and Talwar, Kunal and Zhang, Li}, + booktitle={Proceedings of the 2016 ACM SIGSAC conference on computer and communications security}, + pages={308--318}, + year={2016} +} + +@inproceedings{shokri2017membership, + title={Membership inference attacks against machine learning models}, + author={Shokri, Reza and Stronati, Marco and Song, Congzheng and Shmatikov, Vitaly}, + booktitle={2017 IEEE symposium on security and privacy (SP)}, + pages={3--18}, + year={2017}, + organization={IEEE} +} + +@article{ding2021retiring, + title={Retiring Adult: New Datasets for Fair Machine Learning}, + author={Ding, Frances and Hardt, Moritz and Miller, John and Schmidt, Ludwig}, + journal={Advances in Neural Information Processing Systems}, + volume={34}, + year={2021} +} + +@inproceedings{zhifei2017cvpr, + title={Age Progression/Regression by Conditional Adversarial Autoencoder}, + author={Zhang, Zhifei and Song, Yang and Qi, Hairong}, + booktitle={IEEE Conference on Computer Vision and Pattern Recognition (CVPR)}, + year={2017}, + organization={IEEE} +} diff --git a/synthetic/bck/compile.sh b/synthetic/bck/compile.sh new file mode 100755 index 0000000..3897a0b --- /dev/null +++ b/synthetic/bck/compile.sh @@ -0,0 +1,5 @@ +pdflatex main.tex; +bibtex main; +pdflatex main.tex; +pdflatex main.tex; +pdflatex main.tex; diff --git a/synthetic/bck/conclusion.tex b/synthetic/bck/conclusion.tex new file mode 100644 index 0000000..ea990e7 --- /dev/null +++ b/synthetic/bck/conclusion.tex @@ -0,0 +1 @@ +Even though synthetic dataset are promising regarding users' data protection, in itself it does not bring guaranties that membership status nor sensitive attributes are protected. diff --git a/synthetic/bck/figure/method/overfit/aia.pdf b/synthetic/bck/figure/method/overfit/aia.pdf new file mode 100644 index 0000000..f055f5f Binary files /dev/null and b/synthetic/bck/figure/method/overfit/aia.pdf differ diff --git a/synthetic/bck/figure/method/overfit/mia.pdf b/synthetic/bck/figure/method/overfit/mia.pdf new file mode 100644 index 0000000..cb09492 Binary files /dev/null and b/synthetic/bck/figure/method/overfit/mia.pdf differ diff --git a/synthetic/bck/figure/method/overfit/quality.pdf b/synthetic/bck/figure/method/overfit/quality.pdf new file mode 100644 index 0000000..a59734e Binary files /dev/null and b/synthetic/bck/figure/method/overfit/quality.pdf differ diff --git a/synthetic/bck/figure/method/overfit/utility.pdf b/synthetic/bck/figure/method/overfit/utility.pdf new file mode 100644 index 0000000..205fe79 Binary files /dev/null and b/synthetic/bck/figure/method/overfit/utility.pdf differ diff --git a/synthetic/bck/figure/result/adult/aia.pdf b/synthetic/bck/figure/result/adult/aia.pdf new file mode 100644 index 0000000..3b8ef2e Binary files /dev/null and b/synthetic/bck/figure/result/adult/aia.pdf differ diff --git a/synthetic/bck/figure/result/adult/mia.pdf b/synthetic/bck/figure/result/adult/mia.pdf new file mode 100644 index 0000000..76f8735 Binary files /dev/null and b/synthetic/bck/figure/result/adult/mia.pdf differ diff --git a/synthetic/bck/figure/result/adult/utility.pdf b/synthetic/bck/figure/result/adult/utility.pdf new file mode 100644 index 0000000..a4cca11 Binary files /dev/null and b/synthetic/bck/figure/result/adult/utility.pdf differ diff --git a/synthetic/bck/figure/tikz/data.tex b/synthetic/bck/figure/tikz/data.tex new file mode 100644 index 0000000..663b59c --- /dev/null +++ b/synthetic/bck/figure/tikz/data.tex @@ -0,0 +1,20 @@ +\makeatletter +\tikzset{ + database/.style={ + path picture={ + \draw (0, 1.5*\database@segmentheight) circle [x radius=\database@radius,y radius=\database@aspectratio*\database@radius]; + \draw (-\database@radius, 0.5*\database@segmentheight) arc [start angle=180,end angle=360,x radius=\database@radius, y radius=\database@aspectratio*\database@radius]; + \draw (-\database@radius,-0.5*\database@segmentheight) arc [start angle=180,end angle=360,x radius=\database@radius, y radius=\database@aspectratio*\database@radius]; + \draw (-\database@radius,1.5*\database@segmentheight) -- ++(0,-3*\database@segmentheight) arc [start angle=180,end angle=360,x radius=\database@radius, y radius=\database@aspectratio*\database@radius] -- ++(0,3*\database@segmentheight); + }, + minimum width=2*\database@radius + \pgflinewidth, + minimum height=3*\database@segmentheight + 2*\database@aspectratio*\database@radius + \pgflinewidth, + }, + database segment height/.store in=\database@segmentheight, + database radius/.store in=\database@radius, + database aspect ratio/.store in=\database@aspectratio, + database segment height=0.1cm, + database radius=0.25cm, + database aspect ratio=0.35, +} +\makeatother diff --git a/synthetic/bck/figure/tikz/data_flow/step1.tex b/synthetic/bck/figure/tikz/data_flow/step1.tex new file mode 100644 index 0000000..739163f --- /dev/null +++ b/synthetic/bck/figure/tikz/data_flow/step1.tex @@ -0,0 +1,30 @@ +\input{figure/tikz/data} + +\begin{tikzpicture} +\node[database,label=left:$D$] (d) at (0,0){}; +\node[database,label=left:$D_{\text{Train}}$] (train) at (0,-2){}; +\node[database,label=right:$D_{\text{Ttest}}$] (test) at (2,0){}; + +\draw[->] (d) to (train); +\draw[->] (d) to (test); + +\def \p {-2} %Bloc position +\def \s {1} %spacing +\node[rectangle,draw] (g1) at (2,\p+\s) {Generator 1}; +\node[rectangle,draw] (g2) at (2,\p) {Generator 2}; +\node[rectangle,draw] (g3) at (2,\p-\s) {Generator 3}; + +\draw[->] (train) to (g1); +\draw[->] (train) to (g2); +\draw[->] (train) to (g3); + +\node[database,label=right:$S_{1}$] (s1) at (4,\p+\s){}; +\node[database,label=right:$S_{2}$] (s2) at (4,\p){}; +\node[database,label=right:$S_{3}$] (s3) at (4,\p-\s){}; + +\draw[->] (g1) to (s1); +\draw[->] (g2) to (s2); +\draw[->] (g3) to (s3); + + +\end{tikzpicture} diff --git a/synthetic/bck/figure/tikz/data_flow/step2.tex b/synthetic/bck/figure/tikz/data_flow/step2.tex new file mode 100644 index 0000000..b00ff0e --- /dev/null +++ b/synthetic/bck/figure/tikz/data_flow/step2.tex @@ -0,0 +1,16 @@ +\input{figure/tikz/data} + +\begin{tikzpicture} +\node[database,label=left:$S_{1}$] (s1) at (0,0){}; +\node[database,label=left:$S_{2}$] (s2) at (0,-1){}; +\node[database,label=left:$S_{3}$] (s3) at (0,-2){}; + +\node[rectangle,draw] (pred1) at (2,0) {Predictor 1}; +\node[rectangle,draw] (pred2) at (2,-1) {Predictor 2}; +\node[rectangle,draw] (pred3) at (2,-2) {Predictor 3}; + +\draw[->] (s1) to (pred1); +\draw[->] (s2) to (pred2); +\draw[->] (s3) to (pred3); + +\end{tikzpicture} diff --git a/synthetic/bck/figure/tikz/data_flow/step3.tex b/synthetic/bck/figure/tikz/data_flow/step3.tex new file mode 100644 index 0000000..e7d0d28 --- /dev/null +++ b/synthetic/bck/figure/tikz/data_flow/step3.tex @@ -0,0 +1,23 @@ +\input{figure/tikz/data} + +\begin{tikzpicture} +\node[database,label=left:$D_{\text{test}}$] (test) at (0,-1){}; + +\node[rectangle,draw] (pred1) at (2,0) {Predictor 1}; +\node[rectangle,draw] (pred2) at (2,-1) {Predictor 2}; +\node[rectangle,draw] (pred3) at (2,-2) {Predictor 3}; + + +\node[database,label=right:$P_{1}$] (p1) at (4,0){}; +\node[database,label=right:$P_{2}$] (p2) at (4,-1){}; +\node[database,label=right:$P_{3}$] (p3) at (4,-2){}; + +\draw[->] (test) to (pred1); +\draw[->] (test) to (pred2); +\draw[->] (test) to (pred3); + +\draw[->] (pred1) to (p1); +\draw[->] (pred2) to (p2); +\draw[->] (pred3) to (p3); + +\end{tikzpicture} diff --git a/synthetic/bck/figure/tikz/data_split/bck b/synthetic/bck/figure/tikz/data_split/bck new file mode 100644 index 0000000..727f594 --- /dev/null +++ b/synthetic/bck/figure/tikz/data_split/bck @@ -0,0 +1,73 @@ + +\begin{tikzpicture} + \node[database,label=left:Full] (d) at (0,0){}; + + \node[database,label=left:$m$ 80\%] (dtr) at (2,0.5){}; + \node[database,label=left:$\bar{m}$ 20\%] (dte) at (2,-0.5){}; + + \draw[->] (d) to (dtr); + \draw[->] (d) to (dte); + + \node[rectangle,draw,align=center] (target) at (5,0.5) {Target\\Model}; + + \draw[->] (dtr) to[bend left] node[midway,above,inner sep=2pt] {training} (target); + \draw[->] (dtr) to node[midway,below] {eval} (target); + \draw[->] (dte) to node[midway,below] {eval} (target); + + \node[database,label=above:loss $m$] (dlm) at (7,0.5){}; + \node[database,label=above:loss $\bar{m}$] (dlnm) at (7,-0.5){}; + + \draw[->] (target) to node[midway,above] {eval} (dlm); + \draw[->] (target) to node[midway,below] {eval} (dlnm); + + \node[database,label=below:MIA data] (shu) at (7,-2){}; + \draw[->] (dlm) to[out=0,in=50] (shu); + \draw[->] (dlnm) to[bend left] (shu); + + \node[database,label=right:Train 80\%] (miatr) at (4,-1.5){}; + \node[database,label=right:Test 20\%] (miate) at (4,-2.5){}; + \draw[->] (shu) to (miatr); + \draw[->] (shu) to (miate); + + \node[rectangle,draw,align=center] (miamod) at (2, -1.5) {MIA\\Model}; + + \draw[->] (miatr) to[bend right] node[midway,above,inner sep=2pt] {training} (miamod); + \draw[->] (miate) to node[midway,below] {eval} (miamod); + + \node (res) at (0,-1.5) {MIA result}; + \draw[->] (miamod) to (res); +\end{tikzpicture} + + + + + + +\begin{tikzpicture} +\node[database,label=left:$D$] (d) at (0,0){}; +\node[database,label=left:$D_{\text{Train}}$] (train) at (0,-2){}; +\node[database,label=right:$D_{\text{Ttest}}$] (test) at (2,0){}; + +\draw[->] (d) to (train); +\draw[->] (d) to (test); + +\def \p {-2} %Bloc position +\def \s {1} %spacing +\node[rectangle,draw] (g1) at (2,\p+\s) {Generator 1}; +\node[rectangle,draw] (g2) at (2,\p) {Generator 2}; +\node[rectangle,draw] (g3) at (2,\p-\s) {Generator 3}; + +\draw[->] (train) to (g1); +\draw[->] (train) to (g2); +\draw[->] (train) to (g3); + +\node[database,label=right:$S_{1}$] (s1) at (4,\p+\s){}; +\node[database,label=right:$S_{2}$] (s2) at (4,\p){}; +\node[database,label=right:$S_{3}$] (s3) at (4,\p-\s){}; + +\draw[->] (g1) to (s1); +\draw[->] (g2) to (s2); +\draw[->] (g3) to (s3); + + +\end{tikzpicture} diff --git a/synthetic/bck/figure/tikz/data_split/split.tex b/synthetic/bck/figure/tikz/data_split/split.tex new file mode 100644 index 0000000..a742424 --- /dev/null +++ b/synthetic/bck/figure/tikz/data_split/split.tex @@ -0,0 +1,65 @@ +\input{synthetic/figure/tikz/data} + + +\begin{tikzpicture} + + %\draw[fill=red] (-1.1,1) rectangle (7.2,-2.5); + %\draw[fill=green] (-1.1,-2.5) rectangle (7.2,-5); + %\draw[fill=blue] (-1.1,-5) rectangle (7.2,-8); + %\draw[fill=white,fill opacity=0.8] (-1.1,1) rectangle (7.2,-8); + + %\node[single arrow, anchor=west, very thick, fill=lightgray, fill opacity=0.9, + % minimum width = 30pt, single arrow head extend=3pt, + % minimum height=89mm, + % rotate=-90] () at (3,1){}; + + \node[database,label={[align=left]left:Real\\data}] (d) at (0,0){}; + \node[rectangle,draw,align=center] (overfit) at (2,0) {OVR\\CTRL}; + \draw[->] (d) to node[midway,above] {80\%} (overfit); + \node[database,label=above:$m$] (realtr) at (3,0){}; + \draw[->] (overfit) to (realtr); + \node[rectangle,draw,align=center] (gen) at (6,0) {Generator\\Model}; + \draw[->] (realtr) to node[midway,above] {training} (gen); + + \node[database,label={[align=left]right:Synthetic\\data}] (syn) at (5,-1.5) {}; + \draw[->] (gen) to (syn); + \node[database,label=below:$\bar{m}$] (realte) at (0,-1.5) {}; + \draw[->] (d) to node[midway,left] {20\%}(realte); + \node[rectangle,draw,align=center] (tarmod) at (2,-2) {Target\\Model}; + \draw[->] (realte) to[out=0,in=130] node[midway,above] {eval} (tarmod); + \draw[->] (realtr) to node[midway,right] {eval} (tarmod); + \draw[->] (syn) to[out=-90,in=0] node[midway,above] {training} (tarmod); + \node[database,label={[align=center]left:loss\\$\bar{m}$}] (miam) at (1.5,-5) {}; + \node[database,label={[align=center]right:loss\\$m$}] (mian) at (2.5,-5) {}; + \node[database,label={[align=center]below:MIA\\data}] (mia) at (2,-6.5) {}; + \draw[->] (tarmod) to node[midway,fill=white] (aiabranch) {\small prediction} (miam); + \draw[->] (tarmod) to (mian); + \draw[->] (miam) to (mia); + \draw[->] (mian) to (mia); + + \node[database,label=above:Train] (miatr) at (4,-6.5) {}; + \node[database,label=below:Test] (miate) at (4,-7) {}; + \draw[->] (mia) to node[midway,above] {80\%} (miatr); + \draw[->] (mia) to node[midway,below] {20\%} (miate); + \node[rectangle,draw,align=center] (miamod) at (6.5,-6.5) {MIA\\Model}; + \draw[->] (miatr) to node[midway,above] {training} (miamod); + \node[align=center] (miares) at (6.5,-7.5) {MIA\\Result}; + \draw[->] (miate) to node[midway,below] {eval} (miamod); + \draw[->] (miamod) to (miares); + + \node[database,label={[align=center]above:AIA\\data}] (aiad) at (3.2,-3.6){}; + \node[align=center] (ures) at (0,-3.6) {Utility\\Result}; + \draw[->] (aiabranch) to (aiad); + \draw[->] (aiabranch) to (ures); + \node[database,label=above:Train] (aiatr) at (4.5,-3.6) {}; + \node[database,label=below:Test] (aiate) at (4.5,-4.1) {}; + \draw[->] (aiad) to node[midway,above] {80\%} (aiatr); + \draw[->] (aiad) to node[midway,below] {20\%} (aiate); + \node[rectangle,draw,align=center] (aiamod) at (6.5,-3.8) {AIA\\Model}; + + \draw[->] (aiatr) to node[midway,above] {training} (aiamod); + \draw[->] (aiate) to node[midway,below] {eval} (aiamod); + \node[align=center] (aiares) at (6.5,-5) {AIA\\Result}; + \draw[->] (aiamod) to (aiares); +\end{tikzpicture} + diff --git a/synthetic/bck/figure/tikz/ovre.tex b/synthetic/bck/figure/tikz/ovre.tex new file mode 100644 index 0000000..2ae2645 --- /dev/null +++ b/synthetic/bck/figure/tikz/ovre.tex @@ -0,0 +1,13 @@ +%Control of the overfitting +\input{synthetic/figure/tikz/data} +\begin{tikzpicture} + \node[database,label=Input] (in) at (0,1) {}; + \node (i) at (0,0) {$r_0,\cdots, r_{N-1}$}; + \draw[->] (in) to node[midway,right] {sampling} (i); + \node (m) at (0,-1) {$r_0,\cdots, r_{N-1},r_0,\cdots, r_{N-1},\cdots,r_0,\cdots, r_{N-1}$}; + \draw[->] (i) to node[midway,right] {repetition}(m); + \node[rectangle,draw] (shu) at (0,-2) {Shuffle}; + \draw[->] (m) to (shu); + \node[database,label=below:Output] (out) at (0,-3){}; + \draw[->] (shu) to (out); +\end{tikzpicture} diff --git a/synthetic/bck/figure/x.log b/synthetic/bck/figure/x.log new file mode 100644 index 0000000..a39e242 --- /dev/null +++ b/synthetic/bck/figure/x.log @@ -0,0 +1,33 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024/Arch Linux) (preloaded format=pdflatex 2024.6.8) 11 JUL 2024 21:20 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**main.tex +(/usr/share/texmf-dist/tex/latex/tools/x.tex +LaTeX2e <2023-11-01> patch level 1 +L3 programming layer <2024-02-20> + +! . +l.38 \batchmode \errmessage{} + \csname @@end\endcsname \end +This error message was generated by an \errmessage +command, so I can't give any explicit help. +Pretend that you're Hercule Poirot: Examine all clues, +and deduce the truth by order and method. + + ) +Here is how much of TeX's memory you used: + 18 strings out of 476047 + 486 string characters out of 5792627 + 1925187 words of memory out of 5000000 + 22232 multiletter control sequences out of 15000+600000 + 558069 words of font info for 36 fonts, out of 8000000 for 9000 + 14 hyphenation exceptions out of 8191 + 12i,0n,13p,88b,8s stack positions out of 10000i,1000n,20000p,200000b,200000s + +No pages of output. +PDF statistics: + 0 PDF objects out of 1000 (max. 8388607) + 0 named destinations out of 1000 (max. 500000) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/synthetic/bck/introduction.tex b/synthetic/bck/introduction.tex new file mode 100644 index 0000000..e8969c2 --- /dev/null +++ b/synthetic/bck/introduction.tex @@ -0,0 +1,9 @@ +\subsection{Research questions} +\label{sec:question} + +%\textbf{What is the impact of using synthetic data instead of real data on users' privacy when training machine learning models?} +\textbf{How does using synthetic data instead of real data affect users' privacy in the context of training machine learning models?} + +User's privacy and neural network clash at two levels: membership inference and attribute inference. +Membership inference refers to the possibility of infering weather or not a data record belongs to the training data. +Attribute inference refers to how a trained model can be leveraged to infer a sensitive attribute such as the race or the gender. diff --git a/synthetic/bck/list_of_conf_journals b/synthetic/bck/list_of_conf_journals new file mode 100644 index 0000000..bbdec2d --- /dev/null +++ b/synthetic/bck/list_of_conf_journals @@ -0,0 +1 @@ +https://www.springer.com/journal/357 diff --git a/synthetic/bck/main.aux b/synthetic/bck/main.aux new file mode 100644 index 0000000..845d201 --- /dev/null +++ b/synthetic/bck/main.aux @@ -0,0 +1,89 @@ +\relax +\citation{gan} +\citation{shokri2017membership} +\citation{hawkins2004problem} +\citation{yeom} +\citation{abadi2016deep} +\citation{EO} +\citation{song2020overlearning} +\@writefile{toc}{\contentsline {section}{\numberline {I}Introduction}{1}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {I-A}}Research questions}{1}{}\protected@file@percent } +\newlabel{sec:question}{{\mbox {I-A}}{1}{}{}{}} +\@writefile{toc}{\contentsline {section}{\numberline {II}Background}{1}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {II-A}}Machine learning and classification}{1}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {II-B}}Synthetic datas}{1}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {II-C}}Membership inference attack}{1}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {II-D}}Attribut inference attack}{1}{}\protected@file@percent } +\citation{ding2021retiring} +\citation{zhifei2017cvpr} +\citation{dcgan} +\citation{ctgan} +\citation{ctgan} +\citation{dcgan} +\citation{cnn} +\citation{cgan} +\citation{vgg16} +\citation{yeom} +\citation{stadler2020synthetic} +\@writefile{toc}{\contentsline {section}{\numberline {III}Methodology}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {III-A}}Datasets}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {\mbox {III-A}1}US census (Adult)}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {\mbox {III-A}2}CelebA}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {III-B}}Generator training}{2}{}\protected@file@percent } +\newlabel{sec:gen}{{\mbox {III-B}}{2}{}{}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {\mbox {III-B}1}CTGAN}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {\mbox {III-B}2}DCGAN}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {III-C}}Predictor training}{2}{}\protected@file@percent } +\newlabel{sec:target}{{\mbox {III-C}}{2}{}{}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {III-D}}Attack training}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {\mbox {III-D}1}Attribute inference attack (AIA)}{2}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {\mbox {III-D}2}Membership inference attack (MIA)}{2}{}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces In this figure we detail the OVR CTRL function. This function control the overfitting of the target model. It takes a dataset of size at least $N$ and output a dataset of size $M$. First, we sample $N$ rows denoted $r_0,\cdots ,r_{N-1}$ from the input dataset. Second, we repeat the rows $\lfloor \frac {M}{N}\rfloor $ times. Finaly we shuffle the repeated rows.}}{3}{}\protected@file@percent } +\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}} +\newlabel{fig:ovr}{{1}{3}{}{}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {III-E}}Overfitting control}{3}{}\protected@file@percent } +\newlabel{sec:ovr}{{\mbox {III-E}}{3}{}{}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {III-F}}Data pipeline}{3}{}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Methodology for finding an amount of repetition that both achieve satisfying utility and a high sensitivity to MIA. We use a total number of 100000 points. In this experiment the only generator used is CTGAN. The results presented are for the Adult dataset but we apply the same process for CelebA using DCGAN. }}{3}{}\protected@file@percent } +\newlabel{fig:tune_ovr}{{2}{3}{}{}{}} +\newlabel{sec:data}{{\mbox {III-F}}{3}{}{}{}} +\@writefile{toc}{\contentsline {section}{\numberline {IV}Comparisons between synthetic and real data}{3}{}\protected@file@percent } +\citation{bellovin2019privacy} +\citation{stadler2020synthetic} +\citation{bellovin2019privacy} +\citation{ping2017datasynthesize} +\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces This figure presents the data splits and subsets used to compute results. It is a representation of the whole methodology described in this sections. The reader may start on the top left corner, with the real data. The rectangle boxes represents functions where the inputs are incoming arrows and the outputs outcomings arrows. In the case of trainable functions such as machine learning models, we indicate that an input is the training data with the label "training". We use a similar notation for evaluation. }}{4}{}\protected@file@percent } +\newlabel{fig:split}{{3}{4}{}{}{}} +\@writefile{toc}{\contentsline {section}{\numberline {V}Results}{4}{}\protected@file@percent } +\newlabel{sec:res}{{V}{4}{}{}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {V-A}}Utility}{4}{}\protected@file@percent } +\newlabel{sec:uti}{{\mbox {V-A}}{4}{}{}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {V-B}}Membership inference attack}{4}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {\mbox {V-C}}Attribute inference attack}{4}{}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Utility of the target model in terms of balanced accuracy evaluated on unseen data. The "Real" label refers to a generator equal to identity, hence the synthetic data used to train the target model is the real data. THe "Synthetic" label refers to a CGAN generator for Adult and CTGAN for CelebA, hence the synthetic data are generated sampled according to a distribution learned by the genrator model. In this case the target model is not trained on real date.}}{4}{}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Success of the MIA in terms of balanced accuracy evaluated on the Train part of MIA dataset.}}{4}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {VI}Related work}{4}{}\protected@file@percent } +\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces Success of the AIA in terms of balanced accuracy evaluated on the Train part of AIA dataset.}}{4}{}\protected@file@percent } +\citation{jordon2021hide} +\bibstyle{plain} +\bibdata{biblio} +\bibcite{abadi2016deep}{1} +\bibcite{bellovin2019privacy}{2} +\bibcite{ding2021retiring}{3} +\bibcite{gan}{4} +\bibcite{EO}{5} +\bibcite{hawkins2004problem}{6} +\bibcite{jordon2021hide}{7} +\bibcite{cgan}{8} +\bibcite{dcgan}{9} +\bibcite{cnn}{10} +\bibcite{shokri2017membership}{11} +\bibcite{vgg16}{12} +\bibcite{song2020overlearning}{13} +\bibcite{stadler2020synthetic}{14} +\bibcite{ctgan}{15} +\bibcite{yeom}{16} +\bibcite{zhifei2017cvpr}{17} +\@writefile{toc}{\contentsline {section}{\numberline {VII}Conclusion}{5}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{References}{5}{}\protected@file@percent } +\gdef \@abspage@last{5} diff --git a/synthetic/bck/main.bbl b/synthetic/bck/main.bbl new file mode 100644 index 0000000..f80a3d9 --- /dev/null +++ b/synthetic/bck/main.bbl @@ -0,0 +1,98 @@ +\begin{thebibliography}{10} + +\bibitem{abadi2016deep} +Martin Abadi, Andy Chu, Ian Goodfellow, H~Brendan McMahan, Ilya Mironov, Kunal + Talwar, and Li~Zhang. +\newblock Deep learning with differential privacy. +\newblock In {\em Proceedings of the 2016 ACM SIGSAC conference on computer and + communications security}, pages 308--318, 2016. + +\bibitem{bellovin2019privacy} +Steven~M Bellovin, Preetam~K Dutta, and Nathan Reitinger. +\newblock Privacy and synthetic datasets. +\newblock {\em Stan. Tech. L. Rev.}, 22:1, 2019. + +\bibitem{ding2021retiring} +Frances Ding, Moritz Hardt, John Miller, and Ludwig Schmidt. +\newblock Retiring adult: New datasets for fair machine learning. +\newblock {\em Advances in Neural Information Processing Systems}, 34, 2021. + +\bibitem{gan} +Ian~J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David + Warde-Farley, Sherjil Ozair, Aaron Courville, and Yoshua Bengio. +\newblock Generative adversarial nets. +\newblock In {\em Proceedings of the 27th International Conference on Neural + Information Processing Systems - Volume 2}, NIPS'14, page 2672–2680, + Cambridge, MA, USA, 2014. MIT Press. + +\bibitem{EO} +Moritz Hardt, Eric Price, and Nathan Srebro. +\newblock Equality of opportunity in supervised learning. +\newblock {\em CoRR}, abs/1610.02413, 2016. + +\bibitem{hawkins2004problem} +Douglas~M Hawkins. +\newblock The problem of overfitting. +\newblock {\em Journal of chemical information and computer sciences}, + 44(1):1--12, 2004. + +\bibitem{jordon2021hide} +James Jordon, Daniel Jarrett, Evgeny Saveliev, Jinsung Yoon, Paul Elbers, + Patrick Thoral, Ari Ercole, Cheng Zhang, Danielle Belgrave, and Mihaela + van~der Schaar. +\newblock Hide-and-seek privacy challenge: Synthetic data generation vs. + patient re-identification. +\newblock In {\em NeurIPS 2020 Competition and Demonstration Track}, pages + 206--215. PMLR, 2021. + +\bibitem{cgan} +Mehdi Mirza and Simon Osindero. +\newblock Conditional generative adversarial nets, 2014. + +\bibitem{dcgan} +Alec Radford, Luke Metz, and Soumith Chintala. +\newblock Unsupervised representation learning with deep convolutional + generative adversarial networks, 2016. + +\bibitem{cnn} +Waseem Rawat and Zenghui Wang. +\newblock Deep convolutional neural networks for image classification: A + comprehensive review. +\newblock {\em Neural Computation}, 29(9):2352--2449, 2017. + +\bibitem{shokri2017membership} +Reza Shokri, Marco Stronati, Congzheng Song, and Vitaly Shmatikov. +\newblock Membership inference attacks against machine learning models. +\newblock In {\em 2017 IEEE symposium on security and privacy (SP)}, pages + 3--18. IEEE, 2017. + +\bibitem{vgg16} +Karen Simonyan and Andrew Zisserman. +\newblock Very deep convolutional networks for large-scale image recognition, + 2015. + +\bibitem{song2020overlearning} +Congzheng Song and Vitaly Shmatikov. +\newblock Overlearning reveals sensitive attributes, 2020. + +\bibitem{stadler2020synthetic} +Theresa Stadler, Bristena Oprisanu, and Carmela Troncoso. +\newblock Synthetic data-a privacy mirage. +\newblock {\em arXiv preprint arXiv:2011.07018}, 2020. + +\bibitem{ctgan} +Lei Xu, Maria Skoularidou, Alfredo Cuesta-Infante, and Kalyan Veeramachaneni. +\newblock Modeling tabular data using conditional gan, 2019. + +\bibitem{yeom} +Samuel Yeom, Irene Giacomelli, Matt Fredrikson, and Somesh Jha. +\newblock Privacy risk in machine learning: Analyzing the connection to + overfitting, 2018. + +\bibitem{zhifei2017cvpr} +Zhifei Zhang, Yang Song, and Hairong Qi. +\newblock Age progression/regression by conditional adversarial autoencoder. +\newblock In {\em IEEE Conference on Computer Vision and Pattern Recognition + (CVPR)}. IEEE, 2017. + +\end{thebibliography} diff --git a/synthetic/bck/main.blg b/synthetic/bck/main.blg new file mode 100644 index 0000000..2daaee6 --- /dev/null +++ b/synthetic/bck/main.blg @@ -0,0 +1,48 @@ +This is BibTeX, Version 0.99d (TeX Live 2024/Arch Linux) +Capacity: max_strings=200000, hash_size=200000, hash_prime=170003 +The top-level auxiliary file: main.aux +The style file: plain.bst +Database file #1: biblio.bib +Warning--I didn't find a database entry for "ping2017datasynthesize" +You've used 17 entries, + 2118 wiz_defined-function locations, + 590 strings with 6960 characters, +and the built_in function-call counts, 6143 in all, are: += -- 577 +> -- 375 +< -- 4 ++ -- 148 +- -- 130 +* -- 406 +:= -- 1014 +add.period$ -- 49 +call.type$ -- 17 +change.case$ -- 116 +chr.to.int$ -- 0 +cite$ -- 17 +duplicate$ -- 221 +empty$ -- 441 +format.name$ -- 130 +if$ -- 1297 +int.to.chr$ -- 0 +int.to.str$ -- 17 +missing$ -- 11 +newline$ -- 82 +num.names$ -- 34 +pop$ -- 150 +preamble$ -- 1 +purify$ -- 99 +quote$ -- 0 +skip$ -- 189 +stack$ -- 0 +substring$ -- 237 +swap$ -- 67 +text.length$ -- 4 +text.prefix$ -- 0 +top$ -- 0 +type$ -- 68 +warning$ -- 0 +while$ -- 48 +width$ -- 19 +write$ -- 175 +(There was 1 warning) diff --git a/synthetic/bck/main.log b/synthetic/bck/main.log new file mode 100644 index 0000000..85d1842 --- /dev/null +++ b/synthetic/bck/main.log @@ -0,0 +1,827 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024/Arch Linux) (preloaded format=pdflatex 2024.6.8) 15 JUL 2024 10:57 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**main.tex +(./main.tex +LaTeX2e <2023-11-01> patch level 1 +L3 programming layer <2024-02-20> +(./IEEEtran.cls +Document Class: IEEEtran 2015/08/26 V1.8b by Michael Shell +-- See the "IEEEtran_HOWTO" manual for usage information. +-- http://www.michaelshell.org/tex/ieeetran/ +\@IEEEtrantmpdimenA=\dimen140 +\@IEEEtrantmpdimenB=\dimen141 +\@IEEEtrantmpdimenC=\dimen142 +\@IEEEtrantmpcountA=\count188 +\@IEEEtrantmpcountB=\count189 +\@IEEEtrantmpcountC=\count190 +\@IEEEtrantmptoksA=\toks17 +LaTeX Font Info: Trying to load font information for OT1+ptm on input line 5 +03. +(/usr/share/texmf-dist/tex/latex/psnfss/ot1ptm.fd +File: ot1ptm.fd 2001/06/04 font definitions for OT1/ptm. +) +-- Using 8.5in x 11in (letter) paper. +-- Using PDF output. +\@IEEEnormalsizeunitybaselineskip=\dimen143 +-- This is a 10 point document. +\CLASSINFOnormalsizebaselineskip=\dimen144 +\CLASSINFOnormalsizeunitybaselineskip=\dimen145 +\IEEEnormaljot=\dimen146 +LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <5> not available +(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090. +LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <5> not available +(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090. + +LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <7> not available +(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090. +LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <7> not available +(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090. + +LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <8> not available +(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090. +LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <8> not available +(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090. + +LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <9> not available +(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090. +LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <9> not available +(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090. + +LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <10> not available +(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090. +LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <10> not available +(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090. + +LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <11> not available +(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090. +LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <11> not available +(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090. + +LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <12> not available +(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090. +LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <12> not available +(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090. + +LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <17> not available +(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090. +LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <17> not available +(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090. + +LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <20> not available +(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090. +LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <20> not available +(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090. + +LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <24> not available +(Font) Font shape `OT1/ptm/b/n' tried instead on input line 1090. +LaTeX Font Info: Font shape `OT1/ptm/bx/it' in size <24> not available +(Font) Font shape `OT1/ptm/b/it' tried instead on input line 1090. + +\IEEEquantizedlength=\dimen147 +\IEEEquantizedlengthdiff=\dimen148 +\IEEEquantizedtextheightdiff=\dimen149 +\IEEEilabelindentA=\dimen150 +\IEEEilabelindentB=\dimen151 +\IEEEilabelindent=\dimen152 +\IEEEelabelindent=\dimen153 +\IEEEdlabelindent=\dimen154 +\IEEElabelindent=\dimen155 +\IEEEiednormlabelsep=\dimen156 +\IEEEiedmathlabelsep=\dimen157 +\IEEEiedtopsep=\skip48 +\c@section=\count191 +\c@subsection=\count192 +\c@subsubsection=\count193 +\c@paragraph=\count194 +\c@IEEEsubequation=\count195 +\abovecaptionskip=\skip49 +\belowcaptionskip=\skip50 +\c@figure=\count196 +\c@table=\count197 +\@IEEEeqnnumcols=\count198 +\@IEEEeqncolcnt=\count199 +\@IEEEsubeqnnumrollback=\count266 +\@IEEEquantizeheightA=\dimen158 +\@IEEEquantizeheightB=\dimen159 +\@IEEEquantizeheightC=\dimen160 +\@IEEEquantizeprevdepth=\dimen161 +\@IEEEquantizemultiple=\count267 +\@IEEEquantizeboxA=\box51 +\@IEEEtmpitemindent=\dimen162 +\IEEEPARstartletwidth=\dimen163 +\c@IEEEbiography=\count268 +\@IEEEtranrubishbin=\box52 +) (/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2022/05/29 v1.15 key=value parser (DPC) +\KV@toks@=\toks18 +) +(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) + +(/usr/share/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2021/08/11 v1.11 sin cos tan (DPC) +) +(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: pdftex.def on input line 107. + +(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex +)) +\Gin@req@height=\dimen164 +\Gin@req@width=\dimen165 +) +(/usr/share/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2023/05/13 v2.17o AMS math features +\@mathmargin=\skip51 + +For additional information on amsmath, use the `?' option. +(/usr/share/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2021/08/26 v2.01 AMS text + +(/usr/share/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 generic functions +\@emptytoks=\toks19 +\ex@=\dimen166 +)) +(/usr/share/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d Bold Symbols +\pmbraise@=\dimen167 +) +(/usr/share/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 2022/04/08 v2.04 operator names +) +\inf@bad=\count269 +LaTeX Info: Redefining \frac on input line 234. +\uproot@=\count270 +\leftroot@=\count271 +LaTeX Info: Redefining \overline on input line 399. +LaTeX Info: Redefining \colon on input line 410. +\classnum@=\count272 +\DOTSCASE@=\count273 +LaTeX Info: Redefining \ldots on input line 496. +LaTeX Info: Redefining \dots on input line 499. +LaTeX Info: Redefining \cdots on input line 620. +\Mathstrutbox@=\box53 +\strutbox@=\box54 +LaTeX Info: Redefining \big on input line 722. +LaTeX Info: Redefining \Big on input line 723. +LaTeX Info: Redefining \bigg on input line 724. +LaTeX Info: Redefining \Bigg on input line 725. +\big@size=\dimen168 +LaTeX Font Info: Redeclaring font encoding OML on input line 743. +LaTeX Font Info: Redeclaring font encoding OMS on input line 744. +\macc@depth=\count274 +LaTeX Info: Redefining \bmod on input line 905. +LaTeX Info: Redefining \pmod on input line 910. +LaTeX Info: Redefining \smash on input line 940. +LaTeX Info: Redefining \relbar on input line 970. +LaTeX Info: Redefining \Relbar on input line 971. +\c@MaxMatrixCols=\count275 +\dotsspace@=\muskip16 +\c@parentequation=\count276 +\dspbrk@lvl=\count277 +\tag@help=\toks20 +\row@=\count278 +\column@=\count279 +\maxfields@=\count280 +\andhelp@=\toks21 +\eqnshift@=\dimen169 +\alignsep@=\dimen170 +\tagshift@=\dimen171 +\tagwidth@=\dimen172 +\totwidth@=\dimen173 +\lineht@=\dimen174 +\@envbody=\toks22 +\multlinegap=\skip52 +\multlinetaggap=\skip53 +\mathdisplay@stack=\toks23 +LaTeX Info: Redefining \[ on input line 2953. +LaTeX Info: Redefining \] on input line 2954. +) +(/usr/share/texmf-dist/tex/latex/amscls/amsthm.sty +Package: amsthm 2020/05/29 v2.20.6 +\thm@style=\toks24 +\thm@bodyfont=\toks25 +\thm@headfont=\toks26 +\thm@notefont=\toks27 +\thm@headpunct=\toks28 +\thm@preskip=\skip54 +\thm@postskip=\skip55 +\thm@headsep=\skip56 +\dth@everypar=\toks29 +) +(/usr/share/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\symAMSa=\mathgroup4 +\symAMSb=\mathgroup5 +LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +) +(/usr/share/texmf-dist/tex/latex/algorithmicx/algpseudocode.sty +Package: algpseudocode + +(/usr/share/texmf-dist/tex/latex/base/ifthen.sty +Package: ifthen 2022/04/13 v1.1d Standard LaTeX ifthen package (DPC) +) +(/usr/share/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty +Package: algorithmicx 2005/04/27 v1.2 Algorithmicx + +Document Style algorithmicx 1.2 - a greatly improved `algorithmic' style +\c@ALG@line=\count281 +\c@ALG@rem=\count282 +\c@ALG@nested=\count283 +\ALG@tlm=\skip57 +\ALG@thistlm=\skip58 +\c@ALG@Lnr=\count284 +\c@ALG@blocknr=\count285 +\c@ALG@storecount=\count286 +\c@ALG@tmpcounter=\count287 +\ALG@tmplength=\skip59 +) +Document Style - pseudocode environments for use with the `algorithmicx' style +) (/usr/share/texmf-dist/tex/latex/algorithms/algorithm.sty +Package: algorithm 2009/08/24 v0.1 Document Style `algorithm' - floating enviro +nment + +(/usr/share/texmf-dist/tex/latex/float/float.sty +Package: float 2001/11/08 v1.3d Float enhancements (AL) +\c@float@type=\count288 +\float@exts=\toks30 +\float@box=\box55 +\@float@everytoks=\toks31 +\@floatcapt=\box56 +) +\@float@every@algorithm=\toks32 +\c@algorithm=\count289 +) +(/usr/share/texmf-dist/tex/latex/placeins/placeins.sty +Package: placeins 2005/04/18 v 2.2 +) +(/usr/share/texmf-dist/tex/latex/caption/subcaption.sty +Package: subcaption 2023/07/28 v1.6b Sub-captions (AR) + +(/usr/share/texmf-dist/tex/latex/caption/caption.sty +Package: caption 2023/08/05 v3.6o Customizing captions (AR) + +(/usr/share/texmf-dist/tex/latex/caption/caption3.sty +Package: caption3 2023/07/31 v2.4d caption3 kernel (AR) +\caption@tempdima=\dimen175 +\captionmargin=\dimen176 +\caption@leftmargin=\dimen177 +\caption@rightmargin=\dimen178 +\caption@width=\dimen179 +\caption@indent=\dimen180 +\caption@parindent=\dimen181 +\caption@hangindent=\dimen182 +Package caption Info: Unknown document class (or package), +(caption) standard defaults will be used. +Package caption Info: \@makecaption = \long macro:#1#2->\ifx \@captype \@IEEEta +blestring \footnotesize \bgroup \par \centering \@IEEEtabletopskipstrut {\norma +lfont \footnotesize #1}\\{\normalfont \footnotesize \scshape #2}\par \addvspace + {0.5\baselineskip }\egroup \@IEEEtablecaptionsepspace \else \@IEEEfigurecaptio +nsepspace \setbox \@tempboxa \hbox {\normalfont \footnotesize {#1.}\nobreakspac +e \nobreakspace #2}\ifdim \wd \@tempboxa >\hsize \setbox \@tempboxa \hbox {\nor +malfont \footnotesize {#1.}\nobreakspace \nobreakspace }\parbox [t]{\hsize }{\n +ormalfont \footnotesize \noindent \unhbox \@tempboxa #2}\else \ifCLASSOPTIONcon +ference \hbox to\hsize {\normalfont \footnotesize \hfil \box \@tempboxa \hfil } +\else \hbox to\hsize {\normalfont \footnotesize \box \@tempboxa \hfil }\fi \fi +\fi on input line 1175. +) + +Package caption Warning: Unknown document class (or package), +(caption) standard defaults will be used. +See the caption package documentation for explanation. + +\c@caption@flags=\count290 +\c@continuedfloat=\count291 +Package caption Info: float package is loaded. +) +Package caption Info: New subtype `subfigure' on input line 238. +\c@subfigure=\count292 +Package caption Info: New subtype `subtable' on input line 238. +\c@subtable=\count293 +) (/usr/share/texmf-dist/tex/latex/pgf/frontendlayer/tikz.sty +(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty +(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex +\pgfutil@everybye=\toks33 +\pgfutil@tempdima=\dimen183 +\pgfutil@tempdimb=\dimen184 +) +(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def +\pgfutil@abb=\box57 +) +(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex +(/usr/share/texmf-dist/tex/generic/pgf/pgf.revision.tex) +Package: pgfrcs 2023-01-15 v3.1.10 (3.1.10) +)) +Package: pgf 2023-01-15 v3.1.10 (3.1.10) + +(/usr/share/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +(/usr/share/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex +Package: pgfsys 2023-01-15 v3.1.10 (3.1.10) + +(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +\pgfkeys@pathtoks=\toks34 +\pgfkeys@temptoks=\toks35 + +(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfiltered.code.te +x +\pgfkeys@tmptoks=\toks36 +)) +\pgf@x=\dimen185 +\pgf@y=\dimen186 +\pgf@xa=\dimen187 +\pgf@ya=\dimen188 +\pgf@xb=\dimen189 +\pgf@yb=\dimen190 +\pgf@xc=\dimen191 +\pgf@yc=\dimen192 +\pgf@xd=\dimen193 +\pgf@yd=\dimen194 +\w@pgf@writea=\write3 +\r@pgf@reada=\read2 +\c@pgf@counta=\count294 +\c@pgf@countb=\count295 +\c@pgf@countc=\count296 +\c@pgf@countd=\count297 +\t@pgf@toka=\toks37 +\t@pgf@tokb=\toks38 +\t@pgf@tokc=\toks39 +\pgf@sys@id@count=\count298 + (/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg +File: pgf.cfg 2023-01-15 v3.1.10 (3.1.10) +) +Driver file for pgf: pgfsys-pdftex.def + +(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def +File: pgfsys-pdftex.def 2023-01-15 v3.1.10 (3.1.10) + +(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def +File: pgfsys-common-pdf.def 2023-01-15 v3.1.10 (3.1.10) +))) +(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex +File: pgfsyssoftpath.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfsyssoftpath@smallbuffer@items=\count299 +\pgfsyssoftpath@bigbuffer@items=\count300 +) +(/usr/share/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex +File: pgfsysprotocol.code.tex 2023-01-15 v3.1.10 (3.1.10) +)) +(/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2023/11/15 v3.01 LaTeX color extensions (UK) + +(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg +File: color.cfg 2016/01/02 v1.6 sample color configuration +) +Package xcolor Info: Driver file: pdftex.def on input line 274. + +(/usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx) +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1350. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1354. +Package xcolor Info: Model `RGB' extended on input line 1366. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1368. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1369. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1370. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1371. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1372. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1373. +) +(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex +Package: pgfcore 2023-01-15 v3.1.10 (3.1.10) + +(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) +(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex +\pgfmath@dimen=\dimen195 +\pgfmath@count=\count301 +\pgfmath@box=\box58 +\pgfmath@toks=\toks40 +\pgfmath@stack@operand=\toks41 +\pgfmath@stack@operation=\toks42 +) +(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex) +(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex) +(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code +.tex) +(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex) +(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.te +x) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex) +(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex) +(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex) +(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics +.code.tex) (/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex) +(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex +\c@pgfmathroundto@lastzeros=\count302 +)) +(/usr/share/texmf-dist/tex/generic/pgf/math/pgfint.code.tex) +(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex +File: pgfcorepoints.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@picminx=\dimen196 +\pgf@picmaxx=\dimen197 +\pgf@picminy=\dimen198 +\pgf@picmaxy=\dimen199 +\pgf@pathminx=\dimen256 +\pgf@pathmaxx=\dimen257 +\pgf@pathminy=\dimen258 +\pgf@pathmaxy=\dimen259 +\pgf@xx=\dimen260 +\pgf@xy=\dimen261 +\pgf@yx=\dimen262 +\pgf@yy=\dimen263 +\pgf@zx=\dimen264 +\pgf@zy=\dimen265 +) +(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex +File: pgfcorepathconstruct.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@path@lastx=\dimen266 +\pgf@path@lasty=\dimen267 +) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex +File: pgfcorepathusage.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@shorten@end@additional=\dimen268 +\pgf@shorten@start@additional=\dimen269 +) +(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex +File: pgfcorescopes.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfpic=\box59 +\pgf@hbox=\box60 +\pgf@layerbox@main=\box61 +\pgf@picture@serial@count=\count303 +) +(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex +File: pgfcoregraphicstate.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgflinewidth=\dimen270 +) +(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransformations.code.t +ex +File: pgfcoretransformations.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@pt@x=\dimen271 +\pgf@pt@y=\dimen272 +\pgf@pt@temp=\dimen273 +) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.code.tex +File: pgfcorequick.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex +File: pgfcoreobjects.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.te +x +File: pgfcorepathprocessing.code.tex 2023-01-15 v3.1.10 (3.1.10) +) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex +File: pgfcorearrows.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfarrowsep=\dimen274 +) +(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex +File: pgfcoreshade.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@max=\dimen275 +\pgf@sys@shading@range@num=\count304 +\pgf@shadingcount=\count305 +) +(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex +File: pgfcoreimage.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex +File: pgfcoreexternal.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfexternal@startupbox=\box62 +) +(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex +File: pgfcorelayers.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex +File: pgfcoretransparency.code.tex 2023-01-15 v3.1.10 (3.1.10) +) (/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex +File: pgfcorepatterns.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/share/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex +File: pgfcorerdf.code.tex 2023-01-15 v3.1.10 (3.1.10) +))) +(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex +File: pgfmoduleshapes.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfnodeparttextbox=\box63 +) +(/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex +File: pgfmoduleplot.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty +Package: pgfcomp-version-0-65 2023-01-15 v3.1.10 (3.1.10) +\pgf@nodesepstart=\dimen276 +\pgf@nodesepend=\dimen277 +) +(/usr/share/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty +Package: pgfcomp-version-1-18 2023-01-15 v3.1.10 (3.1.10) +)) +(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgffor.sty +(/usr/share/texmf-dist/tex/latex/pgf/utilities/pgfkeys.sty +(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex)) +(/usr/share/texmf-dist/tex/latex/pgf/math/pgfmath.sty +(/usr/share/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex)) +(/usr/share/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex +Package: pgffor 2023-01-15 v3.1.10 (3.1.10) +\pgffor@iter=\dimen278 +\pgffor@skip=\dimen279 +\pgffor@stack=\toks43 +\pgffor@toks=\toks44 +)) +(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex +Package: tikz 2023-01-15 v3.1.10 (3.1.10) + +(/usr/share/texmf-dist/tex/generic/pgf/libraries/pgflibraryplothandlers.code.te +x +File: pgflibraryplothandlers.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@plot@mark@count=\count306 +\pgfplotmarksize=\dimen280 +) +\tikz@lastx=\dimen281 +\tikz@lasty=\dimen282 +\tikz@lastxsaved=\dimen283 +\tikz@lastysaved=\dimen284 +\tikz@lastmovetox=\dimen285 +\tikz@lastmovetoy=\dimen286 +\tikzleveldistance=\dimen287 +\tikzsiblingdistance=\dimen288 +\tikz@figbox=\box64 +\tikz@figbox@bg=\box65 +\tikz@tempbox=\box66 +\tikz@tempbox@bg=\box67 +\tikztreelevel=\count307 +\tikznumberofchildren=\count308 +\tikznumberofcurrentchild=\count309 +\tikz@fig@count=\count310 + (/usr/share/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex +File: pgfmodulematrix.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfmatrixcurrentrow=\count311 +\pgfmatrixcurrentcolumn=\count312 +\pgf@matrix@numberofcolumns=\count313 +) +\tikz@expandcount=\count314 + +(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary +topaths.code.tex +File: tikzlibrarytopaths.code.tex 2023-01-15 v3.1.10 (3.1.10) +))) (/usr/share/texmf-dist/tex/latex/cite/cite.sty +LaTeX Info: Redefining \cite on input line 302. +LaTeX Info: Redefining \nocite on input line 332. +Package: cite 2015/02/27 v 5.5 +) +(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary +fit.code.tex +File: tikzlibraryfit.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary +shapes.code.tex +File: tikzlibraryshapes.code.tex 2023-01-15 v3.1.10 (3.1.10) + +(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary +shapes.geometric.code.tex +File: tikzlibraryshapes.geometric.code.tex 2023-01-15 v3.1.10 (3.1.10) + +(/usr/share/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.geomet +ric.code.tex +File: pgflibraryshapes.geometric.code.tex 2023-01-15 v3.1.10 (3.1.10) +)) +(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary +shapes.misc.code.tex +File: tikzlibraryshapes.misc.code.tex 2023-01-15 v3.1.10 (3.1.10) + +(/usr/share/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.misc.c +ode.tex +File: pgflibraryshapes.misc.code.tex 2023-01-15 v3.1.10 (3.1.10) +)) +(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary +shapes.symbols.code.tex +File: tikzlibraryshapes.symbols.code.tex 2023-01-15 v3.1.10 (3.1.10) + +(/usr/share/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.symbol +s.code.tex +File: pgflibraryshapes.symbols.code.tex 2023-01-15 v3.1.10 (3.1.10) +)) +(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary +shapes.arrows.code.tex +File: tikzlibraryshapes.arrows.code.tex 2023-01-15 v3.1.10 (3.1.10) + +(/usr/share/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.arrows +.code.tex +File: pgflibraryshapes.arrows.code.tex 2023-01-15 v3.1.10 (3.1.10) +)) +(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary +shapes.callouts.code.tex +(/usr/share/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.callou +ts.code.tex)) +(/usr/share/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary +shapes.multipart.code.tex +File: tikzlibraryshapes.multipart.code.tex 2023-01-15 v3.1.10 (3.1.10) + +(/usr/share/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.multip +art.code.tex +File: pgflibraryshapes.multipart.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfnodepartlowerbox=\box68 +\pgfnodeparttwobox=\box69 +\pgfnodepartthreebox=\box70 +\pgfnodepartfourbox=\box71 +\pgfnodeparttwentybox=\box72 +\pgfnodepartnineteenbox=\box73 +\pgfnodeparteighteenbox=\box74 +\pgfnodepartseventeenbox=\box75 +\pgfnodepartsixteenbox=\box76 +\pgfnodepartfifteenbox=\box77 +\pgfnodepartfourteenbox=\box78 +\pgfnodepartthirteenbox=\box79 +\pgfnodeparttwelvebox=\box80 +\pgfnodepartelevenbox=\box81 +\pgfnodeparttenbox=\box82 +\pgfnodepartninebox=\box83 +\pgfnodeparteightbox=\box84 +\pgfnodepartsevenbox=\box85 +\pgfnodepartsixbox=\box86 +\pgfnodepartfivebox=\box87 +))) +\c@definition=\count315 +\c@theorem=\count316 +\c@lemma=\count317 +\c@corollary=\count318 + (/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +File: l3backend-pdftex.def 2024-02-20 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count319 +\l__pdf_internal_box=\box88 +) (./main.aux) +\openout1 = `main.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 27. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 27. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 27. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 27. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 27. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 27. +LaTeX Font Info: ... okay on input line 27. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 27. +LaTeX Font Info: ... okay on input line 27. + +-- Lines per column: 58 (exact). +(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count320 +\scratchdimen=\dimen289 +\scratchbox=\box89 +\nofMPsegments=\count321 +\nofMParguments=\count322 +\everyMPshowfont=\toks45 +\MPscratchCnt=\count323 +\MPscratchDim=\dimen290 +\MPnumerator=\count324 +\makeMPintoPDFobject=\count325 +\everyMPtoPDFconversion=\toks46 +) (/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf +Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 +85. + +(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +Package caption Info: Begin \AtBeginDocument code. +Package caption Info: End \AtBeginDocument code. + + +LaTeX Warning: No \author given. + + +LaTeX Warning: No \author given. + + +LaTeX Warning: No \author given. + +(./introduction.tex) (./background.tex +LaTeX Font Info: Trying to load font information for U+msa on input line 6. + +(/usr/share/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Trying to load font information for U+msb on input line 6. + +(/usr/share/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +)) (./methodology.tex [1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}{/us +r/share/texmf-dist/fonts/enc/dvips/base/8r.enc} + + +] +Underfull \hbox (badness 10000) in paragraph at lines 68--73 +[]\OT1/ptm/m/n/10 For CelebA we use Py-torch's im-ple-men-ta-tion of + [] + +(./figure/tikz/ovre.tex (./figure/tikz/data.tex)) [2] +
+File: figure/method/overfit/quality.pdf Graphic file (type pdf) + +Package pdftex.def Info: figure/method/overfit/quality.pdf used on input line +127. +(pdftex.def) Requested size: 113.39923pt x 79.6984pt. +
+File: figure/method/overfit/utility.pdf Graphic file (type pdf) + +Package pdftex.def Info: figure/method/overfit/utility.pdf used on input line +131. +(pdftex.def) Requested size: 113.39923pt x 81.95044pt. +
+File: figure/method/overfit/mia.pdf Graphic file (type pdf) + +Package pdftex.def Info: figure/method/overfit/mia.pdf used on input line 135. + +(pdftex.def) Requested size: 113.39923pt x 79.26926pt. +
+File: figure/method/overfit/aia.pdf Graphic file (type pdf) + +Package pdftex.def Info: figure/method/overfit/aia.pdf used on input line 139. + +(pdftex.def) Requested size: 113.39923pt x 79.26926pt. + +(./figure/tikz/data_split/split.tex (./figure/tikz/data.tex))) [3 <./figure/met +hod/overfit/quality.pdf> <./figure/method/overfit/utility.pdf> <./figure/method +/overfit/mia.pdf> <./figure/method/overfit/aia.pdf>] (./results.tex +
+File: figure/result/adult/utility.pdf Graphic file (type pdf) + +Package pdftex.def Info: figure/result/adult/utility.pdf used on input line 11 +. +(pdftex.def) Requested size: 113.39923pt x 83.58601pt. +File: figure/result/adult/utility.pdf Graphic file (type pdf) + +Package pdftex.def Info: figure/result/adult/utility.pdf used on input line 15 +. +(pdftex.def) Requested size: 113.39923pt x 83.58601pt. +
+File: figure/result/adult/mia.pdf Graphic file (type pdf) + +Package pdftex.def Info: figure/result/adult/mia.pdf used on input line 29. +(pdftex.def) Requested size: 113.39923pt x 86.56377pt. +File: figure/result/adult/mia.pdf Graphic file (type pdf) + +Package pdftex.def Info: figure/result/adult/mia.pdf used on input line 33. +(pdftex.def) Requested size: 113.39923pt x 86.56377pt. +
+File: figure/result/adult/aia.pdf Graphic file (type pdf) + +Package pdftex.def Info: figure/result/adult/aia.pdf used on input line 44. +(pdftex.def) Requested size: 113.39923pt x 83.58601pt. +File: figure/result/adult/aia.pdf Graphic file (type pdf) + +Package pdftex.def Info: figure/result/adult/aia.pdf used on input line 48. +(pdftex.def) Requested size: 113.39923pt x 83.58601pt. +) +(./related.tex + +LaTeX Warning: Citation `ping2017datasynthesize' on page 4 undefined on input l +ine 10. + +[4 <./figure/result/adult/utility.pdf> <./figure/result/adult/mia.pdf> <./figur +e/result/adult/aia.pdf>]) (./conclusion.tex) (./main.bbl) [5] (./main.aux) + *********** +LaTeX2e <2023-11-01> patch level 1 +L3 programming layer <2024-02-20> + *********** + + +LaTeX Warning: There were undefined references. + + ) +Here is how much of TeX's memory you used: + 18095 strings out of 476047 + 379121 string characters out of 5792627 + 1962187 words of memory out of 5000000 + 39876 multiletter control sequences out of 15000+600000 + 597141 words of font info for 109 fonts, out of 8000000 for 9000 + 14 hyphenation exceptions out of 8191 + 84i,9n,93p,647b,893s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on main.pdf (5 pages, 216102 bytes). +PDF statistics: + 321 PDF objects out of 1000 (max. 8388607) + 90 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 500000) + 48 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/synthetic/bck/main.pdf b/synthetic/bck/main.pdf new file mode 100644 index 0000000..da7ddd4 Binary files /dev/null and b/synthetic/bck/main.pdf differ diff --git a/synthetic/bck/main.tex b/synthetic/bck/main.tex new file mode 100644 index 0000000..90ba3a2 --- /dev/null +++ b/synthetic/bck/main.tex @@ -0,0 +1,18 @@ +\section{Introduction} +\input{synthetic/introduction} + +\section{Background} +\input{synthetic/background} + +\section{Methodology} +\input{synthetic/methodology} + +\section{Results} +\label{sec:res} +\input{synthetic/results} + +\section{Related work} +\input{synthetic/related} + +\section{Conclusion} +\input{synthetic/conclusion} diff --git a/synthetic/bck/main.toc b/synthetic/bck/main.toc new file mode 100644 index 0000000..72e6eff --- /dev/null +++ b/synthetic/bck/main.toc @@ -0,0 +1,31 @@ +\contentsline {section}{\numberline {1}Introduction}{3}{}% +\contentsline {section}{\numberline {2}Finit classification}{3}{}% +\contentsline {subsection}{\numberline {2.1}Notations}{3}{}% +\contentsline {subsection}{\numberline {2.2}Problem setup}{3}{}% +\contentsline {subsection}{\numberline {2.3}From a problem on elements to a problem on indices}{4}{}% +\contentsline {subsection}{\numberline {2.4}Building a classification algorithm on $B_{m\rightarrow n}$}{7}{}% +\contentsline {subsection}{\numberline {2.5}Extention to unseen data}{11}{}% +\contentsline {section}{\numberline {3}Applications}{12}{}% +\contentsline {subsection}{\numberline {3.1}Attribute inference attack}{12}{}% +\contentsline {subsection}{\numberline {3.2}Painting classification}{12}{}% +\contentsline {subsection}{\numberline {3.3}Lora}{12}{}% +\contentsline {subsection}{\numberline {3.4}Tabular data}{12}{}% +\contentsline {subsection}{\numberline {3.5}Movie recommender system}{14}{}% +\contentsline {subsection}{\numberline {3.6}labeled faces in the wild}{14}{}% +\contentsline {section}{\numberline {4}Computing cost}{14}{}% +\contentsline {subsection}{\numberline {4.1}Cost of training}{14}{}% +\contentsline {subsection}{\numberline {4.2}Cost of inference}{14}{}% +\contentsline {section}{\numberline {5}Decentralization}{14}{}% +\contentsline {subsection}{\numberline {5.1}Sharing indexes}{14}{}% +\contentsline {subsection}{\numberline {5.2}Sharing matrix of probability law}{14}{}% +\contentsline {section}{\numberline {6}Privacy}{14}{}% +\contentsline {subsection}{\numberline {6.1}Private indexing}{14}{}% +\contentsline {subsection}{\numberline {6.2}Differential privacy}{14}{}% +\contentsline {section}{\numberline {7}Fairness}{14}{}% +\contentsline {subsection}{\numberline {7.1}Preprocessing}{14}{}% +\contentsline {subsection}{\numberline {7.2}Inprocessing and postprocessing}{14}{}% +\contentsline {section}{\numberline {8}Explainability}{14}{}% +\contentsline {subsection}{\numberline {8.1}Transparancy}{14}{}% +\contentsline {subsection}{\numberline {8.2}Interpretability}{14}{}% +\contentsline {subsection}{\numberline {8.3}Explainability}{14}{}% +\contentsline {section}{\numberline {9}Conclusion}{14}{}% diff --git a/synthetic/bck/methodology.tex b/synthetic/bck/methodology.tex new file mode 100644 index 0000000..3981d78 --- /dev/null +++ b/synthetic/bck/methodology.tex @@ -0,0 +1,188 @@ +In this section we discuss the experimental approach we take to answer the research questions asked in the intorduction in Section~\ref{sec:question}. +We begin by giving an overview of the datasets and the generators functions that we study. +The generators outputs another dataset that we use to train the target model, hence we now explain the types of classifier models taken into consideration in our study. +Then we jump into a section about attribute inference attack and membership inference attack. +In Section~\ref{sec:ovr} we discuss a specifity of our methodology: how we control the level of overfitting of the generators and the targets models. +Finally, we show a graphical representation of the overall process, from the real dataset to the experimental results in Figure~\ref{fig:split}. + +\subsection{Datasets} +We treat two types of dataset: a tabular one and and image one. +It allows us to experiments with various types of generators (cf. Section~\ref{sec:gen}) and target models (cf. Section~\ref{sec:target}). +\subsubsection{US census (Adult)} +The US census is a snapchot of the US adult population that is done every ten year by the US gouvernement\footnote{www.census.gov}. +It produces a database where each row is an individual and each column is an attribute that discribe pepole. +In the rest of the paper we refer to this dataset as Adult. + +The classification task is to predict whether or not the person is employed. + +The sensitive attribute we study for this dataset is the race. +The race in the US census is encoded by nine classes, we transform it into a binary attribute encoding black with a one (1) and all others with a zero (0). +Hence, in an attribute inference attack setup, the goal is to infer whether or not an individual is a black person. + +In this paper, we do not directly download the US census but instead use an instancation of it: Retiring adult. +Retiring adult~\cite{ding2021retiring} is a formating of the US census made to interface frictionlessly with commun python tools such as pandas, numpy or scikit-learn. +It allows us to select states, year, classification and sensitive attributes. +We restrict ourselvs to the Alabama census of 2018 for practical reasons: mainly storage and computing time limitations. +This subset contains the records of 47,777 individuals. + +\subsubsection{CelebA} +This images dataset is composed of 202,600 pictures of faces~\cite{zhifei2017cvpr}. +We use an instanciation of CelebA provided by Pytorch. + +The classification atask is to predit if an individual has blond hair or not. + +The sensitive attribute is whether the individual in the picture is a male or not. + +\subsection{Generator training} +\label{sec:gen} +In our work, we study two variants of GAN: +DCGAN~\cite{dcgan} and CTGAN~\cite{ctgan}. +The former makes use of deep convolutional neural network which makes it fit to generate images. +The later is taylored toward tabular data where distinction are made between categorical and quantitative attributes. + +\subsubsection{CTGAN} +CTGAN~\cite{ctgan} is a conditional GAN taylored for heterogenous tabular data. +It is made to take in consideration quantitative and qualitative attributes. +For instance, the job attribute is qualitative where the height is quantitative. +In our experiments we use an implementation of CTGAN by the Synthetic Data Vault (SDV)~\footnote{sdv.dev}. + +We use CTGAN as the generator for Adult. +We use SDV's autmatic way of generating metadata for tabular dataset. +Those metadata are necessary for CTGAN to perform at its best because they indicate the type of attribute. + +\subsubsection{DCGAN} +DCGAN~\cite{dcgan} is a GAN in which both the generator and the discriminator make use of deep convolutional neural network. +Convolutional layers in neural networks are fit for image task and are comonly used~\cite{cnn}. + +To train the target model we need label for each generated image. +Hence we make the DCGAN conditional~\cite{cgan} by adding en embedding layer in both de generator and the discriminator. +In the generation process, once the GAN is trained, this embeding allows us to specify the class label of the image we want to generate. +We not only ask a realistic image, but a realistic image of a person with blond hair, in the case of hair color beeing the classification task. + +\subsection{Predictor training} +\label{sec:target} +We use a different type of models for each dataset. +For Adult we use a random forest classifier with a hundred trees. +We use scikit-learn's implementation of random forest. + +For CelebA we use Pytorch's implementation of VGG16~\cite{vgg16}. +Instead of training this model from scratch as we do for Adult, we use transfer learning. +This method consisit in initializing the neural network with already trained weights. +We use weights provided by Pytorch. +Before we start training, we replace the last layer of VGG16 by a linear layer with two neurons to adjust for our classification task. + +To evaluate a classification task we use the balanced accuracy. +This value is definded by the following expression: +\begin{equation*} +\frac{P(\hat{Y}=0|Y=0) + P(\hat{Y}=1|Y=1)}{2} +\end{equation*} +Where $\hat{Y}$ is the prediction of the machine learning classifier and $Y$ is the ground truth: the real label of the data record. +The balanced accuracy is a well fit metric for our study because one classe is not more sensitive then the other and this metric is not impacted by class imbalance. +Hence we exclude other metrics such as, accuracy, precision, recall, etc. +%\subsubsection{Random forest classifier} +%\subsubsection{Convolutional neural network} + +\subsection{Attack training} +\subsubsection{Attribute inference attack (AIA)} +\subsubsection{Membership inference attack (MIA)} +To perform MIA we do not use shadow models but rather adopt an approach similar to Yeom et all~\cite{yeom}. +We consider the attacker already has a dataset of the losses with their coresponding membership status ($m$ or $\bar{m}$). +Hence our methodology gives an upper bound with respect to shadow models. +Because our study focuses on synthetic data, the members are the points used to train the generator and not the points used to train de target model. + +\subsection{Overfitting control} +MIA attacks usualy give low results in regular setups, especialy for low false positive rates~\cite{stadler2020synthetic}. +We artificialy increase the MIA risk by using the OVR CTRL function +because our study is not on the MIA risk of a particuliar dataset and architectur, but rather on the risk of using synthetic data over real data. +\label{sec:ovr} +\begin{figure} + \centering + \input{synthetic/figure/tikz/ovre} + \caption{In this synthetic/figure we detail the OVR CTRL function. + This function control the overfitting of the target model. + It takes a dataset of size at least $N$ and output a dataset of size $M$. + First, we sample $N$ rows denoted $r_0,\cdots,r_{N-1}$ from the input dataset. + Second, we repeat the rows $\lfloor\frac{M}{N}\rfloor$ times. + Finaly we shuffle the repeated rows.} + \label{fig:ovr} +\end{figure} + +Before using the real data to train the generator, we apply the OVR CTRL function to it. +This function controls the overfitting of the generator through sampling, repetition and shuffling. +We describe in details the internals of this functions in Figure~\ref{fig:ovr}. +OVR CTRL duplicates $N$ datas points to create a dataset of $M$ points. +When $N$ is smaller then $M$, each data point is seen multiple times at each training epoch. + +We demonstrate empiricaly that the target model overfits more for certain values of $N$. +We observre in Figure~\ref{fig:tune_ovr} that, for Adult, +for 5000 different points the utility and the quality score of the synthetic data are high (above 0.7 of balanced accuracy) while achieving an MIA of 0.54 balanced accuracy which indicates leakage of the membership status. +Hence we chose to use 5000 different data points repeated over 100000 samples. + +We apply the same methodology to consynthetic/figure OVR CTRL for CelebA: +we use 50000 different images repeated over 100000 samples. + +\begin{figure} + \centering + \begin{subfigure}{0.45\linewidth} + \includegraphics[width=\textwidth]{synthetic/figure/method/overfit/quality.pdf} + \caption{Quality of the synthetic data} + \end{subfigure} + \begin{subfigure}{0.45\linewidth} + \includegraphics[width=\textwidth]{synthetic/figure/method/overfit/utility.pdf} + \caption{Utility of the synthetic data} + \end{subfigure} + \begin{subfigure}{0.45\linewidth} + \includegraphics[width=\textwidth]{synthetic/figure/method/overfit/mia.pdf} + \caption{Sensitivity to membership inference attack of the synthetic data} + \end{subfigure} + \begin{subfigure}{0.45\linewidth} + \includegraphics[width=\textwidth]{synthetic/figure/method/overfit/aia.pdf} + \caption{Sensitivity to attribute inference attack of the synthetic data} + \end{subfigure} + \caption{Methodology for finding an amount of repetition that both achieve satisfying utility and a high sensitivity to MIA. + We use a total number of 100000 points. + In this experiment the only generator used is CTGAN. + The results presented are for the Adult dataset but we apply the same process for CelebA using DCGAN. + } + + \label{fig:tune_ovr} +\end{figure} +\subsection{Data pipeline} +In this section, we describe how the datasets are handeled through our experimental process. +We also provide a visual representation of this process in Figure~\ref{fig:split}. +We begin with the real data the we split into a training ($m$) and an evaluation set ($\bar{m}$). +The training set goes through the function OVR CTRL which controls the overfitting level of the target model and the generator. +The training set trains the generator model, if the generator is the identity, $m$ is also the output of the generator. +We use the output of the generator to train the target model and we evalute its utility using only $\bar{m}$: unseen data. +The output of the target model on $\bar{m}$ is refered as "prediction" in Figure~\ref{fig:split}. + +In addition of using prediction for evaluation, we build the AIA dataset with it, assuring the threat model related to this attack. +We then split the AIA datset to train and evaluate the AIA model. + +Finally, we run the MIA represented in the bottom part of Figure~\ref{fig:split}. +In addition of prediction, the target model outputs the losses of $m$ and $\bar{m}$ which we use to bluid the MIA dataset. +Similarily to AIA, we split the MIA dataset to train and evaluate the MIA model. + +Each one the split is repeated five times in a corss-validation setting. +\label{sec:data} +\begin{figure} +\input{synthetic/figure/tikz/data_split/split} + \caption{This synthetic/figure presents the data splits and subsets used to compute results. + It is a representation of the whole methodology described in this sections. + The reader may start on the top left corner, with the real data. + The rectangle boxes represents functions where the inputs are incoming arrows and the outputs outcomings arrows. + In the case of trainable functions such as machine learning models, we indicate that an input is the training data with the label "training". + We use a similar notation for evaluation. + } + \label{fig:split} +\end{figure} + +\section{Comparisons between synthetic and real data} +In Section~\ref{sec:res}, we compare metrics computed using two generator for each dataset: the identity to try the pipeline with real data and a GAN to try the pipline with synthetic data. +In each of the following experiments, when comparing results, every parameters are the same exept for the generator used. +It allows us to attribute observed significativs differences between metrics to solely the usage of synthetic or real data. + +We repeat every experiment with cross validation, hence utility results are computed five times and MIA and AIA results are computed 25 times. +We display the resultes in the form of boxplots and we decide if the gape between two boxplots is significant or not using an analysis of variance (anova). +In this test the null hypothesis is: The results from real and synthetic data have the same mean. +If the p-value of the Fisher test is less than 0.01 we reject the null hypothesis and conclude that using synthetic data over real data has an impact. diff --git a/synthetic/bck/pdfcompress.sh b/synthetic/bck/pdfcompress.sh new file mode 100755 index 0000000..54c3555 --- /dev/null +++ b/synthetic/bck/pdfcompress.sh @@ -0,0 +1 @@ +gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=compressed_PDF_file.pdf $1 diff --git a/synthetic/bck/related.tex b/synthetic/bck/related.tex new file mode 100644 index 0000000..20e9b0c --- /dev/null +++ b/synthetic/bck/related.tex @@ -0,0 +1,38 @@ +The literature on the privacy of synthetic data focuses on a different yet related problem. +In our work, the synthetic data is not released to the public, it is used as a proxy in between the real data and the target model. +In countrary, the literature uses synthetic data as a way to releas a dataset to third parties. +The goal of this endeavour is to circomvent legislation on personal data~\cite{bellovin2019privacy}. +Previous work shows that releasing synthetic data instad of the real data does not protect against reidentification nor attribute linkage~\cite{stadler2020synthetic}. + +Bellocin et all.~\cite{bellovin2019privacy} discuss the legal aspect of sharing synthetic data over sharing the real data. +They come to the conclusion that a court will not allow the disclosuer of synthetic data because numerous examples show that infering private attributes of the real data is possible. +They hint that using differential privacy may lead to legislation allowing synthetic data release. +For instance, Ping et all.~\cite{ping2017datasynthesize} use the GreddyBayes algorithm for tabular data in which they introduce differentical privacy. + +%This conclusion transfers to our work because we have shown that using synthetic data to train a model does not full protect againts privacy attack. +%Datasynthesizer: privacy preserving synthetic datasets~\cite{ping2017datasynthesizer}. +%Towards improving privacy of synthetic datasets~\cite{kuppa2021towards}. +%User-Driven Synthetic Dataset Generation with Quantifiable Differential Privacy~\cite{tai2023user}. + + +%Stadler et all~\cite{stadler2020synthetic} focus on releasing to third parties a genertad synthetic dataset instead of the real dataset. +%In countrary to our work where we consider that the generated synthetic dataset is not released but is used to train a machine learning model. +%The study two privacy risks: Reidentification via linkaged and attribute disclosure. +%Reidentification via linkage is somwhat similar to membership inference attack as this kind of attack aims at inferfing if a data record has been used to generated the synthetic dataset. +%Attribute disclosure is closer to attribute inference in the sense that an attacker aims to infer sensitive attribute of user's data. +%The main difference with Stadler et all and our work is that we add in between the synthetic dataset and the attacker a trained machine learning model and the attacker has only a black box acces to this model. +%In our setup, the synthetic dataset is not directly accessible to the attacker. +%The sensitive informations contained in the real dataset are filtred twice: by the generation process and then by the training of the target model. +%In Stadler et all, the sensitive informations are filterd only by the generation process. +% +%Stadler et all show that using synthetic data does not protect user's privacy against neither linkage nor attribute disclosure. +%Our conclusion is that using a synthetic dataset to train a machine learning model does not protect user's privacy against adversaries with black box access to this model. +%Hence Stadlr et all and our work are aligned in showing that synthetic datasets are not a guaranted protection to user's personal data. + +Jordon et all~\cite{jordon2021hide} state that generativ approaches can be used to hide the membership status. +Their contribution consists in a data aonymisation challange where with two track. +The first has to produce an algorithm that generates synthetic data that hides the membership status. +The second produces an algorithm that infers (i.e. an attack) the membership status using synthetic data generated from the algorithms of the first track. +Sadly, their results remains inconclusive because the participants of the first track submited their work to closely to the deadline which did not leave enough time for the attacker to develop tailored attacks. + + diff --git a/synthetic/bck/results.tex b/synthetic/bck/results.tex new file mode 100644 index 0000000..2d225a5 --- /dev/null +++ b/synthetic/bck/results.tex @@ -0,0 +1,53 @@ +In this section we analyse the impact of using syhthetic data instead of real data on MIA and AIA. +Section~\ref{sec:uti} presents the utilisy of the target. +This control factor allows us to assess that every model has learned some level of information and is not random guessing the label. + +\subsection{Utility} +\label{sec:uti} + +\begin{figure} + \centering + \begin{subfigure}{0.45\linewidth} + \includegraphics[width=\textwidth]{synthetic/figure/result/adult/utility.pdf} + \caption{Adult} + \end{subfigure} + \begin{subfigure}{0.45\linewidth} + \includegraphics[width=\textwidth]{synthetic/figure/result/adult/utility.pdf} + \caption{CelebA} + \end{subfigure} + \caption{Utility of the target model in terms of balanced accuracy evaluated on unseen data. + The "Real" label refers to a generator equal to identity, hence the synthetic data used to train the target model is the real data. + THe "Synthetic" label refers to a CGAN generator for Adult and CTGAN for CelebA, hence the synthetic data are generated sampled according to a distribution learned by the genrator model. + In this case the target model is not trained on real date.} +\end{figure} +Using synthetic datatset degrades the utility of the predictor. + +\subsection{Membership inference attack} +\begin{figure} + \centering + \begin{subfigure}{0.45\linewidth} + \includegraphics[width=\textwidth]{synthetic/figure/result/adult/mia.pdf} + \caption{Adult} + \end{subfigure} + \begin{subfigure}{0.45\linewidth} + \includegraphics[width=\textwidth]{synthetic/figure/result/adult/mia.pdf} + \caption{CelebA} + \end{subfigure} + \caption{Success of the MIA in terms of balanced accuracy evaluated on the Train part of MIA dataset.} +\end{figure} +Using synthetic dataset slightly degrades the success of membership inference attack. + +\subsection{Attribute inference attack} +\begin{figure} + \centering + \begin{subfigure}{0.45\linewidth} + \includegraphics[width=\textwidth]{synthetic/figure/result/adult/aia.pdf} + \caption{Adult} + \end{subfigure} + \begin{subfigure}{0.45\linewidth} + \includegraphics[width=\textwidth]{synthetic/figure/result/adult/aia.pdf} + \caption{CelebA} + \end{subfigure} + \caption{Success of the AIA in terms of balanced accuracy evaluated on the Train part of AIA dataset.} +\end{figure} +Using synthetic dataset does not have an impact on the success of attrivute inference atttack. diff --git a/synthetic/bck/template/Conference-LaTeX-template_10-17-19/.DS_Store b/synthetic/bck/template/Conference-LaTeX-template_10-17-19/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/synthetic/bck/template/Conference-LaTeX-template_10-17-19/.DS_Store differ diff --git a/synthetic/bck/template/Conference-LaTeX-template_10-17-19/IEEEtran.cls b/synthetic/bck/template/Conference-LaTeX-template_10-17-19/IEEEtran.cls new file mode 100644 index 0000000..905a10c --- /dev/null +++ b/synthetic/bck/template/Conference-LaTeX-template_10-17-19/IEEEtran.cls @@ -0,0 +1,6347 @@ +%% +%% IEEEtran.cls 2015/08/26 version V1.8b +%% +%% This is the IEEEtran LaTeX class for authors of the Institute of +%% Electrical and Electronics Engineers (IEEE) Transactions journals and +%% conferences. +%% +%% Support sites: +%% http://www.michaelshell.org/tex/ieeetran/ +%% http://www.ctan.org/pkg/ieeetran +%% and +%% http://www.ieee.org/ +%% +%% Based on the original 1993 IEEEtran.cls, but with many bug fixes +%% and enhancements (from both JVH and MDS) over the 1996/7 version. +%% +%% +%% Contributors: +%% Gerry Murray (1993), Silvano Balemi (1993), +%% Jon Dixon (1996), Peter N"uchter (1996), +%% Juergen von Hagen (2000), and Michael Shell (2001-2014) +%% +%% +%% Copyright (c) 1993-2000 by Gerry Murray, Silvano Balemi, +%% Jon Dixon, Peter N"uchter, +%% Juergen von Hagen +%% and +%% Copyright (c) 2001-2015 by Michael Shell +%% +%% Current maintainer (V1.3 to V1.8b): Michael Shell +%% See: +%% http://www.michaelshell.org/ +%% for current contact information. +%% +%% Special thanks to Peter Wilson (CUA) and Donald Arseneau +%% for allowing the inclusion of the \@ifmtarg command +%% from their ifmtarg LaTeX package. +%% +%%************************************************************************* +%% Legal Notice: +%% This code is offered as-is without any warranty either expressed or +%% implied; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE! +%% User assumes all risk. +%% In no event shall the IEEE or any contributor to this code be liable for +%% any damages or losses, including, but not limited to, incidental, +%% consequential, or any other damages, resulting from the use or misuse +%% of any information contained here. +%% +%% All comments are the opinions of their respective authors and are not +%% necessarily endorsed by the IEEE. +%% +%% This work is distributed under the LaTeX Project Public License (LPPL) +%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used, +%% distributed and modified. A copy of the LPPL, version 1.3, is included +%% in the base LaTeX documentation of all distributions of LaTeX released +%% 2003/12/01 or later. +%% Retain all contribution notices and credits. +%% ** Modified files should be clearly indicated as such, including ** +%% ** renaming them and changing author support contact information. ** +%% +%% File list of work: IEEEtran.cls, IEEEtran_HOWTO.pdf, bare_adv.tex, +%% bare_conf.tex, bare_jrnl.tex, bare_conf_compsoc.tex, +%% bare_jrnl_compsoc.tex +%% +%% Major changes to the user interface should be indicated by an +%% increase in the version numbers. If a version is a beta, it will +%% be indicated with a BETA suffix, i.e., 1.4 BETA. +%% Small changes can be indicated by appending letters to the version +%% such as "IEEEtran_v14a.cls". +%% In all cases, \Providesclass, any \typeout messages to the user, +%% \IEEEtransversionmajor and \IEEEtransversionminor must reflect the +%% correct version information. +%% The changes should also be documented via source comments. +%%************************************************************************* +%% +% +% Available class options +% e.g., \documentclass[10pt,conference]{IEEEtran} +% +% *** choose only one from each category *** +% +% 9pt, 10pt, 11pt, 12pt +% Sets normal font size. The default is 10pt. +% +% conference, journal, technote, peerreview, peerreviewca +% determines format mode - conference papers, journal papers, +% correspondence papers (technotes), or peer review papers. The user +% should also select 9pt when using technote. peerreview is like +% journal mode, but provides for a single-column "cover" title page for +% anonymous peer review. The paper title (without the author names) is +% repeated at the top of the page after the cover page. For peer review +% papers, the \IEEEpeerreviewmaketitle command must be executed (will +% automatically be ignored for non-peerreview modes) at the place the +% cover page is to end, usually just after the abstract (keywords are +% not normally used with peer review papers). peerreviewca is like +% peerreview, but allows the author names to be entered and formatted +% as with conference mode so that author affiliation and contact +% information can be easily seen on the cover page. +% The default is journal. +% +% draft, draftcls, draftclsnofoot, final +% determines if paper is formatted as a widely spaced draft (for +% handwritten editor comments) or as a properly typeset final version. +% draftcls restricts draft mode to the class file while all other LaTeX +% packages (i.e., \usepackage{graphicx}) will behave as final - allows +% for a draft paper with visible figures, etc. draftclsnofoot is like +% draftcls, but does not display the date and the word "DRAFT" at the foot +% of the pages. If using one of the draft modes, the user will probably +% also want to select onecolumn. +% The default is final. +% +% letterpaper, a4paper, cspaper +% determines paper size: 8.5in X 11in, 210mm X 297mm or 7.875in X 10.75in. +% Changing the paper size in the standard journal and conference modes +% will not alter the typesetting of the document - only the margins will +% be affected. In particular, documents using the a4paper option will +% have reduced side margins (A4 is narrower than US letter) and a longer +% bottom margin (A4 is longer than US letter). For both cases, the top +% margins will be the same and the text will be horizontally centered. +% For the compsoc conference and draft modes, it is the margins that will +% remain constant, and thus the text area size will vary, with changes in +% the paper size. +% The cspaper option is the special ``trim'' paper size (7.875in x 10.75in) +% used in the actual publication of Computer Society journals. Under +% compsoc journal mode, this option does not alter the typesetting of the +% document. Authors should invoke the cspaper option only if requested to +% do so by the editors of the specific journal they are submitting to. +% For final submission to the IEEE, authors should generally use US letter +% (8.5 X 11in) paper unless otherwise instructed. Note that authors should +% ensure that all post-processing (ps, pdf, etc.) uses the same paper +% specificiation as the .tex document. Problems here are by far the number +% one reason for incorrect margins. IEEEtran will automatically set the +% default paper size under pdflatex (without requiring any change to +% pdftex.cfg), so this issue is more important to dvips users. Fix +% config.ps, config.pdf, or ~/.dvipsrc for dvips, or use the +% dvips -t papersize option instead as needed. For the cspaper option, +% the corresponding dvips paper name is "ieeecs". +% See the testflow documentation +% http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/testflow +% for more details on dvips paper size configuration. +% The default is letterpaper. +% +% oneside, twoside +% determines if layout follows single sided or two sided (duplex) +% printing. The only notable change is with the headings at the top of +% the pages. +% The default is oneside. +% +% onecolumn, twocolumn +% determines if text is organized into one or two columns per page. One +% column mode is usually used only with draft papers. +% The default is twocolumn. +% +% comsoc, compsoc, transmag +% Use the format of the IEEE Communications Society, IEEE Computer Society +% or IEEE Transactions on Magnetics, respectively. +% +% romanappendices +% Use the "Appendix I" convention when numbering appendices. IEEEtran.cls +% now defaults to Alpha "Appendix A" convention - the opposite of what +% v1.6b and earlier did. +% +% captionsoff +% disables the display of the figure/table captions. Some IEEE journals +% request that captions be removed and figures/tables be put on pages +% of their own at the end of an initial paper submission. The endfloat +% package can be used with this class option to achieve this format. +% +% nofonttune +% turns off tuning of the font interword spacing. Maybe useful to those +% not using the standard Times fonts or for those who have already "tuned" +% their fonts. +% The default is to enable IEEEtran to tune font parameters. +% +% +%---------- +% Available CLASSINPUTs provided (all are macros unless otherwise noted): +% \CLASSINPUTbaselinestretch +% \CLASSINPUTinnersidemargin +% \CLASSINPUToutersidemargin +% \CLASSINPUTtoptextmargin +% \CLASSINPUTbottomtextmargin +% +% Available CLASSINFOs provided: +% \ifCLASSINFOpdf (TeX if conditional) +% \CLASSINFOpaperwidth (macro) +% \CLASSINFOpaperheight (macro) +% \CLASSINFOnormalsizebaselineskip (length) +% \CLASSINFOnormalsizeunitybaselineskip (length) +% +% Available CLASSOPTIONs provided: +% all class option flags (TeX if conditionals) unless otherwise noted, +% e.g., \ifCLASSOPTIONcaptionsoff +% point size options provided as a single macro: +% \CLASSOPTIONpt +% which will be defined as 9, 10, 11, or 12 depending on the document's +% normalsize point size. +% also, class option peerreviewca implies the use of class option peerreview +% and classoption draft implies the use of class option draftcls + + + + + +\ProvidesClass{IEEEtran}[2015/08/26 V1.8b by Michael Shell] +\typeout{-- See the "IEEEtran_HOWTO" manual for usage information.} +\typeout{-- http://www.michaelshell.org/tex/ieeetran/} +\NeedsTeXFormat{LaTeX2e} + +% IEEEtran.cls version numbers, provided as of V1.3 +% These values serve as a way a .tex file can +% determine if the new features are provided. +% The version number of this IEEEtrans.cls can be obtained from +% these values. i.e., V1.4 +% KEEP THESE AS INTEGERS! i.e., NO {4a} or anything like that- +% (no need to enumerate "a" minor changes here) +\def\IEEEtransversionmajor{1} +\def\IEEEtransversionminor{8} + + +% hook to allow easy changeover to IEEEtran.cls/tools.sty error reporting +\def\@IEEEclspkgerror{\ClassError{IEEEtran}} + + +% These do nothing, but provide them like in article.cls +\newif\if@restonecol +\newif\if@titlepage + + +% class option conditionals +\newif\ifCLASSOPTIONonecolumn \CLASSOPTIONonecolumnfalse +\newif\ifCLASSOPTIONtwocolumn \CLASSOPTIONtwocolumntrue + +\newif\ifCLASSOPTIONoneside \CLASSOPTIONonesidetrue +\newif\ifCLASSOPTIONtwoside \CLASSOPTIONtwosidefalse + +\newif\ifCLASSOPTIONfinal \CLASSOPTIONfinaltrue +\newif\ifCLASSOPTIONdraft \CLASSOPTIONdraftfalse +\newif\ifCLASSOPTIONdraftcls \CLASSOPTIONdraftclsfalse +\newif\ifCLASSOPTIONdraftclsnofoot \CLASSOPTIONdraftclsnofootfalse + +\newif\ifCLASSOPTIONpeerreview \CLASSOPTIONpeerreviewfalse +\newif\ifCLASSOPTIONpeerreviewca \CLASSOPTIONpeerreviewcafalse + +\newif\ifCLASSOPTIONjournal \CLASSOPTIONjournaltrue +\newif\ifCLASSOPTIONconference \CLASSOPTIONconferencefalse +\newif\ifCLASSOPTIONtechnote \CLASSOPTIONtechnotefalse + +\newif\ifCLASSOPTIONnofonttune \CLASSOPTIONnofonttunefalse + +\newif\ifCLASSOPTIONcaptionsoff \CLASSOPTIONcaptionsofffalse + +\newif\ifCLASSOPTIONcomsoc \CLASSOPTIONcomsocfalse +\newif\ifCLASSOPTIONcompsoc \CLASSOPTIONcompsocfalse +\newif\ifCLASSOPTIONtransmag \CLASSOPTIONtransmagfalse + +\newif\ifCLASSOPTIONromanappendices \CLASSOPTIONromanappendicesfalse + + +% class info conditionals + +% indicates if pdf (via pdflatex) output +\newif\ifCLASSINFOpdf \CLASSINFOpdffalse + + +% V1.6b internal flag to show if using a4paper +\newif\if@IEEEusingAfourpaper \@IEEEusingAfourpaperfalse +% V1.6b internal flag to show if using cspaper +\newif\if@IEEEusingcspaper \@IEEEusingcspaperfalse + + +% IEEEtran class scratch pad registers +% dimen +\newdimen\@IEEEtrantmpdimenA +\newdimen\@IEEEtrantmpdimenB +\newdimen\@IEEEtrantmpdimenC +% count +\newcount\@IEEEtrantmpcountA +\newcount\@IEEEtrantmpcountB +\newcount\@IEEEtrantmpcountC +% token list +\newtoks\@IEEEtrantmptoksA + +% we use \CLASSOPTIONpt so that we can ID the point size (even for 9pt docs) +% as well as LaTeX's \@ptsize to retain some compatability with some +% external packages +\def\@ptsize{0} +% LaTeX does not support 9pt, so we set \@ptsize to 0 - same as that of 10pt +\DeclareOption{9pt}{\def\CLASSOPTIONpt{9}\def\@ptsize{0}} +\DeclareOption{10pt}{\def\CLASSOPTIONpt{10}\def\@ptsize{0}} +\DeclareOption{11pt}{\def\CLASSOPTIONpt{11}\def\@ptsize{1}} +\DeclareOption{12pt}{\def\CLASSOPTIONpt{12}\def\@ptsize{2}} + + + +\DeclareOption{letterpaper}{\setlength{\paperwidth}{8.5in}% + \setlength{\paperheight}{11in}% + \@IEEEusingAfourpaperfalse + \@IEEEusingcspaperfalse + \def\CLASSOPTIONpaper{letter}% + \def\CLASSINFOpaperwidth{8.5in}% + \def\CLASSINFOpaperheight{11in}} + + +\DeclareOption{a4paper}{\setlength{\paperwidth}{210mm}% + \setlength{\paperheight}{297mm}% + \@IEEEusingAfourpapertrue + \@IEEEusingcspaperfalse + \def\CLASSOPTIONpaper{a4}% + \def\CLASSINFOpaperwidth{210mm}% + \def\CLASSINFOpaperheight{297mm}} + +% special paper option for compsoc journals +\DeclareOption{cspaper}{\setlength{\paperwidth}{7.875in}% + \setlength{\paperheight}{10.75in}% + \@IEEEusingcspapertrue + \@IEEEusingAfourpaperfalse + \def\CLASSOPTIONpaper{ieeecs}% + \def\CLASSINFOpaperwidth{7.875in}% + \def\CLASSINFOpaperheight{10.75in}} + +\DeclareOption{oneside}{\@twosidefalse\@mparswitchfalse + \CLASSOPTIONonesidetrue\CLASSOPTIONtwosidefalse} +\DeclareOption{twoside}{\@twosidetrue\@mparswitchtrue + \CLASSOPTIONtwosidetrue\CLASSOPTIONonesidefalse} + +\DeclareOption{onecolumn}{\CLASSOPTIONonecolumntrue\CLASSOPTIONtwocolumnfalse} +\DeclareOption{twocolumn}{\CLASSOPTIONtwocolumntrue\CLASSOPTIONonecolumnfalse} + +% If the user selects draft, then this class AND any packages +% will go into draft mode. +\DeclareOption{draft}{\CLASSOPTIONdrafttrue\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofootfalse} +% draftcls is for a draft mode which will not affect any packages +% used by the document. +\DeclareOption{draftcls}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofootfalse} +% draftclsnofoot is like draftcls, but without the footer. +\DeclareOption{draftclsnofoot}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofoottrue} +\DeclareOption{final}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclsfalse + \CLASSOPTIONdraftclsnofootfalse} + +\DeclareOption{journal}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournaltrue\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{conference}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencetrue\CLASSOPTIONtechnotefalse} + +\DeclareOption{technote}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotetrue} + +\DeclareOption{peerreview}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{peerreviewca}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcatrue + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{nofonttune}{\CLASSOPTIONnofonttunetrue} + +\DeclareOption{captionsoff}{\CLASSOPTIONcaptionsofftrue} + +\DeclareOption{comsoc}{\CLASSOPTIONcomsoctrue\CLASSOPTIONcompsocfalse\CLASSOPTIONtransmagfalse} + +\DeclareOption{compsoc}{\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsoctrue\CLASSOPTIONtransmagfalse} + +\DeclareOption{transmag}{\CLASSOPTIONtransmagtrue\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsocfalse} + +\DeclareOption{romanappendices}{\CLASSOPTIONromanappendicestrue} + + +% default to US letter paper, 10pt, twocolumn, one sided, final, journal +\ExecuteOptions{letterpaper,10pt,twocolumn,oneside,final,journal} +% overrride these defaults per user requests +\ProcessOptions + + + +%% -- Command Argument Scanning Support Functions -- + +% Sets the category codes for punctuation to their normal values. +% For local use with argument scanning. +\def\IEEEnormalcatcodespunct{\catcode`\!=12 \catcode`\,=12 \catcode`\:=12 +\catcode`\;=12 \catcode`\`=12 \catcode`\'=12 \catcode`\"=12 \catcode`\.=12 +\catcode`\/=12 \catcode`\?=12 \catcode`\*=12 \catcode`\+=12 \catcode`\-=12 +\catcode`\<=12 \catcode`\>=12 \catcode`\(=12 \catcode`\)=12 \catcode`\[=12 +\catcode`\]=12 \catcode`\==12 \catcode`\|=12} +% Sets the category codes for numbers to their normal values. +% For local use with argument scanning. +\def\IEEEnormalcatcodesnum{\catcode`\0=12 \catcode`\1=12 \catcode`\2=12 +\catcode`\3=12 \catcode`\4=12 \catcode`\5=12 \catcode`\6=12 \catcode`\7=12 +\catcode`\8=12 \catcode`\9=12} +% combined action of \IEEEnormalcatcodespunct and \IEEEnormalcatcodesnum +\def\IEEEnormalcatcodes{\IEEEnormalcatcodespunct\IEEEnormalcatcodesnum} + + +% usage: \@IEEEextracttoken*{} +% \@IEEEextracttoken fully expands its argument (which it then stores in +% \@IEEEextracttokenarg) via \edef and then the meaning of the first +% nonbrace (but including the empty group) token found is assigned via \let +% to \@IEEEextractedtoken as well as stored in the macro +% \@IEEEextractedtokenmacro. Tokens that would otherwise be discarded during +% the acquisition of the first are stored in \@IEEEextractedtokensdiscarded, +% however their original relative brace nesting depths are not guaranteed to +% be preserved. +% If the argument is empty, or if a first nonbrace token does not exist (or +% is an empty group), \@IEEEextractedtoken will be \relax and +% \@IEEEextractedtokenmacro and \@IEEEextractedtokensdiscarded will be empty. +% +% For example: +% \@IEEEextracttoken{{{ab}{cd}}{{ef}g}} +% results in: +% +% \@IEEEextracttokenarg ==> a macro containing {{ab}{cd}}{{ef}g} +% \@IEEEextractedtoken ==> the letter a +% \@IEEEextractedtokenmacro ==> a macro containing a +% \@IEEEextractedtokensdiscarded ==> a macro containing bcd{ef}g +% +% the *-star form, \@IEEEextracttoken*, does not expand its argument +% contents during processing. +\def\@IEEEextracttoken{\@ifstar{\let\@IEEEextracttokendef=\def\@@IEEEextracttoken}{\let\@IEEEextracttokendef=\edef\@@IEEEextracttoken}} + +\def\@@IEEEextracttoken#1{\@IEEEextracttokendef\@IEEEextracttokenarg{#1}\relax +\def\@IEEEextractedtokensdiscarded{}\relax % initialize to empty +% if the macro is unchanged after being acquired as a single undelimited argument +% with anything after it being stripped off as a delimited argument +% we know we have one token without any enclosing braces. loop until this is true. +\let\@IEEEextracttokencurgroup\@IEEEextracttokenarg +\loop + % trap case of an empty argument as this would cause a problem with + % \@@@IEEEextracttoken's first (nondelimited) argument acquisition + \ifx\@IEEEextracttokencurgroup\@empty + \def\@IEEEextractedtokenmacro{}\relax + \else + \expandafter\@@@IEEEextracttoken\@IEEEextracttokencurgroup\@IEEEgeneralsequenceDELIMITER\relax + \fi + \ifx\@IEEEextractedtokenmacro\@IEEEextracttokencurgroup + \else + \let\@IEEEextracttokencurgroup=\@IEEEextractedtokenmacro +\repeat +% we can safely do a \let= here because there should be at most one token +% the relax is needed to handle the case of no token found +\expandafter\let\expandafter\@IEEEextractedtoken\@IEEEextractedtokenmacro\relax} + +\def\@@@IEEEextracttoken#1#2\@IEEEgeneralsequenceDELIMITER{\def\@IEEEextractedtokenmacro{#1}\relax +\def\@@IEEEextractedtokensdiscarded{#2}\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter +\@IEEEextractedtokensdiscarded\expandafter\expandafter\expandafter +{\expandafter\@@IEEEextractedtokensdiscarded\@IEEEextractedtokensdiscarded}} +%% +%% -- End of Command Argument Scanning Support Functions -- + + + +% Computer Society conditional execution command +\long\def\@IEEEcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\relax#1\relax\fi\relax} +% inverse +\long\def\@IEEEnotcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\else\relax#1\relax\fi\relax} +% compsoc conference +\long\def\@IEEEcompsocconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\relax#1\relax\fi\fi\relax} +% compsoc not conference +\long\def\@IEEEcompsocnotconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\else\relax#1\relax\fi\fi\relax} + + +% comsoc verify that newtxmath, mtpro2, mt11p or mathtime has been loaded +\def\@IEEEcomsocverifymathfont{\typeout{-- Verifying Times compatible math font.}\relax + \@ifpackageloaded{newtxmath}{\typeout{-- newtxmath loaded, OK.}}{\@@IEEEcomsocverifymathfont}} +\def\@@IEEEcomsocverifymathfont{\@ifpackageloaded{mtpro2}{\typeout{-- mtpro2 loaded, OK.}}{\@@@IEEEcomsocverifymathfont}} +\def\@@@IEEEcomsocverifymathfont{\@ifpackageloaded{mt11p}{\typeout{-- mt11p2 loaded, OK.}}{\@@@@IEEEcomsocverifymathfont}} +\def\@@@@IEEEcomsocverifymathfont{\@ifpackageloaded{mathtime}{\typeout{-- mathtime loaded, OK.}}{\@IEEEcomsocenforcemathfont}} + +% comsoc, if a Times math font was not loaded by user, enforce it +\def\@IEEEcomsocenforcemathfont{\typeout{** Times compatible math font not found, forcing.}\relax +\IfFileExists{newtxmath.sty}{\typeout{-- Found newtxmath, loading.}\RequirePackage{newtxmath}}{\@@IEEEcomsocenforcemathfont}} +\def\@@IEEEcomsocenforcemathfont{\IfFileExists{mtpro2.sty}{\typeout{-- Found mtpro2, loading.}\RequirePackage{mtpro2}}{\@@@IEEEcomsocenforcemathfont}} +\def\@@@IEEEcomsocenforcemathfont{\IfFileExists{mt11p.sty}{\typeout{-- Found mt11p, loading.}\RequirePackage{mt11p}}{\@@@@IEEEcomsocenforcemathfont}} +\def\@@@@IEEEcomsocenforcemathfont{\IfFileExists{mathtime.sty}{\typeout{-- Found mathtime, loading.}\RequirePackage{mathtime}}{\@@@@@IEEEcomsocenforcemathfont}} +% if no acceptable Times math font package found, error with newtxmath requirement +\def\@@@@@IEEEcomsocenforcemathfont{\typeout{** No Times compatible math font package found. newtxmath is required.}\RequirePackage{newtxmath}} + + +\ifCLASSOPTIONcomsoc + % ensure that if newtxmath is used, the cmintegrals option is also invoked + \PassOptionsToPackage{cmintegrals}{newtxmath} + % comsoc requires a Times like math font + % ensure this requirement is satisfied at document start + \AtBeginDocument{\@IEEEcomsocverifymathfont} +\fi + + + +% The IEEE uses Times Roman font, so we'll default to Times. +% These three commands make up the entire times.sty package. +\renewcommand{\sfdefault}{phv} +\renewcommand{\rmdefault}{ptm} +\renewcommand{\ttdefault}{pcr} + +% V1.7 compsoc nonconference papers, use Palatino/Palladio as the main text font, +% not Times Roman. +\@IEEEcompsocnotconfonly{\renewcommand{\rmdefault}{ppl}} + +% enable the selected main text font +\normalfont\selectfont + + +\ifCLASSOPTIONcomsoc + \typeout{-- Using IEEE Communications Society mode.} +\fi + +\ifCLASSOPTIONcompsoc + \typeout{-- Using IEEE Computer Society mode.} +\fi + + +% V1.7 conference notice message hook +\def\@IEEEconsolenoticeconference{\typeout{}% +\typeout{** Conference Paper **}% +\typeout{Before submitting the final camera ready copy, remember to:}% +\typeout{}% +\typeout{ 1. Manually equalize the lengths of two columns on the last page}% +\typeout{ of your paper;}% +\typeout{}% +\typeout{ 2. Ensure that any PostScript and/or PDF output post-processing}% +\typeout{ uses only Type 1 fonts and that every step in the generation}% +\typeout{ process uses the appropriate paper size.}% +\typeout{}} + + +% we can send console reminder messages to the user here +\AtEndDocument{\ifCLASSOPTIONconference\@IEEEconsolenoticeconference\fi} + + +% warn about the use of single column other than for draft mode +\ifCLASSOPTIONtwocolumn\else% + \ifCLASSOPTIONdraftcls\else% + \typeout{** ATTENTION: Single column mode is not typically used with IEEE publications.}% + \fi% +\fi + + +% V1.7 improved paper size setting code. +% Set pdfpage and dvips paper sizes. Conditional tests are similar to that +% of ifpdf.sty. Retain within {} to ensure tested macros are never altered, +% even if only effect is to set them to \relax. +% if \pdfoutput is undefined or equal to relax, output a dvips special +{\@ifundefined{pdfoutput}{\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}}{% +% pdfoutput is defined and not equal to \relax +% check for pdfpageheight existence just in case someone sets pdfoutput +% under non-pdflatex. If exists, set them regardless of value of \pdfoutput. +\@ifundefined{pdfpageheight}{\relax}{\global\pdfpagewidth\paperwidth +\global\pdfpageheight\paperheight}% +% if using \pdfoutput=0 under pdflatex, send dvips papersize special +\ifcase\pdfoutput +\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}% +\else +% we are using pdf output, set CLASSINFOpdf flag +\global\CLASSINFOpdftrue +\fi}} + +% let the user know the selected papersize +\typeout{-- Using \CLASSINFOpaperwidth\space x \CLASSINFOpaperheight\space +(\CLASSOPTIONpaper)\space paper.} + +\ifCLASSINFOpdf +\typeout{-- Using PDF output.} +\else +\typeout{-- Using DVI output.} +\fi + + +% The idea hinted here is for LaTeX to generate markleft{} and markright{} +% automatically for you after you enter \author{}, \journal{}, +% \journaldate{}, journalvol{}, \journalnum{}, etc. +% However, there may be some backward compatibility issues here as +% well as some special applications for IEEEtran.cls and special issues +% that may require the flexible \markleft{}, \markright{} and/or \markboth{}. +% We'll leave this as an open future suggestion. +%\newcommand{\journal}[1]{\def\@journal{#1}} +%\def\@journal{} + + + +% pointsize values +% used with ifx to determine the document's normal size +\def\@IEEEptsizenine{9} +\def\@IEEEptsizeten{10} +\def\@IEEEptsizeeleven{11} +\def\@IEEEptsizetwelve{12} + + + +% FONT DEFINITIONS (No sizexx.clo file needed) +% V1.6 revised font sizes, displayskip values and +% revised normalsize baselineskip to reduce underfull vbox problems +% on the 58pc = 696pt = 9.5in text height we want +% normalsize #lines/column baselineskip (aka leading) +% 9pt 63 11.0476pt (truncated down) +% 10pt 58 12pt (exact) +% 11pt 52 13.3846pt (truncated down) +% 12pt 50 13.92pt (exact) +% + +% we need to store the nominal baselineskip for the given font size +% in case baselinestretch ever changes. +% this is a dimen, so it will not hold stretch or shrink +\newdimen\@IEEEnormalsizeunitybaselineskip +\@IEEEnormalsizeunitybaselineskip\baselineskip + + + +%% ******* WARNING! ******* +%% +%% Authors should not alter font sizes, baselineskip ("leading"), +%% margins or other spacing values in an attempt to squeeze more +%% material on each page. +%% +%% The IEEE's own typesetting software will restore the correct +%% values when re-typesetting/proofing the submitted document, +%% possibly resulting in unexpected article over length charges. +%% +%% ******* WARNING! ******* + + +% 9pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\typeout{-- This is a 9 point document.} +\def\normalsize{\@setfontsize{\normalsize}{9}{11.0476pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.0476pt} +\normalsize +\abovedisplayskip 1.5ex plus 3pt minus 1pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 3pt +\belowdisplayshortskip 1.5ex plus 3pt minus 1pt +\def\small{\@setfontsize{\small}{8.5}{10pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}} +\def\tiny{\@setfontsize{\tiny}{5}{6pt}} +% sublargesize is the same as large - 10pt +\def\sublargesize{\@setfontsize{\sublargesize}{10}{12pt}} +\def\large{\@setfontsize{\large}{10}{12pt}} +\def\Large{\@setfontsize{\Large}{12}{14pt}} +\def\LARGE{\@setfontsize{\LARGE}{14}{17pt}} +\def\huge{\@setfontsize{\huge}{17}{20pt}} +\def\Huge{\@setfontsize{\Huge}{20}{24pt}} +\fi +% +% 10pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\typeout{-- This is a 10 point document.} +\def\normalsize{\@setfontsize{\normalsize}{10}{12.00pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{12pt} +\normalsize +\abovedisplayskip 1.5ex plus 4pt minus 2pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4pt +\belowdisplayshortskip 1.5ex plus 4pt minus 2pt +\def\small{\@setfontsize{\small}{9}{10pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}} +\def\tiny{\@setfontsize{\tiny}{5}{6pt}} +% sublargesize is a tad smaller than large - 11pt +\def\sublargesize{\@setfontsize{\sublargesize}{11}{13.4pt}} +\def\large{\@setfontsize{\large}{12}{14pt}} +\def\Large{\@setfontsize{\Large}{14}{17pt}} +\def\LARGE{\@setfontsize{\LARGE}{17}{20pt}} +\def\huge{\@setfontsize{\huge}{20}{24pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi +% +% 11pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\typeout{-- This is an 11 point document.} +\def\normalsize{\@setfontsize{\normalsize}{11}{13.3846pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.3846pt} +\normalsize +\abovedisplayskip 1.5ex plus 5pt minus 3pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5pt +\belowdisplayshortskip 1.5ex plus 5pt minus 3pt +\def\small{\@setfontsize{\small}{10}{12pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}} +\def\tiny{\@setfontsize{\tiny}{6}{7pt}} +% sublargesize is the same as large - 12pt +\def\sublargesize{\@setfontsize{\sublargesize}{12}{14pt}} +\def\large{\@setfontsize{\large}{12}{14pt}} +\def\Large{\@setfontsize{\Large}{14}{17pt}} +\def\LARGE{\@setfontsize{\LARGE}{17}{20pt}} +\def\huge{\@setfontsize{\huge}{20}{24pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi +% +% 12pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\typeout{-- This is a 12 point document.} +\def\normalsize{\@setfontsize{\normalsize}{12}{13.92pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.92pt} +\normalsize +\abovedisplayskip 1.5ex plus 6pt minus 4pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6pt +\belowdisplayshortskip 1.5ex plus 6pt minus 4pt +\def\small{\@setfontsize{\small}{10}{12pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}} +\def\tiny{\@setfontsize{\tiny}{6}{7pt}} +% sublargesize is the same as large - 14pt +\def\sublargesize{\@setfontsize{\sublargesize}{14}{17pt}} +\def\large{\@setfontsize{\large}{14}{17pt}} +\def\Large{\@setfontsize{\Large}{17}{20pt}} +\def\LARGE{\@setfontsize{\LARGE}{20}{24pt}} +\def\huge{\@setfontsize{\huge}{22}{26pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi + + + +% V1.8a compsoc font sizes +% compsoc font sizes use bp "Postscript" point units (1/72in) +% rather than the traditional pt (1/72.27) +\ifCLASSOPTIONcompsoc +% -- compsoc defaults -- +% ** will override some of these values later ** +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{11bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\def\small{\@setfontsize{\small}{8.5bp}{10bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{8bp}{9bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{7bp}{8bp}} +\def\tiny{\@setfontsize{\tiny}{5bp}{6bp}} +% sublargesize is the same as large - 10bp +\def\sublargesize{\@setfontsize{\sublargesize}{10bp}{12bp}} +\def\large{\@setfontsize{\large}{10bp}{12bp}} +\def\Large{\@setfontsize{\Large}{12bp}{14bp}} +\def\LARGE{\@setfontsize{\LARGE}{14bp}{17bp}} +\def\huge{\@setfontsize{\huge}{17bp}{20bp}} +\def\Huge{\@setfontsize{\Huge}{20bp}{24bp}} +\fi +% +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\def\normalsize{\@setfontsize{\normalsize}{10bp}{12bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{12bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\def\small{\@setfontsize{\small}{9bp}{10bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{8bp}{9bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{7bp}{8bp}} +\def\tiny{\@setfontsize{\tiny}{5bp}{6bp}} +% sublargesize is a tad smaller than large - 11bp +\def\sublargesize{\@setfontsize{\sublargesize}{11bp}{13.5bp}} +\def\large{\@setfontsize{\large}{12bp}{14bp}} +\def\Large{\@setfontsize{\Large}{14bp}{17bp}} +\def\LARGE{\@setfontsize{\LARGE}{17bp}{20bp}} +\def\huge{\@setfontsize{\huge}{20bp}{24bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.5bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.5bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\def\small{\@setfontsize{\small}{10bp}{12bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{9bp}{10.5bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{8bp}{9bp}} +\def\tiny{\@setfontsize{\tiny}{6bp}{7bp}} +% sublargesize is the same as large - 12bp +\def\sublargesize{\@setfontsize{\sublargesize}{12bp}{14bp}} +\def\large{\@setfontsize{\large}{12bp}{14bp}} +\def\Large{\@setfontsize{\Large}{14bp}{17bp}} +\def\LARGE{\@setfontsize{\LARGE}{17bp}{20bp}} +\def\huge{\@setfontsize{\huge}{20bp}{24bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14bp}}% +\setlength{\@IEEEnormalsizeunitybaselineskip}{14bp}% +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\def\small{\@setfontsize{\small}{10bp}{12bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{9bp}{10.5bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{8bp}{9bp}} +\def\tiny{\@setfontsize{\tiny}{6bp}{7bp}} +% sublargesize is the same as large - 14bp +\def\sublargesize{\@setfontsize{\sublargesize}{14bp}{17bp}} +\def\large{\@setfontsize{\large}{14bp}{17bp}} +\def\Large{\@setfontsize{\Large}{17bp}{20bp}} +\def\LARGE{\@setfontsize{\LARGE}{20bp}{24bp}} +\def\huge{\@setfontsize{\huge}{22bp}{26bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% -- override defaults: compsoc journals use special normalsizes -- +\ifCLASSOPTIONconference +% +% compsoc conferences +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{10.8bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{10.8bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\fi +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\def\normalsize{\@setfontsize{\normalsize}{10bp}{11.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\fi +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\fi +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14.4bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{14.4bp} +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\fi +% +% compsoc nonconferences +\else +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{10.8bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{10.8bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\fi +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +% the official spec is 9.5bp with 11.4bp leading for 10pt, +% but measurements of proofs suggest upto 11.723bp leading +% here we'll use 11.54bp which gives 61 lines per column +% with the standard compsoc margins +\def\normalsize{\@setfontsize{\normalsize}{9.5bp}{11.54bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.54bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\fi +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\fi +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14.4bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{14.4bp} +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\fi +\fi\fi + + + + +% V1.6 The Computer Modern Fonts will issue a substitution warning for +% 24pt titles (24.88pt is used instead, but the default and correct +% Times font will scale exactly as needed) increase the substitution +% tolerance to turn off this warning. +% +% V1.8a, the compsoc bp font sizes can also cause bogus font substitution +% warnings with footnote or scriptsize math and the $\bullet$ itemized +% list of \IEEEcompsocitemizethanks. So, increase this to 1.5pt or more. +\def\fontsubfuzz{1.7bp} + + +% warn the user in case they forget to use the 9pt option with +% technote +\ifCLASSOPTIONtechnote% + \ifx\CLASSOPTIONpt\@IEEEptsizenine\else% + \typeout{** ATTENTION: Technotes are normally 9pt documents.}% + \fi% +\fi + + +% V1.7 +% Improved \textunderscore to provide a much better fake _ when used with +% OT1 encoding. Under OT1, detect use of pcr or cmtt \ttfamily and use +% available true _ glyph for those two typewriter fonts. +\def\@IEEEstringptm{ptm} % Times Roman family +\def\@IEEEstringppl{ppl} % Palatino Roman family +\def\@IEEEstringphv{phv} % Helvetica Sans Serif family +\def\@IEEEstringpcr{pcr} % Courier typewriter family +\def\@IEEEstringcmtt{cmtt} % Computer Modern typewriter family +\DeclareTextCommandDefault{\textunderscore}{\leavevmode +\ifx\f@family\@IEEEstringpcr\string_\else +\ifx\f@family\@IEEEstringcmtt\string_\else +\ifx\f@family\@IEEEstringptm\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else +\ifx\f@family\@IEEEstringppl\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else +\ifx\f@family\@IEEEstringphv\kern -0.03em\vbox{\hrule\@width 0.62em\@height 0.52pt\kern -0.33ex}\kern -0.03em\else +\kern 0.09em\vbox{\hrule\@width 0.6em\@height 0.44pt\kern -0.63pt\kern -0.42ex}\kern 0.09em\fi\fi\fi\fi\fi\relax} + + + + +% set the default \baselinestretch +\def\baselinestretch{1} +\ifCLASSOPTIONdraftcls + \def\baselinestretch{1.5}% default baselinestretch for draft modes +\fi + + +% process CLASSINPUT baselinestretch +\ifx\CLASSINPUTbaselinestretch\@IEEEundefined +\else + \edef\baselinestretch{\CLASSINPUTbaselinestretch} % user CLASSINPUT override + \typeout{** ATTENTION: Overriding \string\baselinestretch\space to + \baselinestretch\space via \string\CLASSINPUT.} +\fi + +\small\normalsize % make \baselinestretch take affect + + + + +% store the normalsize baselineskip +\newdimen\CLASSINFOnormalsizebaselineskip +\CLASSINFOnormalsizebaselineskip=\baselineskip\relax +% and the normalsize unity (baselinestretch=1) baselineskip +% we could save a register by giving the user access to +% \@IEEEnormalsizeunitybaselineskip. However, let's protect +% its read only internal status +\newdimen\CLASSINFOnormalsizeunitybaselineskip +\CLASSINFOnormalsizeunitybaselineskip=\@IEEEnormalsizeunitybaselineskip\relax +% store the nominal value of jot +\newdimen\IEEEnormaljot +\IEEEnormaljot=0.25\baselineskip\relax + +% set \jot +\jot=\IEEEnormaljot\relax + + + + +% V1.6, we are now going to fine tune the interword spacing +% The default interword glue for Times under TeX appears to use a +% nominal interword spacing of 25% (relative to the font size, i.e., 1em) +% a maximum of 40% and a minimum of 19%. +% For example, 10pt text uses an interword glue of: +% +% 2.5pt plus 1.49998pt minus 0.59998pt +% +% However, the IEEE allows for a more generous range which reduces the need +% for hyphenation, especially for two column text. Furthermore, the IEEE +% tends to use a little bit more nominal space between the words. +% The IEEE's interword spacing percentages appear to be: +% 35% nominal +% 23% minimum +% 50% maximum +% (They may even be using a tad more for the largest fonts such as 24pt.) +% +% for bold text, the IEEE increases the spacing a little more: +% 37.5% nominal +% 23% minimum +% 55% maximum + +% here are the interword spacing ratios we'll use +% for medium (normal weight) +\def\@IEEEinterspaceratioM{0.35} +\def\@IEEEinterspaceMINratioM{0.23} +\def\@IEEEinterspaceMAXratioM{0.50} + +% for bold +\def\@IEEEinterspaceratioB{0.375} +\def\@IEEEinterspaceMINratioB{0.23} +\def\@IEEEinterspaceMAXratioB{0.55} + + +% compsoc nonconference papers use Palatino, +% tweak settings to better match the proofs +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference\else +% for medium (normal weight) +\def\@IEEEinterspaceratioM{0.28} +\def\@IEEEinterspaceMINratioM{0.21} +\def\@IEEEinterspaceMAXratioM{0.47} +% for bold +\def\@IEEEinterspaceratioB{0.305} +\def\@IEEEinterspaceMINratioB{0.21} +\def\@IEEEinterspaceMAXratioB{0.52} +\fi\fi + + +% command to revise the interword spacing for the current font under TeX: +% \fontdimen2 = nominal interword space +% \fontdimen3 = interword stretch +% \fontdimen4 = interword shrink +% since all changes to the \fontdimen are global, we can enclose these commands +% in braces to confine any font attribute or length changes +\def\@@@IEEEsetfontdimens#1#2#3{{% +\setlength{\@IEEEtrantmpdimenB}{\f@size pt}% grab the font size in pt, could use 1em instead. +\setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}% +\fontdimen2\font=\@IEEEtrantmpdimenA\relax +\addtolength{\@IEEEtrantmpdimenA}{-#2\@IEEEtrantmpdimenB}% +\fontdimen3\font=-\@IEEEtrantmpdimenA\relax +\setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}% +\addtolength{\@IEEEtrantmpdimenA}{-#3\@IEEEtrantmpdimenB}% +\fontdimen4\font=\@IEEEtrantmpdimenA\relax}} + +% revise the interword spacing for each font weight +\def\@@IEEEsetfontdimens{{% +\mdseries +\@@@IEEEsetfontdimens{\@IEEEinterspaceratioM}{\@IEEEinterspaceMAXratioM}{\@IEEEinterspaceMINratioM}% +\bfseries +\@@@IEEEsetfontdimens{\@IEEEinterspaceratioB}{\@IEEEinterspaceMAXratioB}{\@IEEEinterspaceMINratioB}% +}} + +% revise the interword spacing for each font shape +% \slshape is not often used for IEEE work and is not altered here. The \scshape caps are +% already a tad too large in the free LaTeX fonts (as compared to what the IEEE uses) so we +% won't alter these either. +\def\@IEEEsetfontdimens{{% +\normalfont +\@@IEEEsetfontdimens +\normalfont\itshape +\@@IEEEsetfontdimens +}} + +% command to revise the interword spacing for each font size (and shape +% and weight). Only the \rmfamily is done here as \ttfamily uses a +% fixed spacing and \sffamily is not used as the main text of IEEE papers. +\def\@IEEEtunefonts{{\selectfont\rmfamily +\tiny\@IEEEsetfontdimens +\scriptsize\@IEEEsetfontdimens +\footnotesize\@IEEEsetfontdimens +\small\@IEEEsetfontdimens +\normalsize\@IEEEsetfontdimens +\sublargesize\@IEEEsetfontdimens +\large\@IEEEsetfontdimens +\LARGE\@IEEEsetfontdimens +\huge\@IEEEsetfontdimens +\Huge\@IEEEsetfontdimens}} + +% if the nofonttune class option is not given, revise the interword spacing +% now - in case IEEEtran makes any default length measurements, and make +% sure all the default fonts are loaded +\ifCLASSOPTIONnofonttune\else +\@IEEEtunefonts +\fi + +% and again at the start of the document in case the user loaded different fonts +\AtBeginDocument{\ifCLASSOPTIONnofonttune\else\@IEEEtunefonts\fi} + + + + + +% -- V1.8a page setup commands -- + +% The default sample text for calculating margins +% Note that IEEE publications use \scriptsize for headers and footers. +\def\IEEEdefaultsampletext{\normalfont\normalsize gT} +\def\IEEEdefaultheadersampletext{\normalfont\scriptsize T}% IEEE headers default to uppercase +\def\IEEEdefaultfootersampletext{\normalfont\scriptsize gT} + + + +% usage: \IEEEsettextwidth{inner margin}{outer margin} +% Sets \textwidth to allow the specified inner and outer margins +% for the current \paperwidth. +\def\IEEEsettextwidth#1#2{\@IEEEtrantmpdimenA\paperwidth +\@IEEEtrantmpdimenB#1\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\@IEEEtrantmpdimenB#2\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\textwidth\@IEEEtrantmpdimenA} + + + +% usage: \IEEEsetsidemargin{mode: i, o, c, a}{margin/offset} +% Sets \oddsidemargin and \evensidemargin to yield the specified margin +% of the given mode. +% The available modes are: +% i = inner margin +% o = outer margin +% c = centered, with the given offset +% a = adjust the margins using the given offset +% For the offsets, positive values increase the inner margin. +% \textwidth should be set properly for the given margins before calling this +% function. +\def\IEEEsetsidemargin#1#2{\@IEEEtrantmpdimenA #2\relax +\@IEEEextracttoken{#1}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `i'}{Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}\relax + \let\@IEEEextractedtoken=i\relax + \def\@IEEEextractedtokenmacro{i}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetsidemargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken c\relax + \oddsidemargin\paperwidth + \advance\oddsidemargin by -\textwidth + \divide\oddsidemargin by 2\relax + \advance\oddsidemargin by -1in\relax + \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken o\relax + \oddsidemargin\paperwidth + \advance\oddsidemargin by -\textwidth + \advance\oddsidemargin by -\@IEEEtrantmpdimenA + \advance\oddsidemargin by -1in\relax +\else + \if\@IEEEextractedtoken i\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `i'}% + {Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}% + \fi + \oddsidemargin\@IEEEtrantmpdimenA + \advance\oddsidemargin by -1in\relax +\fi\fi\fi +% odd and even side margins both mean "inner" for single sided pages +\evensidemargin\oddsidemargin +% but are mirrors of each other when twosided is in effect +\if@twoside + \evensidemargin\paperwidth + \advance\evensidemargin by -\textwidth + \advance\evensidemargin by -\oddsidemargin + % have to compensate for both the builtin 1in LaTex offset + % and the fact we already subtracted this offset from \oddsidemargin + \advance\evensidemargin -2in\relax +\fi} + + + +% usage: \IEEEsettextheight[sample text]{top text margin}{bottom text margin} +% Sets \textheight based on the specified top margin and bottom margin. +% Takes into consideration \paperheight, \topskip, and (by default) the +% the actual height and depth of the \IEEEdefaultsampletext text. +\def\IEEEsettextheight{\@ifnextchar [{\@IEEEsettextheight}{\@IEEEsettextheight[\IEEEdefaultsampletext]}} +\def\@IEEEsettextheight[#1]#2#3{\textheight\paperheight\relax + \@IEEEtrantmpdimenA #2\relax + \advance \textheight by -\@IEEEtrantmpdimenA% subtract top margin + \@IEEEtrantmpdimenA #3\relax + \advance \textheight by -\@IEEEtrantmpdimenA% subtract bottom margin + \advance \textheight by \topskip% add \topskip + % subtract off everything above the top, and below the bottom, baselines + \settoheight{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance \textheight by -\@IEEEtrantmpdimenA + \settodepth{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance \textheight by -\@IEEEtrantmpdimenA} + + + +\newdimen\IEEEquantizedlength +\IEEEquantizedlength 0sp\relax +\newdimen\IEEEquantizedlengthdiff +\IEEEquantizedlengthdiff 0sp\relax +\def\IEEEquantizedlengthint{0} + +% usage: \IEEEquantizelength{mode: d, c, i}{base unit}{length} +% Sets the length \IEEEquantizedlength to be an integer multiple of the given +% (nonzero) base unit such that \IEEEquantizedlength approximates the given +% length. +% \IEEEquantizedlengthdiff is a length equal to the difference between the +% \IEEEquantizedlength and the given length. +% \IEEEquantizedlengthint is a macro containing the integer number of base units +% in \IEEEquantizedlength. +% i.e., \IEEEquantizedlength = \IEEEquantizedlengthint * base unit +% The mode determines how \IEEEquantizedlength is quantized: +% d = always decrease (always round down \IEEEquantizeint) +% c = use the closest match +% i = always increase (always round up \IEEEquantizeint) +% In anycase, if the given length is already quantized, +% \IEEEquantizedlengthdiff will be set to zero. +\def\IEEEquantizelength#1#2#3{\begingroup +% work in isolation so as not to externally disturb the \@IEEEtrantmp +% variables +% load the argument values indirectly via \IEEEquantizedlengthdiff +% in case the user refers to our \@IEEEtrantmpdimenX, \IEEEquantizedlength, +% etc. in the arguments. we also will work with these as counters, +% i.e., in sp units +% A has the base unit +\IEEEquantizedlengthdiff #2\relax\relax\relax\relax +\@IEEEtrantmpcountA\IEEEquantizedlengthdiff +% B has the input length +\IEEEquantizedlengthdiff #3\relax\relax\relax\relax +\@IEEEtrantmpcountB\IEEEquantizedlengthdiff +\@IEEEtrantmpdimenA\the\@IEEEtrantmpcountA sp\relax +\@IEEEtrantmpdimenB\the\@IEEEtrantmpcountB sp\relax +% \@IEEEtrantmpcountC will have the quantized int +% \IEEEquantizedlength will have the quantized length +% \@IEEEtrantmpdimenC will have the quantized diff +% initialize them to zero as this is what will be +% exported if an error occurs +\@IEEEtrantmpcountC 0\relax +\IEEEquantizedlength 0sp\relax +\@IEEEtrantmpdimenC 0sp\relax +% extract mode +\@IEEEextracttoken{#1}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + Defaulting to `d'}{Valid modes for \string\IEEEquantizelength\space are: d, c and i.}\relax + \let\@IEEEextractedtoken=d\relax + \def\@IEEEextractedtokenmacro{d}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEquantizelength\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% check for base unit is zero error +\ifnum\@IEEEtrantmpcountA=0\relax +\@IEEEclspkgerror{Base unit is zero in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + \string\IEEEquantizedlength\space and \string\IEEEquantizedlengthdiff\space are set to zero}{Division by zero is not allowed.}\relax +\else% base unit is nonzero + % \@IEEEtrantmpcountC carries the number of integer units + % in the quantized length (integer length \ base) + \@IEEEtrantmpcountC\@IEEEtrantmpcountB\relax + \divide\@IEEEtrantmpcountC by \@IEEEtrantmpcountA\relax + % \IEEEquantizedlength has the (rounded down) quantized length + % = base * int + \IEEEquantizedlength\@IEEEtrantmpdimenA\relax + \multiply\IEEEquantizedlength by \@IEEEtrantmpcountC\relax + % \@IEEEtrantmpdimenC has the difference + % = quantized length - length + \@IEEEtrantmpdimenC\IEEEquantizedlength\relax + \advance\@IEEEtrantmpdimenC by -\@IEEEtrantmpdimenB\relax + % trap special case of length being already quantized + % to avoid a roundup under i option + \ifdim\@IEEEtrantmpdimenC=0sp\relax + \else % length not is already quantized + % set dimenA to carry the upper quantized (absolute value) difference: + % quantizedlength + base - length + \advance\@IEEEtrantmpdimenA by \IEEEquantizedlength\relax + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB\relax + % set dimenB to carry the lower quantized (absolute value) difference: + % length - quantizedlength + \advance\@IEEEtrantmpdimenB by -\IEEEquantizedlength\relax + % handle each mode + \if\@IEEEextractedtoken c\relax + % compare upper and lower amounts, select upper if lower > upper + \ifdim\@IEEEtrantmpdimenB>\@IEEEtrantmpdimenA\relax + % use upper + \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax + \advance\@IEEEtrantmpcountC by 1\relax + \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA + \else% <=. uselower + % no need to do anything for lower, use output values already setup + \fi + \else% not mode c + \if\@IEEEextractedtoken i\relax + % always round up under i mode + \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax + \advance\@IEEEtrantmpcountC by 1\relax + \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA + \else + \if\@IEEEextractedtoken d\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + Defaulting to `d'}% + {Valid modes for \string\IEEEquantizelength\space are: d, c, and i.}\relax + \fi % if d + % no need to do anything for d, use output values already setup + \fi\fi % if i, c + \fi % if length is already quantized +\fi% if base unit is zero +% globally assign the results to macros we use here to escape the enclosing +% group without needing to call \global on any of the \@IEEEtrantmp variables. +% \@IEEEtrantmpcountC has the quantized int +% \IEEEquantizedlength has the quantized length +% \@IEEEtrantmpdimenC has the quantized diff +\xdef\@IEEEquantizedlengthintmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlength\relax +\xdef\@IEEEquantizedlengthmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\@IEEEtrantmpdimenC\relax +\xdef\@IEEEquantizedlengthdiffmacro{\the\@IEEEtrantmpcountC}\relax +\endgroup +% locally assign the outputs here from the macros +\expandafter\IEEEquantizedlength\@IEEEquantizedlengthmacro sp\relax +\expandafter\IEEEquantizedlengthdiff\@IEEEquantizedlengthdiffmacro sp\relax +\edef\IEEEquantizedlengthint{\@IEEEquantizedlengthintmacro}\relax} + + + +\newdimen\IEEEquantizedtextheightdiff +\IEEEquantizedtextheightdiff 0sp\relax + +% usage: \IEEEquantizetextheight[base unit]{mode: d, c, i} +% Sets \textheight to be an integer multiple of the current \baselineskip +% (or the optionally specified base unit) plus the first (\topskip) line. +% \IEEEquantizedtextheightdiff is a length equal to the difference between +% the new quantized and original \textheight. +% \IEEEquantizedtextheightlpc is a macro containing the integer number of +% lines per column under the quantized \textheight. i.e., +% \textheight = \IEEEquantizedtextheightlpc * \baselineskip + \topskip +% The mode determines how \textheight is quantized: +% d = always decrease (always round down the number of lines per column) +% c = use the closest match +% i = always increase (always round up the number of lines per column) +% In anycase, if \textheight is already quantized, it will remain unchanged, +% and \IEEEquantizedtextheightdiff will be set to zero. +% Depends on: \IEEEquantizelength +\def\IEEEquantizetextheight{\@ifnextchar [{\@IEEEquantizetextheight}{\@IEEEquantizetextheight[\baselineskip]}} +\def\@IEEEquantizetextheight[#1]#2{\begingroup +% use our \IEEEquantizedtextheightdiff as a scratch pad +% we need to subtract off \topskip before quantization +\IEEEquantizedtextheightdiff\textheight +\advance\IEEEquantizedtextheightdiff by -\topskip\relax +\IEEEquantizelength{#2}{#1}{\IEEEquantizedtextheightdiff} +% add back \topskip line +\advance\IEEEquantizedlength by \topskip +\@IEEEtrantmpcountC\IEEEquantizedlengthint\relax +\advance\@IEEEtrantmpcountC by 1\relax +% globally assign the results to macros we use here to escape the enclosing +% group without needing to call \global on any of the \@IEEEtrantmp variables. +\xdef\@IEEEquantizedtextheightlpcmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlength\relax +\xdef\@IEEEquantizedtextheightmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlengthdiff\relax +\xdef\@IEEEquantizedtextheightdiffmacro{\the\@IEEEtrantmpcountC}\relax +\endgroup +% locally assign the outputs here from the macros +\textheight\@IEEEquantizedtextheightmacro sp\relax +\IEEEquantizedtextheightdiff\@IEEEquantizedtextheightdiffmacro sp\relax +\edef\IEEEquantizedtextheightlpc{\@IEEEquantizedtextheightlpcmacro}} + + + +% usage: \IEEEsettopmargin[sample text]{mode: t, b, c, a, q}{margin/offset} +% Sets \topmargin based on the specified vertical margin. +% Takes into consideration the base 1in offset, \headheight, \headsep, +% \topskip, and (by default) the the actual height (or, for the bottom, depth) +% of the \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin +% b = bottom margin +% c = vertically centered, with the given offset +% a = adjust the vertical margins using the given offset +% q = adjust the margins using \IEEEquantizedtextheightdiff and the given offset +% For the offsets, positive values increase the top margin. +% \headheight, \headsep, \topskip and \textheight should be set properly for the +% given margins before calling this function. +\def\IEEEsettopmargin{\@ifnextchar [{\@IEEEsettopmargin}{\@IEEEsettopmargin[\IEEEdefaultsampletext]}} +\def\@IEEEsettopmargin[#1]#2#3{\@IEEEtrantmpdimenA #3\relax +\@IEEEextracttoken{#2}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsettopmargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken q\relax + % we need to adjust by half the \IEEEquantizedtextheightdiff value + \@IEEEtrantmpdimenB\IEEEquantizedtextheightdiff\relax + \divide\@IEEEtrantmpdimenB by 2\relax + % a positive \IEEEquantizedtextheightdiff means we need to reduce \topmargin + % because \textheight has been lenghtened + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken c\relax + \topmargin\paperheight + \advance\topmargin by -\textheight + % \textheight includes \topskip, but we should not count topskip whitespace here, backout + \advance \topmargin by \topskip + \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \divide\topmargin by 2\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken b\relax + \topmargin\paperheight + \advance\topmargin by -\textheight + % \textheight includes \topskip, but we should not count topskip whitespace here, backout + \advance \topmargin by \topskip + \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \advance\topmargin by -\@IEEEtrantmpdimenA\relax +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax + \fi + \topmargin\@IEEEtrantmpdimenA\relax + \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by \@IEEEtrantmpdimenB\relax +\fi\fi % if t, b, c +% convert desired top margin into actual \topmargin +% this is not done for the q or a modes because they are only adjustments +\advance \topmargin by -\topskip +\advance \topmargin by -1in +\advance \topmargin by -\headheight +\advance \topmargin by -\headsep +\fi\fi % if q, a +} + + + +% usage: \IEEEsetheadermargin[header sample][text sample]{mode: t, b, c, a}{margin/offset} +% Differentially adjusts \topmargin and \headsep (such that their sum is unchanged) +% based on the specified header margin. +% Takes into consideration the base 1in offset, \headheight, \topskip, and (by default) +% the actual height (or depth) of the \IEEEdefaultheadersampletext and +% \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin (top of the header text to the top of the page) +% b = bottom margin (bottom of the header text to the top of the main text) +% c = vertically centered between the main text and the top of the page, +% with the given offset +% a = adjust the vertical position using the given offset +% For the offsets, positive values move the header downward. +% \headheight, \headsep, \topskip and \topmargin should be set properly before +% calling this function. +\def\IEEEsetheadermargin{\@ifnextchar [{\@IEEEsetheadermargin}{\@IEEEsetheadermargin[\IEEEdefaultheadersampletext]}} +\def\@IEEEsetheadermargin[#1]{\@ifnextchar [{\@@IEEEsetheadermargin[#1]}{\@@IEEEsetheadermargin[#1][\IEEEdefaultsampletext]}} +\def\@@IEEEsetheadermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax +\@IEEEextracttoken{#3}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsetheadermargin\space are: t, b, c, and a.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetheadermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + % No need to do anything here and can pass through the adjustment + % value as is. The end adjustment of \topmargin and \headsep will + % do all that is needed +\else +\if\@IEEEextractedtoken c\relax + % get the bottom margin + \@IEEEtrantmpdimenB\headsep\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \advance\@IEEEtrantmpdimenB by \topskip + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header bottom margin + % subtract from it the top header margin + \advance\@IEEEtrantmpdimenB -1in\relax % take into consideration the system 1in offset of the top margin + \advance\@IEEEtrantmpdimenB by -\topmargin + \advance\@IEEEtrantmpdimenB by -\headheight + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the difference between the bottom and top margins + % we need to adjust by half this amount to center the header + \divide\@IEEEtrantmpdimenB by 2\relax + % and add to offset + \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB +\else +\if\@IEEEextractedtoken b\relax + \@IEEEtrantmpdimenB\headsep\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \advance\@IEEEtrantmpdimenB by \topskip + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header bottom margin + % get the difference between the actual and the desired + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA + \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsetheadermargin\space are: t, b, c and a.}\relax + \fi + \@IEEEtrantmpdimenB 1in\relax % take into consideration the system 1in offset of the top margin + \advance\@IEEEtrantmpdimenB by \topmargin + \advance\@IEEEtrantmpdimenB by \headheight + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header top margin + % get the difference between the desired and the actual + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\fi\fi % if t, b, c +\fi % if a +% advance \topmargin by the needed amount and reduce \headsep by the same +% so as not to disturb the location of the main text +\advance\topmargin by \@IEEEtrantmpdimenA\relax +\advance\headsep by -\@IEEEtrantmpdimenA\relax +} + + + +% usage: \IEEEsetfootermargin[footer sample][text sample]{mode: t, b, c, a}{margin/offset} +% Adjusts \footskip based on the specified footer margin. +% Takes into consideration the base 1in offset, \paperheight, \headheight, +% \headsep, \textheight and (by default) the actual height (or depth) of the +% \IEEEdefaultfootersampletext and \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin (top of the footer text to the bottom of the main text) +% b = bottom margin (bottom of the footer text to the bottom of page) +% c = vertically centered between the main text and the bottom of the page, +% with the given offset +% a = adjust the vertical position using the given offset +% For the offsets, positive values move the footer downward. +% \headheight, \headsep, \topskip, \topmargin, and \textheight should be set +% properly before calling this function. +\def\IEEEsetfootermargin{\@ifnextchar [{\@IEEEsetfootermargin}{\@IEEEsetfootermargin[\IEEEdefaultfootersampletext]}} +\def\@IEEEsetfootermargin[#1]{\@ifnextchar [{\@@IEEEsetfootermargin[#1]}{\@@IEEEsetfootermargin[#1][\IEEEdefaultsampletext]}} +\def\@@IEEEsetfootermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax +\@IEEEextracttoken{#3}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsetfootermargin\space are: t, b, c, and a.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetfootermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + % No need to do anything here and can pass through the adjustment + % value as is. The end adjustment of \footskip will do all that + % is needed +\else +\if\@IEEEextractedtoken c\relax + % calculate the bottom margin + \@IEEEtrantmpdimenB 1in\relax % system 1in offset + \advance\@IEEEtrantmpdimenB\topmargin\relax + \advance\@IEEEtrantmpdimenB\headheight\relax + \advance\@IEEEtrantmpdimenB\headsep\relax + \advance\@IEEEtrantmpdimenB\textheight\relax + \advance\@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB + \@IEEEtrantmpdimenB\paperheight + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin + % now subtract off the footer top margin + \advance\@IEEEtrantmpdimenB -\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the difference between the bottom + % and top footer margins + % our adjustment must be half this value to center the footer + \divide\@IEEEtrantmpdimenB by 2\relax + % add to the offset + \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB +\else +\if\@IEEEextractedtoken b\relax + % calculate the bottom margin + \@IEEEtrantmpdimenB 1in\relax % system 1in offset + \advance\@IEEEtrantmpdimenB\topmargin\relax + \advance\@IEEEtrantmpdimenB\headheight\relax + \advance\@IEEEtrantmpdimenB\headsep\relax + \advance\@IEEEtrantmpdimenB\textheight\relax + \advance\@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB + \@IEEEtrantmpdimenB\paperheight + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin + % get the difference between the actual and the desired + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA + \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsetfootermargin\space are: t, b, c and a.}\relax + \fi + \@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer top margin + % get the difference between the desired and the actual + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\fi\fi % if t, b, c +\fi % if a +% advance \footskip by the needed amount +\advance\footskip by \@IEEEtrantmpdimenA\relax +} + +% -- End V1.8a page setup commands -- + + + + + +% V1.6 +% LaTeX is a little to quick to use hyphenations +% So, we increase the penalty for their use and raise +% the badness level that triggers an underfull hbox +% warning. The author may still have to tweak things, +% but the appearance will be much better "right out +% of the box" than that under V1.5 and prior. +% TeX default is 50 +\hyphenpenalty=750 +\ifCLASSOPTIONcompsoc +\hyphenpenalty 500 +\fi +% If we didn't adjust the interword spacing, 2200 might be better. +% The TeX default is 1000 +\hbadness=1350 +% The IEEE does not use extra spacing after punctuation +\frenchspacing + +% V1.7 increase this a tad to discourage equation breaks +\binoppenalty=1000 % default 700 +\relpenalty=800 % default 500 + +% v1.8a increase these to discourage widows and orphans +\clubpenalty=1000 % default 150 +\widowpenalty=1000 % default 150 +\displaywidowpenalty=1000 % default 50 + + +% margin note stuff +\marginparsep 10pt +\marginparwidth 20pt +\marginparpush 25pt + + +% if things get too close, go ahead and let them touch +\lineskip 0pt +\normallineskip 0pt +\lineskiplimit 0pt +\normallineskiplimit 0pt + +% The distance from the lower edge of the text body to the +% footline +\footskip 0.4in + +% normally zero, should be relative to font height. +% put in a little rubber to help stop some bad breaks (underfull vboxes) +\parskip 0ex plus 0.2ex minus 0.1ex + +\parindent 1.0em +\ifCLASSOPTIONcompsoc + \parindent 1.5em +\fi + +\headheight 12pt +\headsep 18pt +% use the normal font baselineskip +% so that \topskip is unaffected by changes in \baselinestretch +\topskip=\@IEEEnormalsizeunitybaselineskip + + +% V1.8 \maxdepth defaults to 4pt, but should be font size dependent +\maxdepth=0.5\@IEEEnormalsizeunitybaselineskip +\textheight 58pc % 9.63in, 696pt + +% set the default top margin to 58pt +% which results in a \topmargin of -49.59pt for 10pt documents +\IEEEsettopmargin{t}{58pt} +% tweak textheight to a perfect integer number of lines/column. +% standard is: 9pt/63 lpc; 10pt/58 lpc; 11pt/52 lpc; 12pt/50 lpc +\IEEEquantizetextheight{c} +% tweak top margin so that the error is shared equally at the top and bottom +\IEEEsettopmargin{q}{0sp} + + +\columnsep 1pc +\textwidth 43pc % 2 x 21pc + 1pc = 43pc + +% set the default side margins to center the text +\IEEEsetsidemargin{c}{0pt} + + +% adjust margins for default conference mode +\ifCLASSOPTIONconference + \textheight 9.25in % The standard for conferences (668.4975pt) + \IEEEsettopmargin{t}{0.75in} + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/61 lpc; 10pt/56 lpc; 11pt/50 lpc; 12pt/48 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} +\fi + + +% compsoc text sizes, margins and spacings +\ifCLASSOPTIONcompsoc + \columnsep 12bp + % CS specs for \textwdith are 6.875in + % \textwidth 6.875in + % however, measurements from proofs show they are using 3.5in columns + \textwidth 7in + \advance\textwidth by \columnsep + % set the side margins to center the text + \IEEEsetsidemargin{c}{0pt} + % top/bottom margins to center + % could just set \textheight to 9.75in for all the different paper sizes + % and then quantize, but we'll do it the long way here to allow for easy + % future per-paper size adjustments + \IEEEsettextheight{0.625in}{0.625in}% 11in - 2 * 0.625in = 9.75in is the standard text height for compsoc journals + \IEEEsettopmargin{t}{0.625in} + \if@IEEEusingcspaper + \IEEEsettextheight{0.5in}{0.5in}% 10.75in - 2 * 0.5in = 9.75in + \IEEEsettopmargin{t}{0.5in} + \fi + \if@IEEEusingAfourpaper + \IEEEsettextheight{24.675mm}{24.675mm}% 297mm - 2 * 24.675mm = 247.650mm (9.75in) + \IEEEsettopmargin{t}{24.675mm} + \fi + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/65 lpc; 10pt/61 lpc; 11pt/53 lpc; 12pt/49 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} + +% compsoc conference + \ifCLASSOPTIONconference + % compsoc conference use a larger value for columnsep + \columnsep 0.25in + \IEEEsettextwidth{0.75in}{0.75in} + % set the side margins to center the text (0.75in for letterpaper) + \IEEEsetsidemargin{c}{0pt} + % compsoc conferences want 1in top and bottom margin + \IEEEsettextheight{1in}{1in} + \IEEEsettopmargin{t}{1in} + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/58 lpc; 10pt/53 lpc; 11pt/48 lpc; 12pt/46 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} + \fi +\fi + + + +% draft mode settings override that of all other modes +% provides a nice 1in margin all around the paper and extra +% space between the lines for editor's comments +\ifCLASSOPTIONdraftcls + % we want 1in side margins regardless of paper type + \IEEEsettextwidth{1in}{1in} + \IEEEsetsidemargin{c}{0pt} + % want 1in top and bottom margins + \IEEEsettextheight{1in}{1in} + \IEEEsettopmargin{t}{1in} + % digitize textheight to be an integer number of lines. + % this may cause the top and bottom margins to be off a tad + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} +\fi + + + +% process CLASSINPUT inner/outer margin +% if inner margin defined, but outer margin not, set outer to inner. +\ifx\CLASSINPUTinnersidemargin\@IEEEundefined +\else + \ifx\CLASSINPUToutersidemargin\@IEEEundefined + \edef\CLASSINPUToutersidemargin{\CLASSINPUTinnersidemargin} + \fi +\fi + +\ifx\CLASSINPUToutersidemargin\@IEEEundefined +\else + % if outer margin defined, but inner margin not, set inner to outer. + \ifx\CLASSINPUTinnersidemargin\@IEEEundefined + \edef\CLASSINPUTinnersidemargin{\CLASSINPUToutersidemargin} + \fi + \IEEEsettextwidth{\CLASSINPUTinnersidemargin}{\CLASSINPUToutersidemargin} + \IEEEsetsidemargin{i}{\CLASSINPUTinnersidemargin} + \typeout{** ATTENTION: Overriding inner side margin to \CLASSINPUTinnersidemargin\space and + outer side margin to \CLASSINPUToutersidemargin\space via \string\CLASSINPUT.} +\fi + + + +% process CLASSINPUT top/bottom text margin +% if toptext margin defined, but bottomtext margin not, set bottomtext to toptext margin +\ifx\CLASSINPUTtoptextmargin\@IEEEundefined +\else + \ifx\CLASSINPUTbottomtextmargin\@IEEEundefined + \edef\CLASSINPUTbottomtextmargin{\CLASSINPUTtoptextmargin} + \fi +\fi + +\ifx\CLASSINPUTbottomtextmargin\@IEEEundefined +\else + % if bottomtext margin defined, but toptext margin not, set toptext to bottomtext margin + \ifx\CLASSINPUTtoptextmargin\@IEEEundefined + \edef\CLASSINPUTtoptextmargin{\CLASSINPUTbottomtextmargin} + \fi + \IEEEsettextheight{\CLASSINPUTtoptextmargin}{\CLASSINPUTbottomtextmargin} + \IEEEsettopmargin{t}{\CLASSINPUTtoptextmargin} + \typeout{** ATTENTION: Overriding top text margin to \CLASSINPUTtoptextmargin\space and + bottom text margin to \CLASSINPUTbottomtextmargin\space via \string\CLASSINPUT.} +\fi + + + +% default to center header and footer text in the margins +\IEEEsetheadermargin{c}{0pt} +\IEEEsetfootermargin{c}{0pt} + +% adjust header and footer positions for compsoc journals +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONjournal + \IEEEsetheadermargin{b}{\@IEEEnormalsizeunitybaselineskip} + \IEEEsetfootermargin{t}{\@IEEEnormalsizeunitybaselineskip} + \fi +\fi + + +% V1.8a display lines per column info message on user's console +\def\IEEEdisplayinfolinespercolumn{\@IEEEtrantmpdimenA=\textheight +% topskip represents only one line even if > baselineskip +\advance\@IEEEtrantmpdimenA by -1\topskip +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenA +\@IEEEtrantmpcountB=\@IEEEtrantmpdimenA +\divide\@IEEEtrantmpcountB by \baselineskip +% need to add one line to include topskip (first) line +\advance\@IEEEtrantmpcountB by 1 +% save lines per column value as text +\edef\@IEEEnumlinespercolumninfotxt{\the\@IEEEtrantmpcountB} +% backout topskip advance to allow direct \@IEEEtrantmpcountA comparison +\advance\@IEEEtrantmpcountB by -1 +% restore value as text height (without topskip) rather than just as number of lines +\multiply\@IEEEtrantmpcountB by \baselineskip +% is the column height an integer number of lines per column? +\ifnum\@IEEEtrantmpcountA=\@IEEEtrantmpcountB +\edef\@IEEEnumlinespercolumnexactinfotxt{exact} +\else +\@IEEEtrantmpdimenA\@IEEEtrantmpcountA sp\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpcountB sp\relax +\edef\@IEEEnumlinespercolumnexactinfotxt{approximate, difference = \the\@IEEEtrantmpdimenA} +\fi +\typeout{-- Lines per column: \@IEEEnumlinespercolumninfotxt\space (\@IEEEnumlinespercolumnexactinfotxt).}} +% delay execution till start of document to allow for user changes +\AtBeginDocument{\IEEEdisplayinfolinespercolumn} + + + +% LIST SPACING CONTROLS + +% Controls the amount of EXTRA spacing +% above and below \trivlist +% Both \list and IED lists override this. +% However, \trivlist will use this as will most +% things built from \trivlist like the \center +% environment. +\topsep 0.5\baselineskip + +% Controls the additional spacing around lists preceded +% or followed by blank lines. the IEEE does not increase +% spacing before or after paragraphs so it is set to zero. +% \z@ is the same as zero, but faster. +\partopsep \z@ + +% Controls the spacing between paragraphs in lists. +% The IEEE does not increase spacing before or after paragraphs +% so this is also zero. +% With IEEEtran.cls, global changes to +% this value DO affect lists (but not IED lists). +\parsep \z@ + +% Controls the extra spacing between list items. +% The IEEE does not put extra spacing between items. +% With IEEEtran.cls, global changes to this value DO affect +% lists (but not IED lists). +\itemsep \z@ + +% \itemindent is the amount to indent the FIRST line of a list +% item. It is auto set to zero within the \list environment. To alter +% it, you have to do so when you call the \list. +% However, the IEEE uses this for the theorem environment +% There is an alternative value for this near \leftmargini below +\itemindent -1em + +% \leftmargin, the spacing from the left margin of the main text to +% the left of the main body of a list item is set by \list. +% Hence this statement does nothing for lists. +% But, quote and verse do use it for indention. +\leftmargin 2em + +% we retain this stuff from the older IEEEtran.cls so that \list +% will work the same way as before. However, itemize, enumerate and +% description (IED) could care less about what these are as they +% all are overridden. +\leftmargini 2em +%\itemindent 2em % Alternative values: sometimes used. +%\leftmargini 0em +\leftmarginii 1em +\leftmarginiii 1.5em +\leftmarginiv 1.5em +\leftmarginv 1.0em +\leftmarginvi 1.0em +\labelsep 0.5em +\labelwidth \z@ + + +% The old IEEEtran.cls behavior of \list is retained. +% However, the new V1.3 IED list environments override all the +% @list stuff (\@listX is called within \list for the +% appropriate level just before the user's list_decl is called). +% \topsep is now 2pt as the IEEE puts a little extra space around +% lists - used by those non-IED macros that depend on \list. +% Note that \parsep and \itemsep are not redefined as in +% the sizexx.clo \@listX (which article.cls uses) so global changes +% of these values DO affect \list +% +\def\@listi{\leftmargin\leftmargini \topsep 2pt plus 1pt minus 1pt} +\let\@listI\@listi +\def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi% + \advance\labelwidth-\labelsep \topsep 2pt} + + +% The IEEE uses 5) not 5. +\def\labelenumi{\theenumi)} \def\theenumi{\arabic{enumi}} + +% The IEEE uses a) not (a) +\def\labelenumii{\theenumii)} \def\theenumii{\alph{enumii}} + +% The IEEE uses iii) not iii. +\def\labelenumiii{\theenumiii)} \def\theenumiii{\roman{enumiii}} + +% The IEEE uses A) not A. +\def\labelenumiv{\theenumiv)} \def\theenumiv{\Alph{enumiv}} + +% exactly the same as in article.cls +\def\p@enumii{\theenumi} +\def\p@enumiii{\theenumi(\theenumii)} +\def\p@enumiv{\p@enumiii\theenumiii} + +% itemized list label styles +\def\labelitemi{$\scriptstyle\bullet$} +\def\labelitemii{\textbf{--}} +\def\labelitemiii{$\ast$} +\def\labelitemiv{$\cdot$} + + + +% **** V1.3 ENHANCEMENTS **** +% Itemize, Enumerate and Description (IED) List Controls +% *************************** +% +% +% The IEEE seems to use at least two different values by +% which ITEMIZED list labels are indented to the right +% For The Journal of Lightwave Technology (JLT) and The Journal +% on Selected Areas in Communications (JSAC), they tend to use +% an indention equal to \parindent. For Transactions on Communications +% they tend to indent ITEMIZED lists a little more--- 1.3\parindent. +% We'll provide both values here for you so that you can choose +% which one you like in your document using a command such as: +% setlength{\IEEEilabelindent}{\IEEEilabelindentB} +\newdimen\IEEEilabelindentA +\IEEEilabelindentA \parindent + +\newdimen\IEEEilabelindentB +\IEEEilabelindentB 1.3\parindent +% However, we'll default to using \parindent +% which makes more sense to me +\newdimen\IEEEilabelindent +\IEEEilabelindent \IEEEilabelindentA + + +% This controls the default amount the enumerated list labels +% are indented to the right. +% Normally, this is the same as the paragraph indention +\newdimen\IEEEelabelindent +\IEEEelabelindent \parindent + +% This controls the default amount the description list labels +% are indented to the right. +% Normally, this is the same as the paragraph indention +\newdimen\IEEEdlabelindent +\IEEEdlabelindent \parindent + +% This is the value actually used within the IED lists. +% The IED environments automatically set its value to +% one of the three values above, so global changes do +% not have any effect +\newdimen\IEEElabelindent +\IEEElabelindent \parindent + +% The actual amount labels will be indented is +% \IEEElabelindent multiplied by the factor below +% corresponding to the level of nesting depth +% This provides a means by which the user can +% alter the effective \IEEElabelindent for deeper +% levels +% There may not be such a thing as correct "standard IEEE" +% values. What the IEEE actually does may depend on the specific +% circumstances. +% The first list level almost always has full indention. +% The second levels I've seen have only 75% of the normal indentation +% Three level or greater nestings are very rare. I am guessing +% that they don't use any indentation. +\def\IEEElabelindentfactori{1.0} % almost always one +\def\IEEElabelindentfactorii{0.75} % 0.0 or 1.0 may be used in some cases +\def\IEEElabelindentfactoriii{0.0} % 0.75? 0.5? 0.0? +\def\IEEElabelindentfactoriv{0.0} +\def\IEEElabelindentfactorv{0.0} +\def\IEEElabelindentfactorvi{0.0} + +% value actually used within IED lists, it is auto +% set to one of the 6 values above +% global changes here have no effect +\def\IEEElabelindentfactor{1.0} + +% This controls the default spacing between the end of the IED +% list labels and the list text, when normal text is used for +% the labels. +% compsoc uses a larger value here, but we'll set that later +% in the class so that this code block area can be extracted +% as-is for IEEEtrantools.sty +\newdimen\IEEEiednormlabelsep +\IEEEiednormlabelsep 0.6em + +% This controls the default spacing between the end of the IED +% list labels and the list text, when math symbols are used for +% the labels (nomenclature lists). The IEEE usually increases the +% spacing in these cases +\newdimen\IEEEiedmathlabelsep +\IEEEiedmathlabelsep 1.2em + +% This controls the extra vertical separation put above and +% below each IED list. the IEEE usually puts a little extra spacing +% around each list. However, this spacing is barely noticeable. +% compsoc uses a larger value here, but we'll set that later +% in the class so that this code block area can be extracted +% as-is for IEEEtrantools.sty +\newskip\IEEEiedtopsep +\IEEEiedtopsep 2pt plus 1pt minus 1pt + + +% This command is executed within each IED list environment +% at the beginning of the list. You can use this to set the +% parameters for some/all your IED list(s) without disturbing +% global parameters that affect things other than lists. +% i.e., renewcommand{\IEEEiedlistdecl}{\setlength{\labelsep}{5em}} +% will alter the \labelsep for the next list(s) until +% \IEEEiedlistdecl is redefined. +\def\IEEEiedlistdecl{\relax} + +% This command provides an easy way to set \leftmargin based +% on the \labelwidth, \labelsep and the argument \IEEElabelindent +% Usage: \IEEEcalcleftmargin{width-to-indent-the-label} +% output is in the \leftmargin variable, i.e., effectively: +% \leftmargin = argument + \labelwidth + \labelsep +% Note controlled spacing here, shield end of lines with % +\def\IEEEcalcleftmargin#1{\setlength{\leftmargin}{#1}% +\addtolength{\leftmargin}{\labelwidth}% +\addtolength{\leftmargin}{\labelsep}} + +% This command provides an easy way to set \labelwidth to the +% width of the given text. It is the same as +% \settowidth{\labelwidth}{label-text} +% and useful as a shorter alternative. +% Typically used to set \labelwidth to be the width +% of the longest label in the list +\def\IEEEsetlabelwidth#1{\settowidth{\labelwidth}{#1}} + +% When this command is executed, IED lists will use the +% IEEEiedmathlabelsep label separation rather than the normal +% spacing. To have an effect, this command must be executed via +% the \IEEEiedlistdecl or within the option of the IED list +% environments. +\def\IEEEusemathlabelsep{\setlength{\labelsep}{\IEEEiedmathlabelsep}} + +% A flag which controls whether the IED lists automatically +% calculate \leftmargin from \IEEElabelindent, \labelwidth and \labelsep +% Useful if you want to specify your own \leftmargin +% This flag must be set (\IEEEnocalcleftmargintrue or \IEEEnocalcleftmarginfalse) +% via the \IEEEiedlistdecl or within the option of the IED list +% environments to have an effect. +\newif\ifIEEEnocalcleftmargin +\IEEEnocalcleftmarginfalse + +% A flag which controls whether \IEEElabelindent is multiplied by +% the \IEEElabelindentfactor for each list level. +% This flag must be set via the \IEEEiedlistdecl or within the option +% of the IED list environments to have an effect. +\newif\ifIEEEnolabelindentfactor +\IEEEnolabelindentfactorfalse + + +% internal variable to indicate type of IED label +% justification +% 0 - left; 1 - center; 2 - right +\def\@IEEEiedjustify{0} + + +% commands to allow the user to control IED +% label justifications. Use these commands within +% the IED environment option or in the \IEEEiedlistdecl +% Note that changing the normal list justifications +% is nonstandard and the IEEE may not like it if you do so! +% I include these commands as they may be helpful to +% those who are using these enhanced list controls for +% other non-IEEE related LaTeX work. +% itemize and enumerate automatically default to right +% justification, description defaults to left. +\def\IEEEiedlabeljustifyl{\def\@IEEEiedjustify{0}}%left +\def\IEEEiedlabeljustifyc{\def\@IEEEiedjustify{1}}%center +\def\IEEEiedlabeljustifyr{\def\@IEEEiedjustify{2}}%right + + + + +% commands to save to and restore from the list parameter copies +% this allows us to set all the list parameters within +% the list_decl and prevent \list (and its \@list) +% from overriding any of our parameters +% V1.6 use \edefs instead of dimen's to conserve dimen registers +% Note controlled spacing here, shield end of lines with % +\def\@IEEEsavelistparams{\edef\@IEEEiedtopsep{\the\topsep}% +\edef\@IEEEiedlabelwidth{\the\labelwidth}% +\edef\@IEEEiedlabelsep{\the\labelsep}% +\edef\@IEEEiedleftmargin{\the\leftmargin}% +\edef\@IEEEiedpartopsep{\the\partopsep}% +\edef\@IEEEiedparsep{\the\parsep}% +\edef\@IEEEieditemsep{\the\itemsep}% +\edef\@IEEEiedrightmargin{\the\rightmargin}% +\edef\@IEEEiedlistparindent{\the\listparindent}% +\edef\@IEEEieditemindent{\the\itemindent}} + +% Note controlled spacing here +\def\@IEEErestorelistparams{\topsep\@IEEEiedtopsep\relax% +\labelwidth\@IEEEiedlabelwidth\relax% +\labelsep\@IEEEiedlabelsep\relax% +\leftmargin\@IEEEiedleftmargin\relax% +\partopsep\@IEEEiedpartopsep\relax% +\parsep\@IEEEiedparsep\relax% +\itemsep\@IEEEieditemsep\relax% +\rightmargin\@IEEEiedrightmargin\relax% +\listparindent\@IEEEiedlistparindent\relax% +\itemindent\@IEEEieditemindent\relax} + + +% v1.6b provide original LaTeX IED list environments +% note that latex.ltx defines \itemize and \enumerate, but not \description +% which must be created by the base classes +% save original LaTeX itemize and enumerate +\let\LaTeXitemize\itemize +\let\endLaTeXitemize\enditemize +\let\LaTeXenumerate\enumerate +\let\endLaTeXenumerate\endenumerate + +% provide original LaTeX description environment from article.cls +\newenvironment{LaTeXdescription} + {\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\endlist} +\newcommand*\descriptionlabel[1]{\hspace\labelsep + \normalfont\bfseries #1} + + +% override LaTeX's default IED lists +\def\itemize{\@IEEEitemize} +\def\enditemize{\@endIEEEitemize} +\def\enumerate{\@IEEEenumerate} +\def\endenumerate{\@endIEEEenumerate} +\def\description{\@IEEEdescription} +\def\enddescription{\@endIEEEdescription} + +% provide the user with aliases - may help those using packages that +% override itemize, enumerate, or description +\def\IEEEitemize{\@IEEEitemize} +\def\endIEEEitemize{\@endIEEEitemize} +\def\IEEEenumerate{\@IEEEenumerate} +\def\endIEEEenumerate{\@endIEEEenumerate} +\def\IEEEdescription{\@IEEEdescription} +\def\endIEEEdescription{\@endIEEEdescription} + + +% V1.6 we want to keep the IEEEtran IED list definitions as our own internal +% commands so they are protected against redefinition +\def\@IEEEitemize{\@ifnextchar[{\@@IEEEitemize}{\@@IEEEitemize[\relax]}} +\def\@IEEEenumerate{\@ifnextchar[{\@@IEEEenumerate}{\@@IEEEenumerate[\relax]}} +\def\@IEEEdescription{\@ifnextchar[{\@@IEEEdescription}{\@@IEEEdescription[\relax]}} +\def\@endIEEEitemize{\endlist} +\def\@endIEEEenumerate{\endlist} +\def\@endIEEEdescription{\endlist} + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran itemized list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEitemize[#1]{% + \ifnum\@itemdepth>3\relax\@toodeep\else% + \ifnum\@listdepth>5\relax\@toodeep\else% + \advance\@itemdepth\@ne% + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{2}% right justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEilabelindent% + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % calculate the label width + % the user can override this later if + % they specified a \labelwidth + \settowidth{\labelwidth}{\csname labelitem\romannumeral\the\@itemdepth\endcsname}% + \@IEEEsavelistparams% save our list parameters + \list{\csname\@itemitem\endcsname}{% + \@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % IEEElabelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}% + \fi}\fi\fi}% + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran enumerate list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEenumerate[#1]{% + \ifnum\@enumdepth>3\relax\@toodeep\else% + \ifnum\@listdepth>5\relax\@toodeep\else% + \advance\@enumdepth\@ne% + \edef\@enumctr{enum\romannumeral\the\@enumdepth}% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{2}% right justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEelabelindent% + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % calculate the label width + % We'll set it to the width suitable for all labels using + % normalfont 1) to 9) + % The user can override this later + \settowidth{\labelwidth}{9)}% + \@IEEEsavelistparams% save our list parameters + \list{\csname label\@enumctr\endcsname}{\usecounter{\@enumctr}% + \@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % IEEElabelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}% + \fi}\fi\fi}% + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran description list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEdescription[#1]{% + \ifnum\@listdepth>5\relax\@toodeep\else% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{0}% left justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEdlabelindent% + % assume normal labelsep + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % Bogus label width in case the user forgets + % to set it. + % TIP: If you want to see what a variable's width is you + % can use the TeX command \showthe\width-variable to + % display it on the screen during compilation + % (This might be helpful to know when you need to find out + % which label is the widest) + \settowidth{\labelwidth}{Hello}% + \@IEEEsavelistparams% save our list parameters + \list{}{\@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % labelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}\relax% + \fi}\fi} + +% v1.6b we use one makelabel that does justification as needed. +\def\@IEEEiedmakelabel#1{\relax\if\@IEEEiedjustify 0\relax +\makebox[\labelwidth][l]{\normalfont #1}\else +\if\@IEEEiedjustify 1\relax +\makebox[\labelwidth][c]{\normalfont #1}\else +\makebox[\labelwidth][r]{\normalfont #1}\fi\fi} + + +% compsoc uses a larger value for the normal labelsep +% and also extra spacing above and below each list +\ifCLASSOPTIONcompsoc + \IEEEiednormlabelsep 1.2em + \IEEEiedtopsep 6pt plus 3pt minus 3pt +\fi + + +% VERSE and QUOTE +% V1.7 define environments with newenvironment +\newenvironment{verse}{\let\\=\@centercr + \list{}{\itemsep\z@ \itemindent -1.5em \listparindent \itemindent + \rightmargin\leftmargin\advance\leftmargin 1.5em}\item\relax} + {\endlist} +\newenvironment{quotation}{\list{}{\listparindent 1.5em \itemindent\listparindent + \rightmargin\leftmargin \parsep 0pt plus 1pt}\item\relax} + {\endlist} +\newenvironment{quote}{\list{}{\rightmargin\leftmargin}\item\relax} + {\endlist} + + +% \titlepage +% provided only for backward compatibility. \maketitle is the correct +% way to create the title page. +\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \else \newpage \fi \thispagestyle{empty}\c@page\z@} +\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi} + +% standard values from article.cls +\arraycolsep 5pt +\arrayrulewidth .4pt +\doublerulesep 2pt + +\tabcolsep 6pt +\tabbingsep 0.5em + + +%% FOOTNOTES +% +%\skip\footins 10pt plus 4pt minus 2pt +% V1.6 respond to changes in font size +% space added above the footnotes (if present) +\skip\footins 0.9\baselineskip plus 0.4\baselineskip minus 0.2\baselineskip + +% V1.6, we need to make \footnotesep responsive to changes +% in \baselineskip or strange spacings will result when in +% draft mode. Here is a little LaTeX secret - \footnotesep +% determines the height of an invisible strut that is placed +% *above* the baseline of footnotes after the first. Since +% LaTeX considers the space for characters to be 0.7\baselineskip +% above the baseline and 0.3\baselineskip below it, we need to +% use 0.7\baselineskip as a \footnotesep to maintain equal spacing +% between all the lines of the footnotes. The IEEE often uses a tad +% more, so use 0.8\baselineskip. This slightly larger value also helps +% the text to clear the footnote marks. Note that \thanks in IEEEtran +% uses its own value of \footnotesep which is set in \maketitle. +{\footnotesize +\global\footnotesep 0.8\baselineskip} + + +\skip\@mpfootins = \skip\footins +\fboxsep = 3pt +\fboxrule = .4pt +% V1.6 use 1em, then use LaTeX2e's \@makefnmark +% Note that the IEEE normally *left* aligns the footnote marks, so we don't need +% box resizing tricks here. +\long\def\@makefntext#1{\parindent 1em\indent\hbox{\@makefnmark}#1}% V1.6 use 1em +% V1.7 compsoc does not use superscipts for footnote marks +\ifCLASSOPTIONcompsoc +\def\@IEEEcompsocmakefnmark{\hbox{\normalfont\@thefnmark.\ }} +\long\def\@makefntext#1{\parindent 1em\indent\hbox{\@IEEEcompsocmakefnmark}#1} +\fi + +% The IEEE does not use footnote rules +\def\footnoterule{} + +% V1.7 for compsoc, the IEEE uses a footnote rule only for \thanks. We devise a "one-shot" +% system to implement this. +\newif\if@IEEEenableoneshotfootnoterule +\@IEEEenableoneshotfootnoterulefalse +\ifCLASSOPTIONcompsoc +\def\footnoterule{\relax\if@IEEEenableoneshotfootnoterule +\kern-5pt +\hbox to \columnwidth{\hfill\vrule width 0.5\columnwidth height 0.4pt\hfill} +\kern4.6pt +\global\@IEEEenableoneshotfootnoterulefalse +\else +\relax +\fi} +\fi + +% V1.6 do not allow LaTeX to break a footnote across multiple pages +\interfootnotelinepenalty=10000 + +% V1.6 discourage breaks within equations +% Note that amsmath normally sets this to 10000, +% but LaTeX2e normally uses 100. +\interdisplaylinepenalty=2500 + +% default allows section depth up to /paragraph +\setcounter{secnumdepth}{4} + +% technotes do not allow /paragraph +\ifCLASSOPTIONtechnote + \setcounter{secnumdepth}{3} +\fi +% neither do compsoc conferences +\@IEEEcompsocconfonly{\setcounter{secnumdepth}{3}} + + +\newcounter{section} +\newcounter{subsection}[section] +\newcounter{subsubsection}[subsection] +\newcounter{paragraph}[subsubsection] + +% used only by IEEEtran's IEEEeqnarray as other packages may +% have their own, different, implementations +\newcounter{IEEEsubequation}[equation] + +% as shown when called by user from \ref, \label and in table of contents +\def\theequation{\arabic{equation}} % 1 +\def\theIEEEsubequation{\theequation\alph{IEEEsubequation}} % 1a (used only by IEEEtran's IEEEeqnarray) +\ifCLASSOPTIONcompsoc +% compsoc is all arabic +\def\thesection{\arabic{section}} +\def\thesubsection{\thesection.\arabic{subsection}} +\def\thesubsubsection{\thesubsection.\arabic{subsubsection}} +\def\theparagraph{\thesubsubsection.\arabic{paragraph}} +\else +\def\thesection{\Roman{section}} % I +% V1.7, \mbox prevents breaks around - +\def\thesubsection{\mbox{\thesection-\Alph{subsection}}} % I-A +% V1.7 use I-A1 format used by the IEEE rather than I-A.1 +\def\thesubsubsection{\thesubsection\arabic{subsubsection}} % I-A1 +\def\theparagraph{\thesubsubsection\alph{paragraph}} % I-A1a +\fi + +% From Heiko Oberdiek. Because of the \mbox in \thesubsection, we need to +% tell hyperref to disable the \mbox command when making PDF bookmarks. +% This done already with hyperref.sty version 6.74o and later, but +% it will not hurt to do it here again for users of older versions. +\@ifundefined{pdfstringdefPreHook}{\let\pdfstringdefPreHook\@empty}{}% +\g@addto@macro\pdfstringdefPreHook{\let\mbox\relax} + + +% Main text forms (how shown in main text headings) +% V1.6, using \thesection in \thesectiondis allows changes +% in the former to automatically appear in the latter +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONconference% compsoc conference + \def\thesectiondis{\thesection.} + \def\thesubsectiondis{\thesectiondis\arabic{subsection}.} + \def\thesubsubsectiondis{\thesubsectiondis\arabic{subsubsection}.} + \def\theparagraphdis{\thesubsubsectiondis\arabic{paragraph}.} + \else% compsoc not conferencs + \def\thesectiondis{\thesection} + \def\thesubsectiondis{\thesectiondis.\arabic{subsection}} + \def\thesubsubsectiondis{\thesubsectiondis.\arabic{subsubsection}} + \def\theparagraphdis{\thesubsubsectiondis.\arabic{paragraph}} + \fi +\else% not compsoc + \def\thesectiondis{\thesection.} % I. + \def\thesubsectiondis{\Alph{subsection}.} % B. + \def\thesubsubsectiondis{\arabic{subsubsection})} % 3) + \def\theparagraphdis{\alph{paragraph})} % d) +\fi + +% just like LaTeX2e's \@eqnnum +\def\theequationdis{{\normalfont \normalcolor (\theequation)}}% (1) +% IEEEsubequation used only by IEEEtran's IEEEeqnarray +\def\theIEEEsubequationdis{{\normalfont \normalcolor (\theIEEEsubequation)}}% (1a) +% redirect LaTeX2e's equation number display and all that depend on +% it, through IEEEtran's \theequationdis +\def\@eqnnum{\theequationdis} + + + +% V1.7 provide string macros as article.cls does +\def\contentsname{Contents} +\def\listfigurename{List of Figures} +\def\listtablename{List of Tables} +\def\refname{References} +\def\indexname{Index} +\def\figurename{Fig.} +\def\tablename{TABLE} +\@IEEEcompsocconfonly{\def\figurename{Figure}} +\def\partname{Part} +\def\appendixname{Appendix} +\def\abstractname{Abstract} +% IEEE specific names +\def\IEEEkeywordsname{Index Terms} +\def\IEEEproofname{Proof} + + +% LIST OF FIGURES AND TABLES AND TABLE OF CONTENTS +% +\def\@pnumwidth{1.55em} +\def\@tocrmarg{2.55em} +\def\@dotsep{4.5} +\setcounter{tocdepth}{3} + +% adjusted some spacings here so that section numbers will not easily +% collide with the section titles. +% VIII; VIII-A; and VIII-A.1 are usually the worst offenders. +% MDS 1/2001 +\def\tableofcontents{\section*{\contentsname}\@starttoc{toc}} +\def\l@section#1#2{\addpenalty{\@secpenalty}\addvspace{1.0em plus 1pt}% + \@tempdima 2.75em \begingroup \parindent \z@ \rightskip \@pnumwidth% + \parfillskip-\@pnumwidth {\bfseries\leavevmode #1}\hfil\hbox to\@pnumwidth{\hss #2}\par% + \endgroup} +% argument format #1:level, #2:labelindent,#3:labelsep +\def\l@subsection{\@dottedtocline{2}{2.75em}{3.75em}} +\def\l@subsubsection{\@dottedtocline{3}{6.5em}{4.5em}} +% must provide \l@ defs for ALL sublevels EVEN if tocdepth +% is such as they will not appear in the table of contents +% these defs are how TOC knows what level these things are! +\def\l@paragraph{\@dottedtocline{4}{6.5em}{5.5em}} +\def\l@subparagraph{\@dottedtocline{5}{6.5em}{6.5em}} +\def\listoffigures{\section*{\listfigurename}\@starttoc{lof}} +\def\l@figure{\@dottedtocline{1}{0em}{2.75em}} +\def\listoftables{\section*{\listtablename}\@starttoc{lot}} +\let\l@table\l@figure + + +% Definitions for floats +% +% Normal Floats +% V1.8 floatsep et al. revised down by 0.15\baselineskip +% to account for the sideeffects of \topskip compensation +\floatsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip +\textfloatsep 1.55\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip +\@fptop 0pt plus 1fil +\@fpsep 0.75\baselineskip plus 2fil +\@fpbot 0pt plus 1fil +\def\topfraction{0.9} +\def\bottomfraction{0.4} +\def\floatpagefraction{0.8} +% V1.7, let top floats approach 90% of page +\def\textfraction{0.1} + +% Double Column Floats +\dblfloatsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip + +\dbltextfloatsep 1.55\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip +% Note that it would be nice if the rubber here actually worked in LaTeX2e. +% There is a long standing limitation in LaTeX, first discovered (to the best +% of my knowledge) by Alan Jeffrey in 1992. LaTeX ignores the stretchable +% portion of \dbltextfloatsep, and as a result, double column figures can and +% do result in an non-integer number of lines in the main text columns with +% underfull vbox errors as a consequence. A post to comp.text.tex +% by Donald Arseneau confirms that this had not yet been fixed in 1998. +% IEEEtran V1.6 will fix this problem for you in the titles, but it doesn't +% protect you from other double floats. Happy vspace'ing. + +\@dblfptop 0pt plus 1fil +\@dblfpsep 0.75\baselineskip plus 2fil +\@dblfpbot 0pt plus 1fil +\def\dbltopfraction{0.8} +\def\dblfloatpagefraction{0.8} +\setcounter{dbltopnumber}{4} + +\intextsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip +\setcounter{topnumber}{2} +\setcounter{bottomnumber}{2} +\setcounter{totalnumber}{4} + + + +% article class provides these, we should too. +\newlength\abovecaptionskip +\newlength\belowcaptionskip +% but only \abovecaptionskip is used above figure captions and *below* table +% captions +\setlength\abovecaptionskip{0.5\baselineskip} +% compsoc journals are a little more generous +\ifCLASSOPTIONcompsoc\ifCLASSOPTIONjournal + \setlength\abovecaptionskip{0.75\baselineskip} +\fi\fi +\setlength\belowcaptionskip{0pt} +% V1.6 create hooks in case the caption spacing ever needs to be +% overridden by a user +\def\@IEEEfigurecaptionsepspace{\vskip\abovecaptionskip\relax}% +\def\@IEEEtablecaptionsepspace{\vskip\abovecaptionskip\relax}% + + +% 1.6b revise caption system so that \@makecaption uses two arguments +% as with LaTeX2e. Otherwise, there will be problems when using hyperref. +\def\@IEEEtablestring{table} + + +% V1.8 compensate for \topskip so top of top figures align with tops of the first lines of main text +% here we calculate a space equal to the amount \topskip exceeds the main text height +% we hook in at \@floatboxreset +\def\@IEEEfiguretopskipspace{\ifdim\prevdepth=-1000pt\relax +\setlength{\@IEEEtrantmpdimenA}{1\topskip}\relax +\addtolength{\@IEEEtrantmpdimenA}{-0.7\@IEEEnormalsizeunitybaselineskip}\relax +\vspace*{\@IEEEtrantmpdimenA}\fi} +% V1.8 compensate for \topskip at the top of top tables so caption text is on main text baseline +% use a strut set on the caption baseline within \@makecaption +\def\@IEEEtabletopskipstrut{\ifdim\prevdepth=-1000pt\rule{0pt}{\topskip}\fi} +% the \ifdim\prevdepth checks are always expected to be true for IEEE style float caption ordering +% because top of figure content and top of captions in tables is the first thing on the vertical +% list of these floats +% thanks to Donald Arseneau for his 2000/11/11 post "Re: caption hacking" with info on this topic. + + +\ifCLASSOPTIONcompsoc +% V1.7 compsoc \@makecaption +\ifCLASSOPTIONconference% compsoc conference +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\footnotesize {#1.}\nobreakspace\scshape #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\footnotesize \noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, center +\else% +\hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}% +\fi\fi} +% +\else% nonconference compsoc +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\sffamily\footnotesize #1}\\{\normalfont\sffamily\footnotesize #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +\setbox\@tempboxa\hbox{\normalfont\sffamily\footnotesize {#1.}\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\sffamily\footnotesize {#1.}\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\sffamily\footnotesize \noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, left justify +\else% +\hbox to\hsize{\normalfont\sffamily\footnotesize\box\@tempboxa\hfil}% +\fi\fi} +\fi +% +\else% traditional noncompsoc \@makecaption +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\footnotesize #1}\\{\normalfont\footnotesize\scshape #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +% 3/2001 use footnotesize, not small; use two nonbreaking spaces, not one +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\footnotesize\noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, center if conference, left justify otherwise +\else% +\ifCLASSOPTIONconference \hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}% +\else \hbox to\hsize{\normalfont\footnotesize\box\@tempboxa\hfil}% +\fi\fi\fi} +\fi + + + +% V1.7 disable captions class option, do so in a way that retains operation of \label +% within \caption +\ifCLASSOPTIONcaptionsoff +\long\def\@makecaption#1#2{\vspace*{2em}\footnotesize\bgroup\par\addvspace{0.5\baselineskip}\centering{\footnotesize #1}\par\addvspace{0.5\baselineskip}\egroup% +\let\@IEEEtemporiglabeldefsave\label +\let\@IEEEtemplabelargsave\relax +\def\label##1{\gdef\@IEEEtemplabelargsave{##1}}% +\setbox\@tempboxa\hbox{#2}% +\let\label\@IEEEtemporiglabeldefsave +\ifx\@IEEEtemplabelargsave\relax\else\label{\@IEEEtemplabelargsave}\fi} +\fi + + +% V1.7 define end environments with \def not \let so as to work OK with +% preview-latex +\newcounter{figure} +\def\thefigure{\@arabic\c@figure} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename\nobreakspace\thefigure} +% V1.8 within figures add \@IEEEfiguretopskipspace compensation to LaTeX2e's \@floatboxreset +\def\figure{\def\@floatboxreset{\reset@font\normalsize\@setminipage\@IEEEfiguretopskipspace}\@float{figure}} +\def\endfigure{\end@float} +% V1.8 also add \@IEEEfiguretopskipspace compensation to \figure* +\@namedef{figure*}{\def\@floatboxreset{\reset@font\normalsize\@setminipage\@IEEEfiguretopskipspace}\@dblfloat{figure}} +\@namedef{endfigure*}{\end@dblfloat} + +\newcounter{table} +\ifCLASSOPTIONcompsoc +\def\thetable{\arabic{table}} +\else +\def\thetable{\@Roman\c@table} +\fi +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename\nobreakspace\thetable} +% V1.6 The IEEE uses 8pt text for tables +% within tables alter LaTeX2e's \@floatboxreset to use \footnotesize +\def\table{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@float{table}} +\def\endtable{\end@float} +% v1.6b double column tables need to default to footnotesize as well. +\@namedef{table*}{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@dblfloat{table}} +\@namedef{endtable*}{\end@dblfloat} + + + + +%% -- Command Argument Scanning Support Functions -- +%% V1.8a + +% usage: \@IEEEstripouterbraces*{} +% \@IEEEstripouterbraces fully expands its argument (which it then stores +% in \@IEEEstripouterbracesarg) via \edef, then removes any outer enclosing +% braces, and finally stores the result in the macro +% \@IEEEstrippedouterbraces. +% +% For example: +% \@IEEEstripouterbraces{{{{ab}c}}} +% results in: +% +% \@IEEEstripouterbracesarg ==> a macro containing {{{ab}c}} +% \@IEEEstrippedouterbraces ==> a macro containing {ab}c +% +% the *-star form,\@IEEEstripouterbraces*, does not expand the argument +% contents during processing +\def\@IEEEstripouterbraces{\@ifstar{\let\@IEEEstripouterbracesdef=\def\@@IEEEstripouterbraces}{\let\@IEEEstripouterbracesdef=\edef\@@IEEEstripouterbraces}} + +\def\@@IEEEstripouterbraces#1{\@IEEEstripouterbracesdef\@IEEEstripouterbracesarg{#1}\relax +% If the macro is unchanged after being acquired as a single delimited +% argument, we know we have one sequence of tokens without any enclosing +% braces. Loop until this is true. +\loop + \expandafter\@@@IEEEstripouterbraces\@IEEEstripouterbracesarg\@IEEEgeneralsequenceDELIMITER +\ifx\@IEEEstrippedouterbraces\@IEEEstripouterbracesarg +\else + \let\@IEEEstripouterbracesarg\@IEEEstrippedouterbraces +\repeat} + +\def\@@@IEEEstripouterbraces#1\@IEEEgeneralsequenceDELIMITER{\def\@IEEEstrippedouterbraces{#1}} + + + +% usage: \@IEEEextractgroup*{} +% \@IEEEextractgroup fully expands its argument (which it then stores in +% \@IEEEextractgrouparg) via \edef and then assigns the first "brace group" +% of tokens to the macro \@IEEEextractedgroup. +% The remaining groups, if any, are stored in the macro +% \@IEEEextractedgroupremain. If the argument does not contain the requisite +% groups, the respective macros will be defined to be empty. +% There is an asymmetry in that \@IEEEextractedgroup is stripped of its first +% outer grouping while \@IEEEextractedgroupremain retains even the outer +% grouping (if present) that originally identified it as a group. +% +% For example: +% \@IEEEextractgroup{{{ab}}{c{de}}} +% results in: +% +% \@IEEEextractgrouparg ==> a macro containing {{ab}}{c{de}} +% \@IEEEextractedgroup ==> a macro containing {ab} +% \@IEEEextractedgroupremain ==> a macro containing {c{de}} +% +% The *-star form, \@IEEEextractgroup*, does not expand its argument +% contents during processing. +\def\@IEEEextractgroup{\@ifstar{\let\@IEEEextractgroupdef=\def\@@IEEEextractgroup}{\let\@IEEEextractgroupdef=\edef\@@IEEEextractgroup}} + +\def\@@IEEEextractgroup#1{\@IEEEextractgroupdef\@IEEEextractgrouparg{#1}\relax +% trap the case of an empty extracted group as this would cause problems with +% \@IEEEextractgroupremain's argument acquisition +\ifx\@IEEEextractgrouparg\@empty + \def\@IEEEextractedgroup{}\relax + \def\@IEEEextractedgroupremain{}\relax +\else + % We have to use some dirty tricks here. We want to insert {} around + % whatever remains after the first group so that TeX's argument scanner + % will preserve any originally enclosing braces as well as provide an + % empty argument to acquire even if there isn't a second group. + % In this first of two dirty tricks, we put a } at the end of the structure + % we are going to extract from. The \ifnum0=`{\fi keeps TeX happy to allow + % what would otherwise be an unbalanced macro definition for + % \@@IEEEextractgroup to be acceptable to it. + \ifnum0=`{\fi\expandafter\@IEEEextractgroupremain\@IEEEextractgrouparg}\relax +\fi} + +% In the second part of the dirty tricks, we insert a leading { right after +% the first group is acquired, but before the remainder is. Again, the +% \ifnum0=`}\fi keeps TeX happy during definition time, but will disappear +% during run time. +\def\@IEEEextractgroupremain#1{\def\@IEEEextractedgroup{#1}\expandafter\@@IEEEextractgroupremain\expandafter{\ifnum0=`}\fi} + +\def\@@IEEEextractgroupremain#1{\def\@IEEEextractedgroupremain{#1}} + + + +% \@IEEEextracttoken relocated at top because margin setting commands rely on it + + + +% usage: \@IEEEextracttokengroups*{} +% \@IEEEextracttokengroups fully expands its argument (which it then stores +% in \@IEEEextracttokengroupsarg) and then assigns the first "brace group" of +% tokens (with the outermost braces removed) to the macro +% \@IEEEextractedfirstgroup. +% The meaning of the first nonbrace (but including the empty group) token +% within this first group is assigned via \let to \@IEEEextractedfirsttoken +% as well as stored in the macro \@IEEEextractedfirsttokenmacro. If a first +% nonbrace token does not exist (or is an empty group), these will be \relax +% and empty, respectively. Tokens that would otherwise be discarded during +% the acquisition of the first token in the first group are stored in +% \@IEEEextractedfirsttokensdiscarded, however their original relative brace +% nesting depths are not guaranteed to be preserved. +% The first group within this first group is stored in the macro +% \@IEEEextractedfirstfirstgroup. +% Likewise for the next group after the first: \@IEEEextractednextgroup, +% \@IEEEextractednextfirstgroup, \@IEEEextractednextgroupfirsttoken, +% \@IEEEextractednextgroupfirsttokenmacro, and +% \@IEEEextractednextfirsttokensdiscarded. +% All tokens/groups after the first group, including any enclosing braces, +% are stored in the macro \@IEEEextractedafterfirstgroupremain which will +% be empty if none exist. +% +% For example: +% \@IEEEextracttokengroups{{{ab}{cd}}{{ef}g}} +% will result in: +% +% \@IEEEextracttokengroupsarg ==> a macro containing {{ab}{cd}}{{ef}g} +% \@IEEEextractedfirstgroup ==> a macro containing {ab}{cd} +% \@IEEEextractedafterfirstgroupremain ==> a macro containing {{ef}g} +% \@IEEEextractedfirsttoken ==> the letter a +% \@IEEEextractedfirsttokenmacro ==> a macro containing a +% \@IEEEextractedfirsttokensdiscarded ==> a macro containing bcd +% \@IEEEextractedfirstfirstgroup ==> a macro containing ab +% \@IEEEextractednextgroup ==> a macro containing {ef}g +% \@IEEEextractednextfirsttoken ==> the letter e +% \@IEEEextractednextfirsttokenmacro ==> a macro containing e +% \@IEEEextractednextfirsttokensdiscarded ==> a macro containing fg +% \@IEEEextractednextfirstgroup ==> a macro containing ef +% +% If given an empty argument, \@IEEEextractedfirsttoken and +% \@IEEEextractednextfirsttoken will be set to \relax +% and all the macros will be empty. +% the *-star form, \@IEEEextracttokengroups*, does not expand its argument +% contents during processing. +% +% Depends on: \@IEEEextractgroup, \@IEEEextracttoken +\def\@IEEEextracttokengroups{\@ifstar{\let\@IEEEextracttokengroupsdef=\def\@@IEEEextracttokengroups}{\let\@IEEEextracttokengroupsdef=\edef\@@IEEEextracttokengroups}} +\def\@@IEEEextracttokengroups#1{\@IEEEextracttokengroupsdef\@IEEEextracttokengroupsarg{#1}\relax +% begin extraction, these functions are safe with empty arguments +% first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextracttokengroupsarg}\relax +\let\@IEEEextractedfirstgroup\@IEEEextractedgroup +\let\@IEEEextractedafterfirstgroupremain\@IEEEextractedgroupremain +\expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax +\let\@IEEEextractedfirsttoken\@IEEEextractedtoken +\let\@IEEEextractedfirsttokenmacro\@IEEEextractedtokenmacro +\let\@IEEEextractedfirsttokensdiscarded\@IEEEextractedtokensdiscarded +% first first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax +\let\@IEEEextractedfirstfirstgroup\@IEEEextractedgroup +% next group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedafterfirstgroupremain}\relax +\let\@IEEEextractednextgroup\@IEEEextractedgroup +\expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractednextgroup}\relax +\let\@IEEEextractednextfirsttoken\@IEEEextractedtoken +\let\@IEEEextractednextfirsttokenmacro\@IEEEextractedtokenmacro +\let\@IEEEextractednextfirsttokensdiscarded\@IEEEextractedtokensdiscarded +% next first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractednextgroup}\relax +\let\@IEEEextractednextfirstgroup\@IEEEextractedgroup} + + +%% -- End of Command Argument Scanning Support Functions -- + + + + +%% +%% START OF IEEEeqnarray DEFINITIONS +%% +%% Inspired by the concepts, examples, and previous works of LaTeX +%% coders and developers such as Donald Arseneau, Fred Bartlett, +%% David Carlisle, Tony Liu, Frank Mittelbach, Piet van Oostrum, +%% Roland Winkler and Mark Wooding. +%% I don't make the claim that my work here is even near their calibre. ;) + + +\newif\if@IEEEeqnarrayboxnojot% flag to indicate if the environment was called as the star form +\@IEEEeqnarrayboxnojotfalse + +\newif\if@advanceIEEEeqncolcnt% tracks if the environment should advance the col counter +% allows a way to make an \IEEEeqnarraybox that can be used within an \IEEEeqnarray +% used by IEEEeqnarraymulticol so that it can work properly in both +\@advanceIEEEeqncolcnttrue + +\newcount\@IEEEeqnnumcols % tracks how many IEEEeqnarray cols are defined +\newcount\@IEEEeqncolcnt % tracks how many IEEEeqnarray cols the user actually used + + +% The default math style used by the columns +\def\IEEEeqnarraymathstyle{\displaystyle} +% The default text style used by the columns +% default to using the current font +\def\IEEEeqnarraytextstyle{\relax} + +% like the iedlistdecl but for \IEEEeqnarray +\def\IEEEeqnarraydecl{\relax} +\def\IEEEeqnarrayboxdecl{\relax} + + + +% V1.8 flags to indicate that equation numbering is to persist +\newif\if@IEEEeqnumpersist% +\@IEEEeqnumpersistfalse +\newif\if@IEEEsubeqnumpersist% +\@IEEEsubeqnumpersistfalse +% +% V1.8 flags to indicate if (sub)equation number of last line was preadvanced +\newif\if@IEEEeqnumpreadv% +\@IEEEeqnumpreadvfalse +\newif\if@IEEEsubeqnumpreadv% +\@IEEEsubeqnumpreadvfalse + +\newcount\@IEEEsubeqnnumrollback% saves previous value of IEEEsubequation number in case we need to restore it + +% \yesnumber is the opposite of \nonumber +% a novel concept with the same def as the equationarray package +% However, we give IEEE versions too since some LaTeX packages such as +% the MDWtools mathenv.sty redefine \nonumber to something else. +% This command is intended for use in non-IEEEeqnarray math environments +\providecommand{\yesnumber}{\global\@eqnswtrue} + + +% IEEEyes/nonumber +% V1.8 add persistant * forms +% These commands can alter the type of equation an IEEEeqnarray line is. +\def\IEEEyesnumber{\@ifstar{\global\@IEEEeqnumpersisttrue\global\@IEEEsubeqnumpersistfalse\@IEEEyesnumber}{\@IEEEyesnumber}} + +\def\@IEEEyesnumber{\global\@eqnswtrue +\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray +\ifnum\c@IEEEsubequation>0\relax + \stepcounter{equation}\setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label +\fi +% even if we reached this eqn num via a preadv, it is legit now +\global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse +\fi} + +\def\IEEEnonumber{\@ifstar{\global\@IEEEeqnumpersistfalse\global\@IEEEsubeqnumpersistfalse\global\@eqnswfalse}{\global\@eqnswfalse}} + + +\def\IEEEyessubnumber{\@ifstar{\global\@IEEEsubeqnumpersisttrue\@IEEEyessubnumber}{\@IEEEyessubnumber}} +% +\def\@IEEEyessubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray + \ifnum\c@IEEEsubequation>0\relax% if it already is a subequation, we are good to go as-is + \else% if we are a regular equation we have to watch out for two cases + \if@IEEEeqnumpreadv% if this equation is the result of a preadvance, backout and bump the sub eqnnum + \global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\addtocounter{IEEEsubequation}{1}\relax + \else% non-preadvanced equations just need initialization of their sub eqnnum + \setcounter{IEEEsubequation}{1}\relax + \fi + \fi% fi already is subequation + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore + \global\@eqnswtrue +\fi} + + +\def\IEEEnosubnumber{\@ifstar{\global\@IEEEsubeqnumpersistfalse\@IEEEnosubnumber}{\@IEEEnosubnumber}} +% +\def\@IEEEnosubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray + \if@eqnsw % we do nothing unless we know we will display because we play with the counters here + % if it currently is a subequation, bump up to the next equation number and turn off the subequation + \ifnum\c@IEEEsubequation>0\relax\addtocounter{equation}{1}\setcounter{IEEEsubequation}{0}\relax + \fi + \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore + \gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi +\fi} + + + +% allows users to "push away" equations that get too close to the equation numbers +\def\IEEEeqnarraynumspace{\hphantom{\ifnum\c@IEEEsubequation>0\relax\theIEEEsubequationdis\else\theequationdis\fi}} + +% provides a way to span multiple columns within IEEEeqnarray environments +% will consider \if@advanceIEEEeqncolcnt before globally advancing the +% column counter - so as to work within \IEEEeqnarraybox +% usage: \IEEEeqnarraymulticol{number cols. to span}{col type}{cell text} +\long\def\IEEEeqnarraymulticol#1#2#3{\multispan{#1}\relax +% check if column is defined for the precolumn definition +% We have to be careful here because TeX scans for & even within an \iffalse +% where it does not expand macros. So, if we used only one \ifx and a #3 +% appeared in the false branch and the user inserted another alignment +% structure that uses & in the \IEEEeqnarraymulticol{}, TeX will not see that +% there is an inner alignment in the false branch yet still will see any & +% there and will think that they apply to the outer alignment resulting in an +% incomplete \ifx error. +% So, here we use separate checks for the pre and post parts in order to keep +% the #3 outside of all conditionals. +\relax\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax +\csname @IEEEeqnarraycolPRE#2\endcsname +\else% if not, error and use default type +\@IEEEclspkgerror{Invalid column type "#2" in \string\IEEEeqnarraymulticol.\MessageBreak +Using a default centering column instead}% +{You must define IEEEeqnarray column types before use.}% +\csname @IEEEeqnarraycolPRE@IEEEdefault\endcsname +\fi +% The ten \relax are to help prevent misleading error messages in case a user +% accidently inserted a macro that tries to acquire additional arguments. +#3\relax\relax\relax\relax\relax\relax\relax\relax\relax\relax +% check if column is defined for the postcolumn definition +\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax +\csname @IEEEeqnarraycolPOST#2\endcsname +\else% if not, use the default type +\csname @IEEEeqnarraycolPOST@IEEEdefault\endcsname +\fi +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by #1\relax\fi} + +% like \omit, but maintains track of the column counter for \IEEEeqnarray +\def\IEEEeqnarrayomit{\omit\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by 1\relax\fi} + + +% provides a way to define a letter referenced column type +% usage: \IEEEeqnarraydefcol{col. type letter/name}{pre insertion text}{post insertion text} +\def\IEEEeqnarraydefcol#1#2#3{\expandafter\def\csname @IEEEeqnarraycolPRE#1\endcsname{#2}% +\expandafter\def\csname @IEEEeqnarraycolPOST#1\endcsname{#3}% +\expandafter\def\csname @IEEEeqnarraycolDEF#1\endcsname{1}} + + +% provides a way to define a numerically referenced inter-column glue types +% usage: \IEEEeqnarraydefcolsep{col. glue number}{glue definition} +\def\IEEEeqnarraydefcolsep#1#2{\expandafter\def\csname @IEEEeqnarraycolSEP\romannumeral #1\endcsname{#2}% +\expandafter\def\csname @IEEEeqnarraycolSEPDEF\romannumeral #1\endcsname{1}} + + +\def\@IEEEeqnarraycolisdefined{1}% just a macro for 1, used for checking undefined column types + + +% expands and appends the given argument to the \@IEEEtrantmptoksA token list +% used to build up the \halign preamble +\def\@IEEEappendtoksA#1{\edef\@@IEEEappendtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA #1}}% +\@@IEEEappendtoksA} + +% also appends to \@IEEEtrantmptoksA, but does not expand the argument +% uses \toks8 as a scratchpad register +\def\@IEEEappendNOEXPANDtoksA#1{\toks8={#1}% +\edef\@@IEEEappendNOEXPANDtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA\the\toks8}}% +\@@IEEEappendNOEXPANDtoksA} + +% define some common column types for the user +% math +\IEEEeqnarraydefcol{l}{$\IEEEeqnarraymathstyle}{$\hfil} +\IEEEeqnarraydefcol{c}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} +\IEEEeqnarraydefcol{r}{\hfil$\IEEEeqnarraymathstyle}{$} +\IEEEeqnarraydefcol{L}{$\IEEEeqnarraymathstyle{}}{{}$\hfil} +\IEEEeqnarraydefcol{C}{\hfil$\IEEEeqnarraymathstyle{}}{{}$\hfil} +\IEEEeqnarraydefcol{R}{\hfil$\IEEEeqnarraymathstyle{}}{{}$} +% text +\IEEEeqnarraydefcol{s}{\IEEEeqnarraytextstyle}{\hfil} +\IEEEeqnarraydefcol{t}{\hfil\IEEEeqnarraytextstyle}{\hfil} +\IEEEeqnarraydefcol{u}{\hfil\IEEEeqnarraytextstyle}{} + +% vertical rules +\IEEEeqnarraydefcol{v}{}{\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{vv}{\vrule width\arrayrulewidth\hfil}{\hfil\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{V}{}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{VV}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth\hfil}% +{\hfil\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} + +% horizontal rules +\IEEEeqnarraydefcol{h}{}{\leaders\hrule height\arrayrulewidth\hfil} +\IEEEeqnarraydefcol{H}{}{\leaders\vbox{\hrule width\arrayrulewidth\vskip\doublerulesep\hrule width\arrayrulewidth}\hfil} + +% plain +\IEEEeqnarraydefcol{x}{}{} +\IEEEeqnarraydefcol{X}{$}{$} + +% the default column type to use in the event a column type is not defined +\IEEEeqnarraydefcol{@IEEEdefault}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} + + +% a zero tabskip (used for "-" col types) +\def\@IEEEeqnarraycolSEPzero{0pt plus 0pt minus 0pt} +% a centering tabskip (used for "+" col types) +\def\@IEEEeqnarraycolSEPcenter{1000pt plus 0pt minus 1000pt} + +% top level default tabskip glues for the start, end, and inter-column +% may be reset within environments not always at the top level, e.g., \IEEEeqnarraybox +\edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPcenter}% default start glue +\edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPcenter}% default end glue +\edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue + + + +% creates a vertical rule that extends from the bottom to the top a a cell +% Provided in case other packages redefine \vline some other way. +% usage: \IEEEeqnarrayvrule[rule thickness] +% If no argument is provided, \arrayrulewidth will be used for the rule thickness. +\newcommand\IEEEeqnarrayvrule[1][\arrayrulewidth]{\vrule\@width#1\relax} + +% creates a blank separator row +% usage: \IEEEeqnarrayseprow[separation length][font size commands] +% default is \IEEEeqnarrayseprow[0.25\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers +\def\IEEEeqnarrayseprow{\relax\@ifnextchar[{\@IEEEeqnarrayseprow}{\@IEEEeqnarrayseprow[0.25\normalbaselineskip]}} +\def\@IEEEeqnarrayseprow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprow[#1]}{\@@IEEEeqnarrayseprow[#1][\relax]}} +\def\@@IEEEeqnarrayseprow[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% +\ifx\@IEEEeqnarrayseprowARGONE\@empty% +% get the skip value, based on the font commands +% use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 +% assign within a bogus box to confine the font changes +{\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% +\else% +{\setbox0=\hbox{#2\relax\global\skip5=#1}}% +\fi% +\@IEEEeqnarrayhoptolastcolumn\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} + +% creates a blank separator row, but omits all the column templates +% usage: \IEEEeqnarrayseprowcut[separation length][font size commands] +% default is \IEEEeqnarrayseprowcut[0.25\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers +\def\IEEEeqnarrayseprowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarrayseprowcut}{\@IEEEeqnarrayseprowcut[0.25\normalbaselineskip]}} +\def\@IEEEeqnarrayseprowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprowcut[#1]}{\@@IEEEeqnarrayseprowcut[#1][\relax]}} +\def\@@IEEEeqnarrayseprowcut[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% +\ifx\@IEEEeqnarrayseprowARGONE\@empty% +% get the skip value, based on the font commands +% use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 +% assign within a bogus box to confine the font changes +{\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% +\else% +{\setbox0=\hbox{#2\relax\global\skip5=#1}}% +\fi% +\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} + + + +% draws a single rule across all the columns optional +% argument determines the rule width, \arrayrulewidth is the default +% updates column counter as needed and turns off struts +% usage: \IEEEeqnarrayrulerow[rule line thickness] +\def\IEEEeqnarrayrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarrayrulerow}{\@IEEEeqnarrayrulerow[\arrayrulewidth]}} +\def\@IEEEeqnarrayrulerow[#1]{\leaders\hrule height#1\hfil\relax% put in our rule +% turn off any struts +\IEEEeqnarraystrutsize{0pt}{0pt}[\relax]\relax} + + +% draws a double rule by using a single rule row, a separator row, and then +% another single rule row +% first optional argument determines the rule thicknesses, \arrayrulewidth is the default +% second optional argument determines the rule spacing, \doublerulesep is the default +% usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] +\def\IEEEeqnarraydblrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarraydblrulerow}{\@IEEEeqnarraydblrulerow[\arrayrulewidth]}} +\def\@IEEEeqnarraydblrulerow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerow[#1]}% +{\@@IEEEeqnarraydblrulerow[#1][\doublerulesep]}} +\def\@@IEEEeqnarraydblrulerow[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% +% we allow the user to say \IEEEeqnarraydblrulerow[][] +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]\relax% +\fi% +\def\@IEEEeqnarraydblrulerowARG{#2}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\\\IEEEeqnarrayseprow[\doublerulesep][\relax]% +\else% +\\\IEEEeqnarrayseprow[#2][\relax]% +\fi% +\\\multispan{\@IEEEeqnnumcols}% +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\def\@IEEEeqnarraydblrulerowARG{#1}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +} + +% draws a double rule by using a single rule row, a separator (cutting) row, and then +% another single rule row +% first optional argument determines the rule thicknesses, \arrayrulewidth is the default +% second optional argument determines the rule spacing, \doublerulesep is the default +% usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] +\def\IEEEeqnarraydblrulerowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarraydblrulerowcut}{\@IEEEeqnarraydblrulerowcut[\arrayrulewidth]}} +\def\@IEEEeqnarraydblrulerowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerowcut[#1]}% +{\@@IEEEeqnarraydblrulerowcut[#1][\doublerulesep]}} +\def\@@IEEEeqnarraydblrulerowcut[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% +% we allow the user to say \IEEEeqnarraydblrulerow[][] +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +\def\@IEEEeqnarraydblrulerowARG{#2}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\\\IEEEeqnarrayseprowcut[\doublerulesep][\relax]% +\else% +\\\IEEEeqnarrayseprowcut[#2][\relax]% +\fi% +\\\multispan{\@IEEEeqnnumcols}% +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\def\@IEEEeqnarraydblrulerowARG{#1}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +} + + + +% inserts a full row's worth of &'s +% relies on \@IEEEeqnnumcols to provide the correct number of columns +% uses \@IEEEtrantmptoksA, \count0 as scratch registers +\def\@IEEEeqnarrayhoptolastcolumn{\@IEEEtrantmptoksA={}\count0=1\relax% +\loop% add cols if the user did not use them all +\ifnum\count0<\@IEEEeqnnumcols\relax% +\@IEEEappendtoksA{&}% +\advance\count0 by 1\relax% update the col count +\repeat% +\the\@IEEEtrantmptoksA%execute the &'s +} + + + +\newif\if@IEEEeqnarrayISinner % flag to indicate if we are within the lines +\@IEEEeqnarrayISinnerfalse % of an IEEEeqnarray - after the IEEEeqnarraydecl + +\edef\@IEEEeqnarrayTHEstrutheight{0pt} % height and depth of IEEEeqnarray struts +\edef\@IEEEeqnarrayTHEstrutdepth{0pt} + +\edef\@IEEEeqnarrayTHEmasterstrutheight{0pt} % default height and depth of +\edef\@IEEEeqnarrayTHEmasterstrutdepth{0pt} % struts within an IEEEeqnarray + +\edef\@IEEEeqnarrayTHEmasterstrutHSAVE{0pt} % saved master strut height +\edef\@IEEEeqnarrayTHEmasterstrutDSAVE{0pt} % and depth + +\newif\if@IEEEeqnarrayusemasterstrut % flag to indicate that the master strut value +\@IEEEeqnarrayusemasterstruttrue % is to be used + + + +% saves the strut height and depth of the master strut +\def\@IEEEeqnarraymasterstrutsave{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% save values +\edef\@IEEEeqnarrayTHEmasterstrutHSAVE{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutDSAVE{\the\dimen2}} + +% restores the strut height and depth of the master strut +\def\@IEEEeqnarraymasterstrutrestore{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutHSAVE\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutDSAVE\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% restore values +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}} + + +% globally restores the strut height and depth to the +% master values and sets the master strut flag to true +\def\@IEEEeqnarraystrutreset{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% restore values +\xdef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\xdef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\global\@IEEEeqnarrayusemasterstruttrue} + + +% if the master strut is not to be used, make the current +% values of \@IEEEeqnarrayTHEstrutheight, \@IEEEeqnarrayTHEstrutdepth +% and the use master strut flag, global +% this allows user strut commands issued in the last column to be carried +% into the isolation/strut column +\def\@IEEEeqnarrayglobalizestrutstatus{\relax% +\if@IEEEeqnarrayusemasterstrut\else% +\xdef\@IEEEeqnarrayTHEstrutheight{\@IEEEeqnarrayTHEstrutheight}% +\xdef\@IEEEeqnarrayTHEstrutdepth{\@IEEEeqnarrayTHEstrutdepth}% +\global\@IEEEeqnarrayusemasterstrutfalse% +\fi} + + + +% usage: \IEEEeqnarraystrutsize{height}{depth}[font size commands] +% If called outside the lines of an IEEEeqnarray, sets the height +% and depth of both the master and local struts. If called inside +% an IEEEeqnarray line, sets the height and depth of the local strut +% only and sets the flag to indicate the use of the local strut +% values. If the height or depth is left blank, 0.7\normalbaselineskip +% and 0.3\normalbaselineskip will be used, respectively. +% The optional argument can be used to evaluate the lengths under +% a different font size and styles. If none is specified, the current +% font is used. +% uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 +\def\IEEEeqnarraystrutsize#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsize{#1}{#2}}{\@IEEEeqnarraystrutsize{#1}{#2}[\relax]}} +\def\@IEEEeqnarraystrutsize#1#2[#3]{\def\@IEEEeqnarraystrutsizeARG{#1}% +\ifx\@IEEEeqnarraystrutsizeARG\@empty% +{\setbox0=\hbox{#3\relax\global\skip3=0.7\normalbaselineskip}}% +\skip0=\skip3\relax% +\else% arg one present +{\setbox0=\hbox{#3\relax\global\skip3=#1\relax}}% +\skip0=\skip3\relax% +\fi% if null arg +\def\@IEEEeqnarraystrutsizeARG{#2}% +\ifx\@IEEEeqnarraystrutsizeARG\@empty% +{\setbox0=\hbox{#3\relax\global\skip3=0.3\normalbaselineskip}}% +\skip2=\skip3\relax% +\else% arg two present +{\setbox0=\hbox{#3\relax\global\skip3=#2\relax}}% +\skip2=\skip3\relax% +\fi% if null arg +% remove stretchability, just to be safe +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +\if@IEEEeqnarrayISinner% inner does not touch master strut size +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstrutfalse% do not use master +\else% outer, have to set master strut too +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstruttrue% use master strut +\fi} + + +% usage: \IEEEeqnarraystrutsizeadd{added height}{added depth}[font size commands] +% If called outside the lines of an IEEEeqnarray, adds the given height +% and depth to both the master and local struts. +% If called inside an IEEEeqnarray line, adds the given height and depth +% to the local strut only and sets the flag to indicate the use +% of the local strut values. +% In both cases, if a height or depth is left blank, 0pt is used instead. +% The optional argument can be used to evaluate the lengths under +% a different font size and styles. If none is specified, the current +% font is used. +% uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 +\def\IEEEeqnarraystrutsizeadd#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsizeadd{#1}{#2}}{\@IEEEeqnarraystrutsizeadd{#1}{#2}[\relax]}} +\def\@IEEEeqnarraystrutsizeadd#1#2[#3]{\def\@IEEEeqnarraystrutsizearg{#1}% +\ifx\@IEEEeqnarraystrutsizearg\@empty% +\skip0=0pt\relax% +\else% arg one present +{\setbox0=\hbox{#3\relax\global\skip3=#1}}% +\skip0=\skip3\relax% +\fi% if null arg +\def\@IEEEeqnarraystrutsizearg{#2}% +\ifx\@IEEEeqnarraystrutsizearg\@empty% +\skip2=0pt\relax% +\else% arg two present +{\setbox0=\hbox{#3\relax\global\skip3=#2}}% +\skip2=\skip3\relax% +\fi% if null arg +% remove stretchability, just to be safe +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +\if@IEEEeqnarrayISinner% inner does not touch master strut size +% get local strut size +\expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% +% add it to the user supplied values +\advance\dimen0 by \skip0\relax% +\advance\dimen2 by \skip2\relax% +% update the local strut size +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstrutfalse% do not use master +\else% outer, have to set master strut too +% get master strut size +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% add it to the user supplied values +\advance\dimen0 by \skip0\relax% +\advance\dimen2 by \skip2\relax% +% update the local and master strut sizes +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstruttrue% use master strut +\fi} + + +% allow user a way to see the struts +\newif\ifIEEEvisiblestruts +\IEEEvisiblestrutsfalse + +% inserts an invisible strut using the master or local strut values +% uses scratch registers \skip0, \skip2, \dimen0, \dimen2 +\def\@IEEEeqnarrayinsertstrut{\relax% +\if@IEEEeqnarrayusemasterstrut +% get master strut size +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +\else% +% get local strut size +\expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% +\fi% +% remove stretchability, probably not needed +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +% allow user to see struts if desired +\ifIEEEvisiblestruts% +\vrule width0.2pt height\dimen0 depth\dimen2\relax% +\else% +\vrule width0pt height\dimen0 depth\dimen2\relax\fi} + + +% creates an invisible strut, useable even outside \IEEEeqnarray +% if \IEEEvisiblestrutstrue, the strut will be visible and 0.2pt wide. +% usage: \IEEEstrut[height][depth][font size commands] +% default is \IEEEstrut[0.7\normalbaselineskip][0.3\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \dimen0, \dimen2, \skip0, \skip2 +\def\IEEEstrut{\relax\@ifnextchar[{\@IEEEstrut}{\@IEEEstrut[0.7\normalbaselineskip]}} +\def\@IEEEstrut[#1]{\relax\@ifnextchar[{\@@IEEEstrut[#1]}{\@@IEEEstrut[#1][0.3\normalbaselineskip]}} +\def\@@IEEEstrut[#1][#2]{\relax\@ifnextchar[{\@@@IEEEstrut[#1][#2]}{\@@@IEEEstrut[#1][#2][\relax]}} +\def\@@@IEEEstrut[#1][#2][#3]{\mbox{#3\relax% +\def\@IEEEstrutARG{#1}% +\ifx\@IEEEstrutARG\@empty% +\skip0=0.7\normalbaselineskip\relax% +\else% +\skip0=#1\relax% +\fi% +\def\@IEEEstrutARG{#2}% +\ifx\@IEEEstrutARG\@empty% +\skip2=0.3\normalbaselineskip\relax% +\else% +\skip2=#2\relax% +\fi% +% remove stretchability, probably not needed +\dimen0\skip0\relax% +\dimen2\skip2\relax% +\ifIEEEvisiblestruts% +\vrule width0.2pt height\dimen0 depth\dimen2\relax% +\else% +\vrule width0.0pt height\dimen0 depth\dimen2\relax\fi}} + + +% enables strut mode by setting a default strut size and then zeroing the +% \baselineskip, \lineskip, \lineskiplimit and \jot +\def\IEEEeqnarraystrutmode{\IEEEeqnarraystrutsize{0.7\normalbaselineskip}{0.3\normalbaselineskip}[\relax]% +\baselineskip=0pt\lineskip=0pt\lineskiplimit=0pt\jot=0pt} + + +% equation and subequation forms to use to setup hyperref's \@currentHref +\def\@IEEEtheHrefequation{equation.\theHequation} +\def\@IEEEtheHrefsubequation{equation.\theHequation\alph{IEEEsubequation}} + + +\def\IEEEeqnarray{\@IEEEeqnumpersisttrue\@IEEEsubeqnumpersistfalse\@IEEEeqnarray} +\def\endIEEEeqnarray{\end@IEEEeqnarray} + +\@namedef{IEEEeqnarray*}{\@IEEEeqnumpersistfalse\@IEEEsubeqnumpersistfalse\@IEEEeqnarray} +\@namedef{endIEEEeqnarray*}{\end@IEEEeqnarray} + + +% \IEEEeqnarray is an enhanced \eqnarray. +% The star form defaults to not putting equation numbers at the end of each row. +% usage: \IEEEeqnarray[decl]{cols} +\def\@IEEEeqnarray{\relax\@ifnextchar[{\@@IEEEeqnarray}{\@@IEEEeqnarray[\relax]}} +% We have to be careful here to normalize catcodes just before acquiring the +% cols as that specification may contain punctuation which could be subject +% to document catcode changes. +\def\@@IEEEeqnarray[#1]{\begingroup\IEEEnormalcatcodes\@@@IEEEeqnarray[#1]} +\def\@@@IEEEeqnarray[#1]#2{\endgroup + % default to showing the equation number or not based on whether or not + % the star form was involked + \if@IEEEeqnumpersist\global\@eqnswtrue + \else% not the star form + \global\@eqnswfalse + \fi% if star form + % provide a basic hyperref \theHequation if this has not already been setup (hyperref not loaded, or no section counter) + \@ifundefined{theHequation}{\def\theHequation{\arabic{equation}}}{}\relax + % provide dummy hyperref commands in case hyperref is not loaded + \providecommand{\Hy@raisedlink}[1]{}\relax + \providecommand{\hyper@anchorstart}[1]{}\relax + \providecommand{\hyper@anchorend}{}\relax + \providecommand{\@currentHref}{}\relax + \@IEEEeqnumpreadvfalse% reset eqnpreadv flag + \@IEEEsubeqnumpreadvfalse% reset subeqnpreadv flag + \@IEEEeqnarrayISinnerfalse% not yet within the lines of the halign + \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default + \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise + \IEEEvisiblestrutsfalse% diagnostic mode defaults to off + % no extra space unless the user specifically requests it + \lineskip=0pt\relax + \lineskiplimit=0pt\relax + \baselineskip=\normalbaselineskip\relax% + \jot=\IEEEnormaljot\relax% + \mathsurround\z@\relax% no extra spacing around math + \@advanceIEEEeqncolcnttrue% advance the col counter for each col the user uses, + % used in \IEEEeqnarraymulticol and in the preamble build + %V1.8 Here we preadvance to the next equation number. + % If the user later wants a continued subequation, we can roll back. + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation% + \stepcounter{equation}\@IEEEeqnumpreadvtrue% advance equation counter before first line + \setcounter{IEEEsubequation}{0}% no subequation yet + \let\@IEEEcurrentlabelsave\@currentlabel% save current label as we later change it globally + \let\@IEEEcurrentHrefsave\@currentHref% save current href label as we later change it globally + \def\@currentlabel{\p@equation\theequation}% redefine the ref label + \def\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \IEEEeqnarraydecl\relax% allow a way for the user to make global overrides + #1\relax% allow user to override defaults + \let\\\@IEEEeqnarraycr% replace newline with one that can put in eqn. numbers + \global\@IEEEeqncolcnt\z@% col. count = 0 for first line + \@IEEEbuildpreamble{#2}\relax% build the preamble and put it into \@IEEEtrantmptoksA + % put in the column for the equation number + \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first + \toks0={##}% + % advance the \@IEEEeqncolcnt for the isolation col, this helps with error checking + \@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}% + % add the isolation column + \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% + % advance the \@IEEEeqncolcnt for the equation number col, this helps with error checking + \@IEEEappendtoksA{&\global\advance\@IEEEeqncolcnt by 1\relax}% + % add the equation number col to the preamble + \@IEEEappendtoksA{\tabskip\z@skip\hb@xt@\z@\bgroup\hss\the\toks0\egroup}% + % note \@IEEEeqnnumcols does not count the equation col or isolation col + % set the starting tabskip glue as determined by the preamble build + \tabskip=\@IEEEBPstartglue\relax + % begin the display alignment + \@IEEEeqnarrayISinnertrue% commands are now within the lines + $$\everycr{}\halign to\displaywidth\bgroup + % "exspand" the preamble + \span\the\@IEEEtrantmptoksA\cr} + +% enter isolation/strut column (or the next column if the user did not use +% every column), record the strut status, complete the columns, do the strut if needed, +% restore counters (to backout any equation setup for a next line that was never used) +% to their correct values and exit +\def\end@IEEEeqnarray{\@IEEEeqnarrayglobalizestrutstatus&\@@IEEEeqnarraycr\egroup +\if@IEEEsubeqnumpreadv\global\advance\c@IEEEsubequation\m@ne\fi +\if@IEEEeqnumpreadv\global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\fi +\global\let\@currentlabel\@IEEEcurrentlabelsave% restore current label +\global\let\@currentHref\@IEEEcurrentHrefsave% restore current href label +$$\@ignoretrue} + + +% IEEEeqnarray uses a modifed \\ instead of the plain \cr to +% end rows. This allows for things like \\*[vskip amount] +% These "cr" macros are modified versions of those for LaTeX2e's eqnarray +% the {\ifnum0=`} braces must be kept away from the last column to avoid +% altering spacing of its math, so we use & to advance to the next column +% as there is an isolation/strut column after the user's columns +\def\@IEEEeqnarraycr{\@IEEEeqnarrayglobalizestrutstatus&% save strut status and advance to next column + {\ifnum0=`}\fi + \@ifstar{% + \global\@eqpen\@M\@IEEEeqnarrayYCR + }{% + \global\@eqpen\interdisplaylinepenalty \@IEEEeqnarrayYCR + }% +} + +\def\@IEEEeqnarrayYCR{\@testopt\@IEEEeqnarrayXCR\z@skip} + +\def\@IEEEeqnarrayXCR[#1]{% + \ifnum0=`{\fi}% + \@@IEEEeqnarraycr + \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}}% + +\def\@@IEEEeqnarraycr{\@IEEEtrantmptoksA={}% clear token register + \advance\@IEEEeqncolcnt by -1\relax% adjust col count because of the isolation column + \ifnum\@IEEEeqncolcnt>\@IEEEeqnnumcols\relax + \@IEEEclspkgerror{Too many columns within the IEEEeqnarray\MessageBreak + environment}% + {Use fewer \string &'s or put more columns in the IEEEeqnarray column\MessageBreak + specifications.}\relax% + \else + \loop% add cols if the user did not use them all + \ifnum\@IEEEeqncolcnt<\@IEEEeqnnumcols\relax + \@IEEEappendtoksA{&}% + \advance\@IEEEeqncolcnt by 1\relax% update the col count + \repeat + % this number of &'s will take us the the isolation column + \fi + % execute the &'s + \the\@IEEEtrantmptoksA% + % handle the strut/isolation column + \@IEEEeqnarrayinsertstrut% do the strut if needed + \@IEEEeqnarraystrutreset% reset the strut system for next line or IEEEeqnarray + &% and enter the equation number column + \if@eqnsw% only if we display something + \Hy@raisedlink{\hyper@anchorstart{\@currentHref}}% start a hyperref anchor + \global\@IEEEeqnumpreadvfalse\relax% displaying an equation number means + \global\@IEEEsubeqnumpreadvfalse\relax% the equation counters point to valid equations + % V1.8 Here we setup the counters, currentlabel and status for what would be the *next* + % equation line as would be the case under the current settings. However, there are two problems. + % One problem is that there might not ever be a next line. The second problem is that the user + % may later alter the meaning of a line with commands such as \IEEEyessubnumber. So, to handle + % these cases we have to record the current values of the (sub)equation counters and revert back + % to them if the next line is changed or never comes. The \if@IEEEeqnumpreadv, \if@IEEEsubeqnumpreadv + % and \@IEEEsubeqnnumrollback stuff tracks this. + % The logic to handle all this is surprisingly complex, but a nice feature of the approach here is + % that the equation counters and labels remain valid for what the line would be unless a + % \IEEEyessubnumber et al. later changes it. So, any hyperref links are always correct. + \ifnum\c@IEEEsubequation>0\relax% handle subequation + \theIEEEsubequationdis\relax + \if@IEEEsubeqnumpersist% setup for default type of next line + \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \else + % if no subeqnum persist, go ahead and setup for a new equation number + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation + \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax + \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi + \else% display a standard equation number + \theequationdis\relax + \setcounter{IEEEsubequation}{0}\relax% not really needed + \if@IEEEsubeqnumpersist% setup for default type of next line + % subequations that follow plain equations carry the same equation number e.g, 5, 5a rather than 5, 6a + \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \else + % if no subeqnum persist, go ahead and setup for a new equation number + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation + \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax + \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi + \fi% + \Hy@raisedlink{\hyper@anchorend}% end hyperref anchor + \fi% fi only if we display something + % reset the flags to indicate the default preferences of the display of equation numbers + \if@IEEEeqnumpersist\global\@eqnswtrue\else\global\@eqnswfalse\fi + \if@IEEEsubeqnumpersist\global\@eqnswtrue\fi% ditto for the subequation flag + % reset the number of columns the user actually used + \global\@IEEEeqncolcnt\z@\relax + % the real end of the line + \cr} + + + + + +% \IEEEeqnarraybox is like \IEEEeqnarray except the box form puts everything +% inside a vtop, vbox, or vcenter box depending on the letter in the second +% optional argument (t,b,c). Vbox is the default. Unlike \IEEEeqnarray, +% equation numbers are not displayed and \IEEEeqnarraybox can be nested. +% \IEEEeqnarrayboxm is for math mode (like \array) and does not put the vbox +% within an hbox. +% \IEEEeqnarrayboxt is for text mode (like \tabular) and puts the vbox within +% a \hbox{$ $} construct. +% \IEEEeqnarraybox will auto detect whether to use \IEEEeqnarrayboxm or +% \IEEEeqnarrayboxt depending on the math mode. +% The third optional argument specifies the width this box is to be set to - +% natural width is the default. +% The * forms do not add \jot line spacing +% usage: \IEEEeqnarraybox[decl][pos][width]{cols} +\def\IEEEeqnarrayboxm{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} +\def\endIEEEeqnarrayboxm{\end@IEEEeqnarraybox} +\@namedef{IEEEeqnarrayboxm*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarrayboxm*}{\end@IEEEeqnarraybox} + +\def\IEEEeqnarrayboxt{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} +\def\endIEEEeqnarrayboxt{\end@IEEEeqnarraybox} +\@namedef{IEEEeqnarrayboxt*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarrayboxt*}{\end@IEEEeqnarraybox} + +\def\IEEEeqnarraybox{\@IEEEeqnarrayboxnojotfalse\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% +\@IEEEeqnarraybox} +\def\endIEEEeqnarraybox{\end@IEEEeqnarraybox} + +\@namedef{IEEEeqnarraybox*}{\@IEEEeqnarrayboxnojottrue\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% +\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarraybox*}{\end@IEEEeqnarraybox} + +% flag to indicate if the \IEEEeqnarraybox needs to put things into an hbox{$ $} +% for \vcenter in non-math mode +\newif\if@IEEEeqnarrayboxHBOXSW% +\@IEEEeqnarrayboxHBOXSWfalse + +\def\@IEEEeqnarraybox{\relax\@ifnextchar[{\@@IEEEeqnarraybox}{\@@IEEEeqnarraybox[\relax]}} +% We have to be careful here to normalize catcodes just before acquiring the +% cols as that specification may contain punctuation which could be subject +% to document catcode changes. +\def\@@IEEEeqnarraybox[#1]{\relax\begingroup\IEEEnormalcatcodes\@ifnextchar[{\@@@IEEEeqnarraybox[#1]}{\@@@IEEEeqnarraybox[#1][b]}} +\def\@@@IEEEeqnarraybox[#1][#2]{\relax\@ifnextchar[{\@@@@IEEEeqnarraybox[#1][#2]}{\@@@@IEEEeqnarraybox[#1][#2][\relax]}} + +% #1 = decl; #2 = t,b,c; #3 = width, #4 = col specs +\def\@@@@IEEEeqnarraybox[#1][#2][#3]#4{\endgroup\@IEEEeqnarrayISinnerfalse % not yet within the lines of the halign + \@IEEEeqnarraymasterstrutsave% save current master strut values + \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default + \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise + \IEEEvisiblestrutsfalse% diagnostic mode defaults to off + % no extra space unless the user specifically requests it + \lineskip=0pt\relax% + \lineskiplimit=0pt\relax% + \baselineskip=\normalbaselineskip\relax% + \jot=\IEEEnormaljot\relax% + \mathsurround\z@\relax% no extra spacing around math + % the default end glues are zero for an \IEEEeqnarraybox + \edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPzero}% default start glue + \edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPzero}% default end glue + \edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue + \@advanceIEEEeqncolcntfalse% do not advance the col counter for each col the user uses, + % used in \IEEEeqnarraymulticol and in the preamble build + \IEEEeqnarrayboxdecl\relax% allow a way for the user to make global overrides + #1\relax% allow user to override defaults + \let\\\@IEEEeqnarrayboxcr% replace newline with one that allows optional spacing + \@IEEEbuildpreamble{#4}\relax% build the preamble and put it into \@IEEEtrantmptoksA + % add an isolation column to the preamble to stop \\'s {} from getting into the last col + \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first + \toks0={##}% + % add the isolation column to the preamble + \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% + % set the starting tabskip glue as determined by the preamble build + \tabskip=\@IEEEBPstartglue\relax + % begin the alignment + \everycr{}% + % use only the very first token to determine the positioning + \@IEEEextracttoken{#2}\relax + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: IEEEeqnarraybox position specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi + % \@IEEEextractedtoken has the first token, the rest are ignored + % if we need to put things into and hbox and go into math mode, do so now + \if@IEEEeqnarrayboxHBOXSW \leavevmode \hbox \bgroup $\fi% + % use the appropriate vbox type + \if\@IEEEextractedtoken t\relax\vtop\else\if\@IEEEextractedtoken c\relax% + \vcenter\else\vbox\fi\fi\bgroup% + \@IEEEeqnarrayISinnertrue% commands are now within the lines + \ifx#3\relax\halign\else\halign to #3\relax\fi% + \bgroup + % "exspand" the preamble + \span\the\@IEEEtrantmptoksA\cr} + +% carry strut status and enter the isolation/strut column, +% exit from math mode if needed, and exit +\def\end@IEEEeqnarraybox{\@IEEEeqnarrayglobalizestrutstatus% carry strut status +&% enter isolation/strut column +\@IEEEeqnarrayinsertstrut% do strut if needed +\@IEEEeqnarraymasterstrutrestore% restore the previous master strut values +% reset the strut system for next IEEEeqnarray +% (sets local strut values back to previous master strut values) +\@IEEEeqnarraystrutreset% +% ensure last line, exit from halign, close vbox +\crcr\egroup\egroup% +% exit from math mode and close hbox if needed +\if@IEEEeqnarrayboxHBOXSW $\egroup\fi} + + + +% IEEEeqnarraybox uses a modifed \\ instead of the plain \cr to +% end rows. This allows for things like \\[vskip amount] +% This "cr" macros are modified versions those for LaTeX2e's eqnarray +% For IEEEeqnarraybox, \\* is the same as \\ +% the {\ifnum0=`} braces must be kept away from the last column to avoid +% altering spacing of its math, so we use & to advance to the isolation/strut column +% carry strut status into isolation/strut column +\def\@IEEEeqnarrayboxcr{\@IEEEeqnarrayglobalizestrutstatus% carry strut status +&% enter isolation/strut column +\@IEEEeqnarrayinsertstrut% do strut if needed +% reset the strut system for next line or IEEEeqnarray +\@IEEEeqnarraystrutreset% +{\ifnum0=`}\fi% +\@ifstar{\@IEEEeqnarrayboxYCR}{\@IEEEeqnarrayboxYCR}} + +% test and setup the optional argument to \\[] +\def\@IEEEeqnarrayboxYCR{\@testopt\@IEEEeqnarrayboxXCR\z@skip} + +% IEEEeqnarraybox does not automatically increase line spacing by \jot +\def\@IEEEeqnarrayboxXCR[#1]{\ifnum0=`{\fi}% +\cr\noalign{\if@IEEEeqnarrayboxnojot\else\vskip\jot\fi\vskip#1\relax}} + + + +% usage: \@IEEEbuildpreamble{column specifiers} +% starts the halign preamble build +% the assembled preamble is put in \@IEEEtrantmptoksA +\def\@IEEEbuildpreamble#1{\@IEEEtrantmptoksA={}% clear token register +\let\@IEEEBPcurtype=u%current column type is not yet known +\let\@IEEEBPprevtype=s%the previous column type was the start +\let\@IEEEBPnexttype=u%next column type is not yet known +% ensure these are valid +\def\@IEEEBPcurglue={0pt plus 0pt minus 0pt}% +\def\@IEEEBPcurcolname{@IEEEdefault}% name of current column definition +% currently acquired numerically referenced glue +% use a name that is easier to remember +\let\@IEEEBPcurnum=\@IEEEtrantmpcountA% +\@IEEEBPcurnum=0% +% tracks number of columns in the preamble +\@IEEEeqnnumcols=0% +% record the default end glues +\edef\@IEEEBPstartglue{\@IEEEeqnarraycolSEPdefaultstart}% +\edef\@IEEEBPendglue{\@IEEEeqnarraycolSEPdefaultend}% +\edef\@IEEEedefMACRO{#1}\relax% fully expand the preamble to support macro containers +% now parse the user's column specifications +% \ignorespaces is used as a delimiter, need at least one trailing \relax because +% \@@IEEEbuildpreamble looks into the future +\expandafter\@@IEEEbuildpreamble\@IEEEedefMACRO\ignorespaces\relax\relax} + + +% usage: \@@IEEEbuildpreamble{current column}{next column} +% parses and builds the halign preamble +\def\@@IEEEbuildpreamble#1#2{\let\@@nextIEEEbuildpreamble=\@@IEEEbuildpreamble% +% use only the very first token to check the end +\@IEEEextracttokengroups{#1}\relax +\ifx\@IEEEextractedfirsttoken\ignorespaces\let\@@nextIEEEbuildpreamble=\@@IEEEfinishpreamble\else% +% identify current and next token type +\@IEEEgetcoltype{#1}{\@IEEEBPcurtype}{1}% current, error on invalid +\@IEEEgetcoltype{#2}{\@IEEEBPnexttype}{0}% next, no error on invalid next +% if curtype is a glue, get the glue def +\if\@IEEEBPcurtype g\@IEEEgetcurglue{#1}{\@IEEEBPcurglue}\fi% +% if curtype is a column, get the column def and set the current column name +\if\@IEEEBPcurtype c\@IEEEgetcurcol{#1}\fi% +% if curtype is a numeral, acquire the user defined glue +\if\@IEEEBPcurtype n\@IEEEprocessNcol{#1}\fi% +% process the acquired glue +\if\@IEEEBPcurtype g\@IEEEprocessGcol\fi% +% process the acquired col +\if\@IEEEBPcurtype c\@IEEEprocessCcol\fi% +% ready prevtype for next col spec. +\let\@IEEEBPprevtype=\@IEEEBPcurtype% +% be sure and put back the future token(s) as a group +\fi\@@nextIEEEbuildpreamble{#2}} + + +% usage: \@@IEEEfinishpreamble{discarded} +% executed just after preamble build is completed +% warn about zero cols, and if prevtype type = u, put in end tabskip glue +% argument is not used +\def\@@IEEEfinishpreamble#1{\ifnum\@IEEEeqnnumcols<1\relax +\@IEEEclspkgerror{No column specifiers declared for IEEEeqnarray}% +{At least one column type must be declared for each IEEEeqnarray.}% +\fi%num cols less than 1 +%if last type undefined, set default end tabskip glue +\if\@IEEEBPprevtype u\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue}\fi} + + +% usage: \@IEEEgetcoltype{col specifier}{\output}{error more} +% Identify and return the column specifier's type code in the given +% \output macro: +% n = number +% g = glue (any other char in catagory 12) +% c = letter +% e = \ignorespaces (end of sequence) +% u = undefined +% error mode: 0 = no error message, 1 = error on invalid char +\def\@IEEEgetcoltype#1#2#3{% +% use only the very first token to determine the type +\@IEEEextracttoken{#1}\relax +% \@IEEEextractedtoken has the first token, the rest are discarded +\let#2=u\relax% assume invalid until know otherwise +\ifx\@IEEEextractedtoken\ignorespaces\let#2=e\else +\ifcat\@IEEEextractedtoken\relax\else% screen out control sequences +\if0\@IEEEextractedtoken\let#2=n\else +\if1\@IEEEextractedtoken\let#2=n\else +\if2\@IEEEextractedtoken\let#2=n\else +\if3\@IEEEextractedtoken\let#2=n\else +\if4\@IEEEextractedtoken\let#2=n\else +\if5\@IEEEextractedtoken\let#2=n\else +\if6\@IEEEextractedtoken\let#2=n\else +\if7\@IEEEextractedtoken\let#2=n\else +\if8\@IEEEextractedtoken\let#2=n\else +\if9\@IEEEextractedtoken\let#2=n\else +\ifcat,\@IEEEextractedtoken\let#2=g\relax +\else\ifcat a\@IEEEextractedtoken\let#2=c\relax\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi +\if#2u\relax +\if0\noexpand#3\relax\else\@IEEEclspkgerror{Invalid character in column specifications}% +{Only letters, numerals and certain other symbols are allowed \MessageBreak +as IEEEeqnarray column specifiers.}\fi\fi} + + +% usage: \@IEEEgetcurcol{col specifier} +% verify the letter referenced column exists +% and return its name in \@IEEEBPcurcolname +% if column specifier is invalid, use the default column @IEEEdefault +\def\@IEEEgetcurcol#1{\expandafter\ifx\csname @IEEEeqnarraycolDEF#1\endcsname\@IEEEeqnarraycolisdefined% +\def\@IEEEBPcurcolname{#1}\else% invalid column name +\@IEEEclspkgerror{Invalid column type "#1" in column specifications.\MessageBreak +Using a default centering column instead}% +{You must define IEEEeqnarray column types before use.}% +\def\@IEEEBPcurcolname{@IEEEdefault}\fi} + + +% usage: \@IEEEgetcurglue{glue specifier}{\output} +% identify the predefined (punctuation) glue value +% and return it in the given output macro +\def\@IEEEgetcurglue#1#2{% +% ! = \! (neg small) -0.16667em (-3/18 em) +% , = \, (small) 0.16667em ( 3/18 em) +% : = \: (med) 0.22222em ( 4/18 em) +% ; = \; (large) 0.27778em ( 5/18 em) +% ' = \quad 1em +% " = \qquad 2em +% . = 0.5\arraycolsep +% / = \arraycolsep +% ? = 2\arraycolsep +% * = 1fil +% + = \@IEEEeqnarraycolSEPcenter +% - = \@IEEEeqnarraycolSEPzero +% Note that all em values are referenced to the math font (textfont2) fontdimen6 +% value for 1em. +% +% use only the very first token to determine the type +\@IEEEextracttoken{#1}\relax +\ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: IEEEeqnarray predefined inter-column glue type specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax +\fi +% get the math font 1em value +% LaTeX2e's NFSS2 does not preload the fonts, but \IEEEeqnarray needs +% to gain access to the math (\textfont2) font's spacing parameters. +% So we create a bogus box here that uses the math font to ensure +% that \textfont2 is loaded and ready. If this is not done, +% the \textfont2 stuff here may not work. +% Thanks to Bernd Raichle for his 1997 post on this topic. +{\setbox0=\hbox{$\displaystyle\relax$}}% +% fontdimen6 has the width of 1em (a quad). +\@IEEEtrantmpdimenA=\fontdimen6\textfont2\relax% +% identify the glue value based on the first token +% we discard anything after the first +\if!\@IEEEextractedtoken\@IEEEtrantmpdimenA=-0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if,\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if:\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.22222\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if;\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.27778\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if'\@IEEEextractedtoken\@IEEEtrantmpdimenA=1\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if"\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if.\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.5\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else +\if/\@IEEEextractedtoken\edef#2{\the\arraycolsep}\else +\if?\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else +\if *\@IEEEextractedtoken\edef#2{0pt plus 1fil minus 0pt}\else +\if+\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPcenter}\else +\if-\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPzero}\else +\edef#2{\@IEEEeqnarraycolSEPzero}% +\@IEEEclspkgerror{Invalid predefined inter-column glue type "#1" in\MessageBreak +column specifications. Using a default value of\MessageBreak +0pt instead}% +{Only !,:;'"./?*+ and - are valid predefined glue types in the\MessageBreak +IEEEeqnarray column specifications.}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + + +% usage: \@IEEEprocessNcol{digit} +% process a numerical digit from the column specification +% and look up the corresponding user defined glue value +% can transform current type from n to g or a as the user defined glue is acquired +\def\@IEEEprocessNcol#1{\if\@IEEEBPprevtype g% +\@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak +specifications. Ignoring consecutive glue specifiers\MessageBreak +after the first}% +{You cannot have two or more glue types next to each other\MessageBreak +in the IEEEeqnarray column specifications.}% +\let\@IEEEBPcurtype=a% abort this glue, future digits will be discarded +\@IEEEBPcurnum=0\relax% +\else% if we previously aborted a glue +\if\@IEEEBPprevtype a\@IEEEBPcurnum=0\let\@IEEEBPcurtype=a%maintain digit abortion +\else%acquire this number +% save the previous type before the numerical digits started +\if\@IEEEBPprevtype n\else\let\@IEEEBPprevsavedtype=\@IEEEBPprevtype\fi% +\multiply\@IEEEBPcurnum by 10\relax% +\advance\@IEEEBPcurnum by #1\relax% add in number, \relax is needed to stop TeX's number scan +\if\@IEEEBPnexttype n\else%close acquisition +\expandafter\ifx\csname @IEEEeqnarraycolSEPDEF\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname\@IEEEeqnarraycolisdefined% +\edef\@IEEEBPcurglue{\csname @IEEEeqnarraycolSEP\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname}% +\else%user glue not defined +\@IEEEclspkgerror{Invalid user defined inter-column glue type "\number\@IEEEBPcurnum" in\MessageBreak +column specifications. Using a default value of\MessageBreak +0pt instead}% +{You must define all IEEEeqnarray numerical inter-column glue types via\MessageBreak +\string\IEEEeqnarraydefcolsep \space before they are used in column specifications.}% +\edef\@IEEEBPcurglue{\@IEEEeqnarraycolSEPzero}% +\fi% glue defined or not +\let\@IEEEBPcurtype=g% change the type to reflect the acquired glue +\let\@IEEEBPprevtype=\@IEEEBPprevsavedtype% restore the prev type before this number glue +\@IEEEBPcurnum=0\relax%ready for next acquisition +\fi%close acquisition, get glue +\fi%discard or acquire number +\fi%prevtype glue or not +} + + +% process an acquired glue +% add any acquired column/glue pair to the preamble +\def\@IEEEprocessGcol{\if\@IEEEBPprevtype a\let\@IEEEBPcurtype=a%maintain previous glue abortions +\else +% if this is the start glue, save it, but do nothing else +% as this is not used in the preamble, but before +\if\@IEEEBPprevtype s\edef\@IEEEBPstartglue{\@IEEEBPcurglue}% +\else%not the start glue +\if\@IEEEBPprevtype g%ignore if back to back glues +\@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak +specifications. Ignoring consecutive glue specifiers\MessageBreak +after the first}% +{You cannot have two or more glue types next to each other\MessageBreak +in the IEEEeqnarray column specifications.}% +\let\@IEEEBPcurtype=a% abort this glue +\else% not a back to back glue +\if\@IEEEBPprevtype c\relax% if the previoustype was a col, add column/glue pair to preamble +\ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi +\toks0={##}% +% make preamble advance col counter if this environment needs this +\if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi +% insert the column defintion into the preamble, being careful not to expand +% the column definition +\@IEEEappendtoksA{\tabskip=\@IEEEBPcurglue}% +\@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname}% +\@IEEEappendtoksA{\the\toks0}% +\@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\endgroup}% +\advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble +\else% error: non-start glue with no pending column +\@IEEEclspkgerror{Inter-column glue specifier without a prior column\MessageBreak +type in the column specifications. Ignoring this glue\MessageBreak +specifier}% +{Except for the first and last positions, glue can be placed only\MessageBreak +between column types.}% +\let\@IEEEBPcurtype=a% abort this glue +\fi% previous was a column +\fi% back-to-back glues +\fi% is start column glue +\fi% prev type not a +} + + +% process an acquired letter referenced column and, if necessary, add it to the preamble +\def\@IEEEprocessCcol{\if\@IEEEBPnexttype g\else +\if\@IEEEBPnexttype n\else +% we have a column followed by something other than a glue (or numeral glue) +% so we must add this column to the preamble now +\ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi%col separator for those after the first +\if\@IEEEBPnexttype e\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue\relax}\else%put in end glue +\@IEEEappendtoksA{\tabskip=\@IEEEeqnarraycolSEPdefaultmid\relax}\fi% or default mid glue +\toks0={##}% +% make preamble advance col counter if this environment needs this +\if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi +% insert the column definition into the preamble, being careful not to expand +% the column definition +\@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname}% +\@IEEEappendtoksA{\the\toks0}% +\@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\endgroup}% +\advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble +\fi%next type not numeral +\fi%next type not glue +} + + +%% +%% END OF IEEEeqnarray DEFINITIONS +%% + + + + + +% set up the running headers and footers +% +% header and footer font and size specifications +\def\@IEEEheaderstyle{\normalfont\scriptsize} +\def\@IEEEfooterstyle{\normalfont\scriptsize} +% +% compsoc uses sans-serif headers and footers +\ifCLASSOPTIONcompsoc + \def\@IEEEheaderstyle{\normalfont\sffamily\scriptsize} + \def\@IEEEfooterstyle{\normalfont\sffamily\scriptsize} +\fi + + +% standard page style, ps@headings +\def\ps@headings{% default to standard twoside headers, no footers +% will change later if the mode requires otherwise +\def\@oddhead{\hbox{}\@IEEEheaderstyle\rightmark\hfil\thepage}\relax +\def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\let\@oddfoot\@empty +\let\@evenfoot\@empty +\ifCLASSOPTIONtechnote + % technote twoside + \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax + \def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\fi +\ifCLASSOPTIONdraftcls + % draft footers + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax +\fi +% oneside +\if@twoside\else + % standard one side headers + \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax + \let\@evenhead\@empty + \ifCLASSOPTIONdraftcls + % oneside draft footers + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \let\@evenfoot\@empty + \fi +\fi +% turn off headers for conferences +\ifCLASSOPTIONconference + \let\@oddhead\@empty + \let\@evenhead\@empty +\fi +% turn off footers for draftclsnofoot +\ifCLASSOPTIONdraftclsnofoot + \let\@oddfoot\@empty + \let\@evenfoot\@empty +\fi} + + +% title page style, ps@IEEEtitlepagestyle +\def\ps@IEEEtitlepagestyle{% default title page headers, no footers +\def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax +\def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\let\@oddfoot\@empty +\let\@evenfoot\@empty +% will change later if the mode requires otherwise +\ifCLASSOPTIONdraftcls + % draft footers + \ifCLASSOPTIONdraftclsnofoot\else + % but only if not draftclsnofoot + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax + \fi +\else + % all nondraft mode footers + \if@IEEEusingpubid + % for title pages that are using a pubid + % do not repeat pubid on the title page if using a peer review cover page + \ifCLASSOPTIONpeerreview\else + % for noncompsoc papers, the pubid uses footnotesize and + % is at the same vertical position as where the last baseline would normally be + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \ifCLASSOPTIONcompsoc + % for compsoc papers, the pubid is at the same vertical position as the normal footer + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \fi + \fi + \fi +\fi +% turn off headers for conferences +\ifCLASSOPTIONconference + \let\@oddhead\@empty + \let\@evenhead\@empty +\fi} + + +% peer review cover page style, ps@IEEEpeerreviewcoverpagestyle +\def\ps@IEEEpeerreviewcoverpagestyle{% default peer review cover no headers, no footers +\let\@oddhead\@empty +\let\@evenhead\@empty +\let\@oddfoot\@empty +\let\@evenfoot\@empty +% will change later if the mode requires otherwise +\ifCLASSOPTIONdraftcls + % draft footers + \ifCLASSOPTIONdraftclsnofoot\else + % but only if not draftclsnofoot + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax + \fi +\else + % all nondraft mode footers + \if@IEEEusingpubid + % for peer review cover pages that are using a pubid + % for noncompsoc papers, the pubid uses footnotesize and + % is at the same vertical position as where the last baseline would normally be + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \ifCLASSOPTIONcompsoc + % for compsoc papers, the pubid is at the same vertical position as the normal footer + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \fi + \fi +\fi} + + + +%% Defines the command for putting the header. +%% Note that all the text is forced into uppercase, if you have some text +%% that needs to be in lower case, for instance et. al., then either manually +%% set \leftmark and \rightmark or use \MakeLowercase{et. al.} within the +%% arguments to \markboth. +%% V1.7b add \protect to work with Babel +\def\markboth#1#2{\def\leftmark{\MakeUppercase{\protect#1}}% +\def\rightmark{\MakeUppercase{\protect#2}}} + +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} + + + + +%% CITATION AND BIBLIOGRAPHY COMMANDS +%% +%% V1.6 no longer supports the older, nonstandard \shortcite and \citename setup stuff +% +% +% Modify Latex2e \@citex to separate citations with "], [" +\def\@citex[#1]#2{% + \let\@citea\@empty + \@cite{\@for\@citeb:=#2\do + {\@citea\def\@citea{], [}% + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi + \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}% + \G@refundefinedtrue + \@latex@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {\hbox{\csname b@\@citeb\endcsname}}}}{#1}} + +% V1.6 we create hooks for the optional use of Donald Arseneau's +% cite.sty package. cite.sty is "smart" and will notice that the +% following format controls are already defined and will not +% redefine them. The result will be the proper sorting of the +% citation numbers and auto detection of 3 or more entry "ranges" - +% all in IEEE style: [1], [2], [5]--[7], [12] +% This also allows for an optional note, i.e., \cite[mynote]{..}. +% If the \cite with note has more than one reference, the note will +% be applied to the last of the listed references. It is generally +% desired that if a note is given, only one reference is listed in +% that \cite. +% Thanks to Mr. Arseneau for providing the required format arguments +% to produce the IEEE style. +\def\citepunct{], [} +\def\citedash{]--[} + +% V1.7 default to using same font for urls made by url.sty +\AtBeginDocument{\csname url@samestyle\endcsname} + +% V1.6 class files should always provide these +\def\newblock{\hskip .11em\@plus.33em\@minus.07em} +\let\@openbib@code\@empty +% V1.8b article.cls is now providing these too +% we do not use \@mkboth, nor alter the page style +\newenvironment{theindex} + {\if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi + \twocolumn[\section*{\indexname}]% + \parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \columnseprule \z@ + \columnsep 35\p@ + \let\item\@idxitem} + {\if@restonecol\onecolumn\else\clearpage\fi} +\newcommand\@idxitem{\par\hangindent 40\p@} +\newcommand\subitem{\@idxitem \hspace*{20\p@}} +\newcommand\subsubitem{\@idxitem \hspace*{30\p@}} +\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} + + + +% Provide support for the control entries of IEEEtran.bst V1.00 and later. +% V1.7 optional argument allows for a different aux file to be specified in +% order to handle multiple bibliographies. For example, with multibib.sty: +% \newcites{sec}{Secondary Literature} +% \bstctlcite[@auxoutsec]{BSTcontrolhak} +\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}} +\def\@bstctlcite[#1]#2{\@bsphack + \@for\@citeb:=#2\do{% + \edef\@citeb{\expandafter\@firstofone\@citeb}% + \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}% + \@esphack} + +% \IEEEnoauxwrite{} allows for citations that do not add to or affect +% the order of the existing citation list. Can be useful for \cite +% within \thanks{}. +\DeclareRobustCommand{\IEEEnoauxwrite}[1]{\relax +\if@filesw +\@fileswfalse +#1\relax\relax\relax\relax\relax +\@fileswtrue +\else +#1\relax\relax\relax\relax\relax +\fi} + +% V1.6 provide a way for a user to execute a command just before +% a given reference number - used to insert a \newpage to balance +% the columns on the last page +\edef\@IEEEtriggerrefnum{0} % the default of zero means that + % the command is not executed +\def\@IEEEtriggercmd{\newpage} + +% allow the user to alter the triggered command +\long\def\IEEEtriggercmd#1{\long\def\@IEEEtriggercmd{#1}} + +% allow user a way to specify the reference number just before the +% command is executed +\def\IEEEtriggeratref#1{\@IEEEtrantmpcountA=#1% +\edef\@IEEEtriggerrefnum{\the\@IEEEtrantmpcountA}}% + +% trigger command at the given reference +\def\@IEEEbibitemprefix{\@IEEEtrantmpcountA=\@IEEEtriggerrefnum\relax% +\advance\@IEEEtrantmpcountA by -1\relax% +\ifnum\c@enumiv=\@IEEEtrantmpcountA\relax\@IEEEtriggercmd\relax\fi} + + +\def\@biblabel#1{[#1]} + +% compsoc journals and conferences left align the reference numbers +\@IEEEcompsoconly{\def\@biblabel#1{[#1]\hfill}} + +% controls bib item spacing +\def\IEEEbibitemsep{0pt plus .5pt} + +\@IEEEcompsocconfonly{\def\IEEEbibitemsep{0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}} + + +\def\thebibliography#1{\section*{\refname}% + \addcontentsline{toc}{section}{\refname}% + % V1.6 add some rubber space here and provide a command trigger + \footnotesize\vskip 0.3\baselineskip plus 0.1\baselineskip minus 0.1\baselineskip% + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep\relax + \itemsep \IEEEbibitemsep\relax + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \let\@IEEElatexbibitem\bibitem% + \def\bibitem{\@IEEEbibitemprefix\@IEEElatexbibitem}% +\def\newblock{\hskip .11em plus .33em minus .07em}% +% originally: +% \sloppy\clubpenalty4000\widowpenalty4000% +% by adding the \interlinepenalty here, we make it more +% difficult, but not impossible, for LaTeX to break within a reference. +% The IEEE almost never breaks a reference (but they do it more often with +% technotes). You may get an underfull vbox warning around the bibliography, +% but the final result will be much more like what the IEEE will publish. +% MDS 11/2000 +\ifCLASSOPTIONtechnote\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty100% +\else\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty500\fi% + \sfcode`\.=1000\relax} +\let\endthebibliography=\endlist + + + + +% TITLE PAGE COMMANDS +% +% +% \IEEEmembership is used to produce the sublargesize italic font used to indicate author +% IEEE membership. compsoc uses a large size sans slant font +\def\IEEEmembership#1{{\@IEEEnotcompsoconly{\sublargesize}\normalfont\@IEEEcompsoconly{\sffamily}\textit{#1}}} + + +% \IEEEauthorrefmark{} produces a footnote type symbol to indicate author affiliation. +% When given an argument of 1 to 9, \IEEEauthorrefmark{} follows the standard LaTeX footnote +% symbol sequence convention. However, for arguments 10 and above, \IEEEauthorrefmark{} +% reverts to using lower case roman numerals, so it cannot overflow. Do note that you +% cannot use \footnotemark[] in place of \IEEEauthorrefmark{} within \author as the footnote +% symbols will have been turned off to prevent \thanks from creating footnote marks. +% \IEEEauthorrefmark{} produces a symbol that appears to LaTeX as having zero vertical +% height - this allows for a more compact line packing, but the user must ensure that +% the interline spacing is large enough to prevent \IEEEauthorrefmark{} from colliding +% with the text above. +% V1.7 make this a robust command +% V1.8 transmag uses an arabic author affiliation symbol +\ifCLASSOPTIONtransmag +\DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize #1}}} +\else +\DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or% + \mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger% + \or \ddagger\ddagger \else\textsuperscript{\expandafter\romannumeral#1}\fi}}}} +\fi + + +% FONT CONTROLS AND SPACINGS FOR CONFERENCE MODE AUTHOR NAME AND AFFILIATION BLOCKS +% +% The default font styles for the author name and affiliation blocks (confmode) +\def\@IEEEauthorblockNstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize} +\def\@IEEEauthorblockAstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\@IEEEcompsocconfonly{\itshape}\normalsize} +% The default if the user does not use an author block +\def\@IEEEauthordefaulttextstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize} + +% adjustment spacing from title (or special paper notice) to author name blocks (confmode) +% can be negative +\def\@IEEEauthorblockconfadjspace{-0.25em} +% compsoc conferences need more space here +\@IEEEcompsocconfonly{\def\@IEEEauthorblockconfadjspace{0.75\@IEEEnormalsizeunitybaselineskip}} + +% spacing between name and affiliation blocks (confmode) +% This can be negative. +% The IEEE doesn't want any added spacing here, but I will leave these +% controls in place in case they ever change their mind. +% Personally, I like 0.75ex. +%\def\@IEEEauthorblockNtopspace{0.75ex} +%\def\@IEEEauthorblockAtopspace{0.75ex} +\def\@IEEEauthorblockNtopspace{0.0ex} +\def\@IEEEauthorblockAtopspace{0.0ex} +\ifCLASSOPTIONtransmag +% transmag uses one line of space above first affiliation block +\def\@IEEEauthorblockAtopspace{1\@IEEEnormalsizeunitybaselineskip} +\fi + +% baseline spacing within name and affiliation blocks (confmode) +% must be positive, spacings below certain values will make +% the position of line of text sensitive to the contents of the +% line above it i.e., whether or not the prior line has descenders, +% subscripts, etc. For this reason it is a good idea to keep +% these above 2.6ex +\def\@IEEEauthorblockNinterlinespace{2.6ex} +\def\@IEEEauthorblockAinterlinespace{2.75ex} + +% This tracks the required strut size. +% See the \@IEEEauthorhalign command for the actual default value used. +\def\@IEEEauthorblockXinterlinespace{2.7ex} + +% variables to retain font size and style across groups +% values given here have no effect as they will be overwritten later +\gdef\@IEEESAVESTATEfontsize{10} +\gdef\@IEEESAVESTATEfontbaselineskip{12} +\gdef\@IEEESAVESTATEfontencoding{OT1} +\gdef\@IEEESAVESTATEfontfamily{ptm} +\gdef\@IEEESAVESTATEfontseries{m} +\gdef\@IEEESAVESTATEfontshape{n} + +% saves the current font attributes +\def\@IEEEcurfontSAVE{\global\let\@IEEESAVESTATEfontsize\f@size% +\global\let\@IEEESAVESTATEfontbaselineskip\f@baselineskip% +\global\let\@IEEESAVESTATEfontencoding\f@encoding% +\global\let\@IEEESAVESTATEfontfamily\f@family% +\global\let\@IEEESAVESTATEfontseries\f@series% +\global\let\@IEEESAVESTATEfontshape\f@shape} + +% restores the saved font attributes +\def\@IEEEcurfontRESTORE{\fontsize{\@IEEESAVESTATEfontsize}{\@IEEESAVESTATEfontbaselineskip}% +\fontencoding{\@IEEESAVESTATEfontencoding}% +\fontfamily{\@IEEESAVESTATEfontfamily}% +\fontseries{\@IEEESAVESTATEfontseries}% +\fontshape{\@IEEESAVESTATEfontshape}% +\selectfont} + + +% variable to indicate if the current block is the first block in the column +\newif\if@IEEEprevauthorblockincol \@IEEEprevauthorblockincolfalse + + +% the command places a strut with height and depth = \@IEEEauthorblockXinterlinespace +% we use this technique to have complete manual control over the spacing of the lines +% within the halign environment. +% We set the below baseline portion at 30%, the above +% baseline portion at 70% of the total length. +% Responds to changes in the document's \baselinestretch +\def\@IEEEauthorstrutrule{\@IEEEtrantmpdimenA\@IEEEauthorblockXinterlinespace% +\@IEEEtrantmpdimenA=\baselinestretch\@IEEEtrantmpdimenA% +\rule[-0.3\@IEEEtrantmpdimenA]{0pt}{\@IEEEtrantmpdimenA}} + + +% blocks to hold the authors' names and affilations. +% Makes formatting easy for conferences +% +% use real definitions in conference mode +% name block +\def\IEEEauthorblockN#1{\relax\@IEEEauthorblockNstyle% set the default text style +\gdef\@IEEEauthorblockXinterlinespace{0pt}% disable strut for spacer row +% the \expandafter hides the \cr in conditional tex, see the array.sty docs +% for details, probably not needed here as the \cr is in a macro +% do a spacer row if needed +\if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockNtopspaceline\fi +\global\@IEEEprevauthorblockincoltrue% we now have a block in this column +%restore the correct strut value +\gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockNinterlinespace}% +% input the author names +#1% +% end the row if the user did not already +\crcr} +% spacer row for names +\def\@IEEEauthorblockNtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockNtopspace}} +% +% affiliation block +\def\IEEEauthorblockA#1{\relax\@IEEEauthorblockAstyle% set the default text style +\gdef\@IEEEauthorblockXinterlinespace{0pt}%disable strut for spacer row +% the \expandafter hides the \cr in conditional tex, see the array.sty docs +% for details, probably not needed here as the \cr is in a macro +% do a spacer row if needed +\if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockAtopspaceline\fi +\global\@IEEEprevauthorblockincoltrue% we now have a block in this column +%restore the correct strut value +\gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockAinterlinespace}% +% input the author affiliations +#1% +% end the row if the user did not already +\crcr +% V1.8 transmag does not use any additional affiliation spacing after the first author +\ifCLASSOPTIONtransmag\gdef\@IEEEauthorblockAtopspace{0pt}\fi} + +% spacer row for affiliations +\def\@IEEEauthorblockAtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockAtopspace}} + + +% allow papers to compile even if author blocks are used in modes other +% than conference or peerreviewca. For such cases, we provide dummy blocks. +\ifCLASSOPTIONconference +\else + \ifCLASSOPTIONpeerreviewca\else + % not conference, peerreviewca or transmag mode + \ifCLASSOPTIONtransmag\else + \def\IEEEauthorblockN#1{#1}% + \def\IEEEauthorblockA#1{#1}% + \fi + \fi +\fi + + + +% we provide our own halign so as not to have to depend on tabular +\def\@IEEEauthorhalign{\@IEEEauthordefaulttextstyle% default text style + \lineskip=0pt\relax% disable line spacing + \lineskiplimit=0pt\relax% + \baselineskip=0pt\relax% + \@IEEEcurfontSAVE% save the current font + \mathsurround\z@\relax% no extra spacing around math + \let\\\@IEEEauthorhaligncr% replace newline with halign friendly one + \tabskip=0pt\relax% no column spacing + \everycr{}% ensure no problems here + \@IEEEprevauthorblockincolfalse% no author blocks yet + \def\@IEEEauthorblockXinterlinespace{2.7ex}% default interline space + \vtop\bgroup%vtop box + \halign\bgroup&\relax\hfil\@IEEEcurfontRESTORE\relax ##\relax + \hfil\@IEEEcurfontSAVE\@IEEEauthorstrutrule\cr} + +% ensure last line, exit from halign, close vbox +\def\end@IEEEauthorhalign{\crcr\egroup\egroup} + +% handle bogus star form +\def\@IEEEauthorhaligncr{{\ifnum0=`}\fi\@ifstar{\@@IEEEauthorhaligncr}{\@@IEEEauthorhaligncr}} + +% test and setup the optional argument to \\[] +\def\@@IEEEauthorhaligncr{\@testopt\@@@IEEEauthorhaligncr\z@skip} + +% end the line and do the optional spacer +\def\@@@IEEEauthorhaligncr[#1]{\ifnum0=`{\fi}\cr\noalign{\vskip#1\relax}} + + + +% flag to prevent multiple \and warning messages +\newif\if@IEEEWARNand +\@IEEEWARNandtrue + +% if in conference or peerreviewca modes, we support the use of \and as \author is a +% tabular environment, otherwise we warn the user that \and is invalid +% outside of conference or peerreviewca modes. +\def\and{\relax} % provide a bogus \and that we will then override + +\renewcommand{\and}[1][\relax]{\if@IEEEWARNand\typeout{** WARNING: \noexpand\and is valid only + when in conference or peerreviewca}\typeout{modes (line \the\inputlineno).}\fi\global\@IEEEWARNandfalse} + +\ifCLASSOPTIONconference% +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi +\ifCLASSOPTIONpeerreviewca +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi +% V1.8 transmag uses conference author format +\ifCLASSOPTIONtransmag +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi + +% page clearing command +% based on LaTeX2e's \cleardoublepage, but allows different page styles +% for the inserted blank pages +\def\@IEEEcleardoublepage#1{\clearpage\if@twoside\ifodd\c@page\else +\hbox{}\thispagestyle{#1}\newpage\if@twocolumn\hbox{}\thispagestyle{#1}\newpage\fi\fi\fi} + +% V1.8b hooks to allow adjustment of space above title +\def\IEEEtitletopspace{0.5\baselineskip} +% an added extra amount to allow for adjustment/offset +\def\IEEEtitletopspaceextra{0pt} + +% user command to invoke the title page +\def\maketitle{\par% + \begingroup% + \normalfont% + \def\thefootnote{}% the \thanks{} mark type is empty + \def\footnotemark{}% and kill space from \thanks within author + \let\@makefnmark\relax% V1.7, must *really* kill footnotemark to remove all \textsuperscript spacing as well. + \footnotesize% equal spacing between thanks lines + \footnotesep 0.7\baselineskip%see global setting of \footnotesep for more info + % V1.7 disable \thanks note indention for compsoc + \@IEEEcompsoconly{\long\def\@makefntext##1{\parindent 1em\noindent\hbox{\@makefnmark}##1}}% + \normalsize% + \ifCLASSOPTIONpeerreview + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \thispagestyle{IEEEpeerreviewcoverpagestyle}\@thanks% + \else + \if@twocolumn% + \ifCLASSOPTIONtechnote% + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \else + \twocolumn[{\IEEEquantizevspace{\@maketitle}[\IEEEquantizedisabletitlecmds]{0pt}[-\topskip]{\baselineskip}{\@IEEENORMtitlevspace}{\@IEEEMINtitlevspace}\@IEEEaftertitletext}]% + \fi + \else + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \fi + \thispagestyle{IEEEtitlepagestyle}\@thanks% + \fi + % pullup page for pubid if used. + \if@IEEEusingpubid + \enlargethispage{-\@IEEEpubidpullup}% + \fi + \endgroup + \setcounter{footnote}{0}\let\maketitle\relax\let\@maketitle\relax + \gdef\@thanks{}% + % v1.6b do not clear these as we will need the title again for peer review papers + % \gdef\@author{}\gdef\@title{}% + \let\thanks\relax} + + +% V1.8 parbox to format \@IEEEtitleabstractindextext +\long\def\@IEEEtitleabstractindextextbox#1{\parbox{1\textwidth}{#1}} +% V1.8 compsoc is partial width +\ifCLASSOPTIONcompsoc +% comparison with proofs suggests it's in the range of 92.1-92.3% +\long\def\@IEEEtitleabstractindextextbox#1{\parbox{0.922\textwidth}{\@IEEEcompsocnotconfonly{\rightskip\@flushglue\leftskip\z@skip}#1}} +\fi + +% formats the Title, authors names, affiliations and special paper notice +% THIS IS A CONTROLLED SPACING COMMAND! Do not allow blank lines or unintentional +% spaces to enter the definition - use % at the end of each line +\def\@maketitle{\newpage +\bgroup\par\vskip\IEEEtitletopspace\vskip\IEEEtitletopspaceextra\centering% +\ifCLASSOPTIONtechnote% technotes, V1.8a abstract and index terms are not treated differently for compsoc technotes + {\bfseries\large\@IEEEcompsoconly{\Large\sffamily}\@title\par}\vskip 1.3em{\lineskip .5em\@IEEEcompsoconly{\large\sffamily}\@author + \@IEEEspecialpapernotice\par}\relax +\else% not a technote + \vskip0.2em{\Huge\ifCLASSOPTIONtransmag\bfseries\LARGE\fi\@IEEEcompsoconly{\sffamily}\@IEEEcompsocconfonly{\normalfont\normalsize\vskip 2\@IEEEnormalsizeunitybaselineskip + \bfseries\Large}\@IEEEcompsocnotconfonly{\vskip 0.75\@IEEEnormalsizeunitybaselineskip}\@title\par}\relax + \@IEEEcompsocnotconfonly{\vskip 0.5\@IEEEnormalsizeunitybaselineskip}\vskip1.0em\par% + % V1.6 handle \author differently if in conference mode + \ifCLASSOPTIONconference% + {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par}\relax + \else% peerreviewca, peerreview or journal + \ifCLASSOPTIONpeerreviewca + % peerreviewca handles author names just like conference mode + {\@IEEEcompsoconly{\sffamily}\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par + {\@IEEEcompsoconly{\vskip 1.5em\relax + \@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\par\noindent\hfill + \IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax + \else% journal, peerreview or transmag + \ifCLASSOPTIONtransmag + % transmag also handles author names just like conference mode + % it also uses \@IEEEtitleabstractindextex, but with one line less + % space above, and one more below + {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par + {\vspace{0.5\baselineskip}\relax\@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\vspace{-1\baselineskip}\par}}\relax + \else% journal or peerreview + {\lineskip.5em\@IEEEcompsoconly{\sffamily}\sublargesize\@author\@IEEEspecialpapernotice\par + {\@IEEEcompsoconly{\vskip 1.5em\relax + \@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\par\noindent\hfill + \IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax + \fi + \fi + \fi +\fi\par\addvspace{0.5\baselineskip}\egroup} + + +% V1.7 Computer Society "diamond line" which follows index terms for nonconference papers +% V1.8a full width diamond line for single column use +\def\@IEEEcompsocdiamondlinei{\vrule depth 0pt height 0.5pt width 4cm\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\vrule depth 0pt height 0.5pt width 4cm\relax} +% V1.8a narrower width diamond line for double column use +\def\@IEEEcompsocdiamondlineii{\vrule depth 0pt height 0.5pt width 2.5cm\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\vrule depth 0pt height 0.5pt width 2.5cm\relax} +% V1.8a bare core without rules to base a last resort on for very narrow linewidths +\def\@IEEEcompsocdiamondlineiii{\mbox{}\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\mbox{}\relax} + +% V1.8a allow \IEEEcompsocdiamondline to adjust for different linewidths. +% Use \@IEEEcompsocdiamondlinei if its width is less than 0.66\linewidth (0.487 nominal for single column) +% if not, fall back to \@IEEEcompsocdiamondlineii if its width is less than 0.75\linewidth (0.659 nominal for double column) +% if all else fails, try to make a custom diamondline based on the abnormally narrow linewidth +\def\IEEEcompsocdiamondline{\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlinei}\relax +\ifdim\@IEEEtrantmpdimenA<0.66\linewidth\relax\@IEEEcompsocdiamondlinei\relax +\else +\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlineii}\relax +\ifdim\@IEEEtrantmpdimenA<0.75\linewidth\relax\@IEEEcompsocdiamondlineii\relax +\else +\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlineiii}\relax +\@IEEEtrantmpdimenB=\linewidth\relax +\addtolength{\@IEEEtrantmpdimenB}{-1\@IEEEtrantmpdimenA}\relax +\vrule depth 0pt height 0.5pt width 0.33\@IEEEtrantmpdimenB\@IEEEcompsocdiamondlineiii\vrule depth 0pt height 0.5pt width 0.33\@IEEEtrantmpdimenB\relax +\fi\fi} + + +% V1.7 standard LateX2e \thanks, but with \itshape under compsoc. Also make it a \long\def +% We also need to trigger the one-shot footnote rule +\def\@IEEEtriggeroneshotfootnoterule{\global\@IEEEenableoneshotfootnoteruletrue} + + +\long\def\thanks#1{\footnotemark + \protected@xdef\@thanks{\@thanks + \protect\footnotetext[\the\c@footnote]{\@IEEEcompsoconly{\itshape + \protect\@IEEEtriggeroneshotfootnoterule\relax}\ignorespaces#1}}} +\let\@thanks\@empty + + +% V1.7 allow \author to contain \par's. This is needed to allow \thanks to contain \par. +\long\def\author#1{\gdef\@author{#1}} + + +% in addition to setting up IEEEitemize, we need to remove a baselineskip space above and +% below it because \list's \pars introduce blank lines because of the footnote struts. +\def\@IEEEsetupcompsocitemizelist{\def\labelitemi{$\bullet$}% +\setlength{\IEEElabelindent}{0pt}\setlength{\labelsep}{1.2em}\setlength{\parskip}{0pt}% +\setlength{\partopsep}{0pt}\setlength{\topsep}{0.5\baselineskip}\vspace{-1\baselineskip}\relax} + + +% flag for fake non-compsoc \IEEEcompsocthanksitem - prevents line break on very first item +\newif\if@IEEEbreakcompsocthanksitem \@IEEEbreakcompsocthanksitemfalse + +\ifCLASSOPTIONcompsoc +% V1.7 compsoc bullet item \thanks +% also, we need to redefine this to destroy the argument in \IEEEquantizevspace +\long\def\IEEEcompsocitemizethanks#1{\relax\@IEEEbreakcompsocthanksitemfalse\footnotemark + \protected@xdef\@thanks{\@thanks + \protect\footnotetext[\the\c@footnote]{\itshape\protect\@IEEEtriggeroneshotfootnoterule + {\let\IEEEiedlistdecl\relax\protect\begin{IEEEitemize}[\protect\@IEEEsetupcompsocitemizelist]\ignorespaces#1\relax + \protect\end{IEEEitemize}}\protect\vspace{-1\baselineskip}}}} +\DeclareRobustCommand*{\IEEEcompsocthanksitem}{\item} +\else +% non-compsoc, allow for dual compilation via rerouting to normal \thanks +\long\def\IEEEcompsocitemizethanks#1{\thanks{#1}} +% redirect to "pseudo-par" \hfil\break\indent after swallowing [] from \IEEEcompsocthanksitem[] +\DeclareRobustCommand{\IEEEcompsocthanksitem}{\@ifnextchar [{\@IEEEthanksswallowoptionalarg}% +{\@IEEEthanksswallowoptionalarg[\relax]}} +% be sure and break only after first item, be sure and ignore spaces after optional argument +\def\@IEEEthanksswallowoptionalarg[#1]{\relax\if@IEEEbreakcompsocthanksitem\hfil\break +\indent\fi\@IEEEbreakcompsocthanksitemtrue\ignorespaces} +\fi + + +% V1.6b define the \IEEEpeerreviewmaketitle as needed +\ifCLASSOPTIONpeerreview +\def\IEEEpeerreviewmaketitle{\@IEEEcleardoublepage{empty}% +\ifCLASSOPTIONtwocolumn +\twocolumn[{\IEEEquantizevspace{\@IEEEpeerreviewmaketitle}[\IEEEquantizedisabletitlecmds]{0pt}[-\topskip]{\baselineskip}{\@IEEENORMtitlevspace}{\@IEEEMINtitlevspace}}] +\else +\newpage\@IEEEpeerreviewmaketitle\@IEEEstatictitlevskip +\fi +\thispagestyle{IEEEtitlepagestyle}} +\else +% \IEEEpeerreviewmaketitle does nothing if peer review option has not been selected +\def\IEEEpeerreviewmaketitle{\relax} +\fi + +% peerreview formats the repeated title like the title in journal papers. +\def\@IEEEpeerreviewmaketitle{\bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEcompsoconly{\sffamily}% +\normalfont\normalsize\vskip0.2em{\Huge\@title\par}\vskip1.0em\par +\par\addvspace{0.5\baselineskip}\egroup} + + + +% V1.6 +% this is a static rubber spacer between the title/authors and the main text +% used for single column text, or when the title appears in the first column +% of two column text (technotes). +\def\@IEEEstatictitlevskip{{\normalfont\normalsize +% adjust spacing to next text +% v1.6b handle peer review papers +\ifCLASSOPTIONpeerreview +% for peer review papers, the same value is used for both title pages +% regardless of the other paper modes + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip +\else + \ifCLASSOPTIONconference% conference + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip% + \else% + \ifCLASSOPTIONtechnote% technote + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip% + \else% journal uses more space + \vskip 2.5\baselineskip plus 0.75\baselineskip minus 0.375\baselineskip% + \fi + \fi +\fi}} + + +% set the nominal and minimum values for the quantized title spacer +% the quantization algorithm will not allow the spacer size to +% become less than \@IEEEMINtitlevspace - instead it will be lengthened +% default to journal values +\def\@IEEENORMtitlevspace{2.5\baselineskip} +\def\@IEEEMINtitlevspace{2\baselineskip} +% conferences and technotes need tighter spacing +\ifCLASSOPTIONconference% conference + \def\@IEEENORMtitlevspace{1\baselineskip} + \def\@IEEEMINtitlevspace{0.75\baselineskip} +\fi +\ifCLASSOPTIONtechnote% technote + \def\@IEEENORMtitlevspace{1\baselineskip} + \def\@IEEEMINtitlevspace{0.75\baselineskip} +\fi + + +% V1.8a +\def\IEEEquantizevspace{\begingroup\@ifstar{\@IEEEquantizevspacestarformtrue\@IEEEquantizevspace}{\@IEEEquantizevspacestarformfalse\@IEEEquantizevspace}} +% \IEEEquantizevspace[output dimen register]{object}[object decl] +% {top baselineskip} +% [offset][prevdepth][lineskip limit][lineskip] +% {unit height}{nominal vspace}{minimum vspace} +% +% Calculates and creates the vspace needed to make the combined height with +% the given object an integer multiple of the given unit height. This command +% is more general than the older \@IEEEdynamictitlevspace it replaces. +% +% The star form has no effect at present, but is reserved for future use. +% +% If the optional argument [output dimen register] is given, the calculated +% vspace height is stored in the given output dimen (or skip) register +% and no other action is taken, otherwise the object followed by a vspace* +% of the appropriate height is evaluated/output. +% +% The optional object decl (declarations) is code that is evaluated just +% before the object's height is evaluated. Its intented purpose is to allow +% for the alteration or disabling of code within the object during internal +% height evaluation (e.g., \long\def\thanks#1{\relax} ). +% This special code is not invoked if/when the object is rendered at the end. +% +% The nominal vspace is the target value of the added vspace and the minimum +% vspace is the lower allowed limit. The vspacer will be the value that achieves +% integral overall height, in terms of the given unit height, that is closest +% to the nominal vspace and that is not less than the specified minimum vspace. +% +% The line spacing algorithm of TeX is somewhat involved and requires special +% care with regard to the first line of a vertical list (which is indicated +% when \prevdepth is -1000pt or less). top baselineskip specifies the +% baselineskip or topskip used prior to the object. If the height of the +% first line of the object is greater than the given top baselineskip, then +% the top baselineskip is subtracted from the height of the first line and +% that difference is considered along with the rest of the object height +% (because the object will be shifted down by an amount = +% top line height - top baselineskip). Otherwise, the height of the first line +% of the object is ignored as far as the calculations are concerned. +% This algorithm is adequate for objects that appear at the top of a page +% (e.g., titles) where \topskip spacing is used. +% +% However, as explained on page 78 of the TeXbook, interline spacing is more +% complex when \baselineskip is being used (indicated by \prevdepth > +% -1000pt). The four optional parameters offset, prevdepth, lineskip limit and +% lineskip are assumed to be equal to be 0pt, \prevdepth, \lineskiplimit and +% \lineskip, respectively, if they are omitted. +% +% The prevdepth is the depth of the line before the object, the lineskip limit +% specifies how close the top of the object can come to the bottom of the +% previous line before \baselineskip is ignored and \lineskip is inserted +% between the object and the line above it. Lineskip does not come into +% play unless the first line of the object is high enough to "get too close" +% (as specified by lineskiplimit) to the line before it. The the prevdepth, +% lineskip limit, and lineskip optional parameters are not needed for the +% first object/line on a page (i.e., prevdepth <= -1000pt) where the simplier +% \topskip spacing rules are in effect. +% +% Offset is a manual adjustment that is added to the height calculations of +% object irrespective of the value of \prevdepth. It is useful when the top +% baselineskip will result in a noninteger unit height object placement even +% if the object itself has integral height. e.g., a footnotesize baselineskip +% is used before the object, thus an offset of, say -3pt, can be given as a +% correction. + +% Common combinations of these parameters include: +% +% top baselineskip: (and default values for offset, prevdepth, etc.) +% \topskip % for objects that appear at the top of a page +% \maxdimen % always ignore the height of the top line +% 0pt % always consider any positive height of the top line +% +% for objects to appear inline in normal text: +% top baselineskip = \baselineskip +% +% set prevdepth = -1000pt and top baselineskip = 0pt to consider the +% overall height of the object without any other external skip +% consideration + +\newif\if@IEEEquantizevspacestarform % flag to indicate star form +\newif\if@IEEEquantizevspaceuseoutdimenreg % flag to indicate output dimen register is to be used +% Use our own private registers because the object could contain a +% structure that uses the existing tmp scratch pad registers +\newdimen\@IEEEquantizeheightA +\newdimen\@IEEEquantizeheightB +\newdimen\@IEEEquantizeheightC +\newdimen\@IEEEquantizeprevdepth % need to save this early as can change +\newcount\@IEEEquantizemultiple +\newbox\@IEEEquantizeboxA + + +\def\@IEEEquantizevspace{\@ifnextchar [{\@IEEEquantizevspaceuseoutdimenregtrue\@@IEEEquantizevspace}{\@IEEEquantizevspaceuseoutdimenregfalse\@@IEEEquantizevspace[]}} + + +\long\def\@@IEEEquantizevspace[#1]#2{\relax +% acquire and store +% #1 optional output dimen register +% #2 object +\edef\@IEEEquantizeoutdimenreg{#1}\relax +% allow for object specifications that contain parameters +\@IEEEtrantmptoksA={#2}\relax +\long\edef\@IEEEquantizeobject{\the\@IEEEtrantmptoksA}\relax +\@ifnextchar [{\@@@IEEEquantizevspace}{\@@@IEEEquantizevspace[\relax]}} + +\long\def\@@@IEEEquantizevspace[#1]#2{\relax +% acquire and store +% [#1] optional object decl, is \relax if not given by user +% #2 top baselineskip +% allow for object decl specifications that have parameters +\@IEEEtrantmptoksA={#1}\relax +\long\edef\@IEEEquantizeobjectdecl{\the\@IEEEtrantmptoksA}\relax +\edef\@IEEEquantizetopbaselineskip{#2}\ivIEEEquantizevspace} + +% acquire optional argument set and store +% [offset][prevdepth][lineskip limit][lineskip] +\def\ivIEEEquantizevspace{\@ifnextchar [{\@vIEEEquantizevspace}{\@vIEEEquantizevspace[0pt]}} +\def\@vIEEEquantizevspace[#1]{\edef\@IEEEquantizeoffset{#1}\@ifnextchar [{\@viIEEEquantizevspace}{\@viIEEEquantizevspace[\prevdepth]}} +\def\@viIEEEquantizevspace[#1]{\@IEEEquantizeprevdepth=#1\relax\@ifnextchar [{\@viiIEEEquantizevspace}{\@viiIEEEquantizevspace[\lineskiplimit]}} +\def\@viiIEEEquantizevspace[#1]{\edef\@IEEEquantizelineskiplimit{#1}\@ifnextchar [{\@viiiIEEEquantizevspace}{\@viiiIEEEquantizevspace[\lineskip]}} +\def\@viiiIEEEquantizevspace[#1]{\edef\@IEEEquantizelineskip{#1}\@ixIEEEquantizevspace} + +% main routine +\def\@ixIEEEquantizevspace#1#2#3{\relax +\edef\@IEEEquantizeunitheight{#1}\relax +\edef\@IEEEquantizenomvspace{#2}\relax +\edef\@IEEEquantizeminvspace{#3}\relax +% \@IEEEquantizeoutdimenreg +% \@IEEEquantizeobject +% \@IEEEquantizeobjectdecl +% \@IEEEquantizetopbaselineskip +% \@IEEEquantizeoffset +% \@IEEEquantizeprevdepth +% \@IEEEquantizelineskiplimit +% \@IEEEquantizelineskip +% \@IEEEquantizeunitheight +% \@IEEEquantizenomvspace +% \@IEEEquantizeminvspace +% get overall height of object +\setbox\@IEEEquantizeboxA\vbox{\begingroup\@IEEEquantizeobjectdecl\@IEEEquantizeobject\relax\endgroup}\relax +\@IEEEquantizeheightA\ht\@IEEEquantizeboxA\relax +% get height of first line of object +\setbox\@IEEEquantizeboxA\vtop{\begingroup\@IEEEquantizeobjectdecl\@IEEEquantizeobject\relax\endgroup}\relax +\@IEEEquantizeheightB\ht\@IEEEquantizeboxA\relax +\ifdim\@IEEEquantizeprevdepth>-1000pt\relax % prevdepth > -1000pf means full baselineskip\lineskip rules in effect +% lineskip spacing rule takes effect if height of top line > baselineskip - prevdepth - lineskiplimit, +% otherwise the baselineskip rule is in effect and the height of the first line does not matter at all. +\@IEEEquantizeheightC=\@IEEEquantizetopbaselineskip\relax +\advance\@IEEEquantizeheightC-\@IEEEquantizeprevdepth\relax +\advance\@IEEEquantizeheightC-\@IEEEquantizelineskiplimit\relax % this works even though \@IEEEquantizelineskiplimit is a macro because TeX allows --10pt notation +\ifdim\@IEEEquantizeheightB>\@IEEEquantizeheightC\relax +% lineskip spacing rule is in effect i.e., the object is going to be shifted down relative to the +% baselineskip set position by its top line height (already a part of the total height) + prevdepth + lineskip - baselineskip +\advance\@IEEEquantizeheightA\@IEEEquantizeprevdepth\relax +\advance\@IEEEquantizeheightA\@IEEEquantizelineskip\relax +\advance\@IEEEquantizeheightA-\@IEEEquantizetopbaselineskip\relax +\else +% height of first line <= \@IEEEquantizetopbaselineskip - \@IEEEquantizeprevdepth - \@IEEEquantizelineskiplimit +% standard baselineskip rules are in effect, so don't consider height of first line +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightB\relax +\fi +% +\else % prevdepth <= -1000pt, simplier \topskip type rules in effect +\ifdim\@IEEEquantizeheightB>\@IEEEquantizetopbaselineskip +% height of top line (already included in the total height) in excess of +% baselineskip is the amount it will be downshifted +\advance\@IEEEquantizeheightA-\@IEEEquantizetopbaselineskip\relax +\else +% height of first line is irrelevant, remove it +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightB\relax +\fi +\fi % prevdepth <= -1000pt +% +% adjust height for any manual offset +\advance\@IEEEquantizeheightA\@IEEEquantizeoffset\relax +% add in nominal spacer +\advance\@IEEEquantizeheightA\@IEEEquantizenomvspace\relax +% check for nonzero unitheight +\@IEEEquantizeheightB=\@IEEEquantizeunitheight\relax +\ifnum\@IEEEquantizeheightB=0\relax +\@IEEEclspkgerror{IEEEquantizevspace unit height cannot be zero. Assuming 10pt.}% +{Division by zero is not allowed.} +\@IEEEquantizeheightB=10pt\relax +\fi +% get integer number of lines +\@IEEEquantizemultiple=\@IEEEquantizeheightA\relax +\divide\@IEEEquantizemultiple\@IEEEquantizeheightB\relax +% set A to contain the excess height over the \@IEEEquantizemultiple of lines +% A = height - multiple*unitheight +\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\multiply\@IEEEquantizeheightC\@IEEEquantizemultiple\relax +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightC\relax +% set B to contain the height short of \@IEEEquantizemultiple+1 of lines +% B = unitheight - A +\advance\@IEEEquantizeheightB-\@IEEEquantizeheightA\relax +% choose A or B based on which is closer +\@IEEEquantizeheightC\@IEEEquantizenomvspace\relax +\ifdim\@IEEEquantizeheightA<\@IEEEquantizeheightB\relax +% C = nomvspace - A, go with lower +\advance\@IEEEquantizeheightC-\@IEEEquantizeheightA\relax +\else +% C = nomvspace + B, go with upper +\advance\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\fi +% if violate lower bound, use next integer bound +\ifdim\@IEEEquantizeheightC<\@IEEEquantizeminvspace\relax +% A + B = unitheight +\advance\@IEEEquantizeheightC\@IEEEquantizeheightA\relax +\advance\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\fi +% export object and spacer outside of group +\global\let\@IEEEquantizeobjectout\@IEEEquantizeobject\relax +\global\@IEEEquantizeheightC\@IEEEquantizeheightC\relax +\endgroup +\if@IEEEquantizevspaceuseoutdimenreg +\@IEEEquantizeoutdimenreg=\@IEEEquantizeheightC\relax +\else +\@IEEEquantizeobjectout\relax +\vskip\@IEEEquantizeheightC\relax +\fi} + + +% user command to disable all global assignments, possible use within object decl +\def\IEEEquantizedisableglobal{\let\global\relax +\let\gdef\def +\let\xdef\edef} +% user command to allow for the disabling of \thanks and other commands, possible use within object decl +\def\IEEEquantizedisabletitlecmds{\long\def\thanks##1{\relax}\relax +\long\def\IEEEcompsocitemizethanks##1{\relax}\def\newpage{\relax}} + + + + + +% V1.6 +% we allow the user access to the last part of the title area +% useful in emergencies such as when a different spacing is needed +% This text is NOT compensated for in the dynamic sizer. +\let\@IEEEaftertitletext=\relax +\long\def\IEEEaftertitletext#1{\def\@IEEEaftertitletext{#1}} + + +% V1.7 provide a way for users to enter abstract and keywords +% into the onecolumn title are. This text is compensated for +% in the dynamic sizer. +\let\@IEEEtitleabstractindextext=\relax +\long\def\IEEEtitleabstractindextext#1{\def\@IEEEtitleabstractindextext{#1}} + +% V1.7 provide a way for users to get the \@IEEEtitleabstractindextext if +% not in compsoc or transmag journal mode - this way abstract and keywords +% can still be placed in their conventional position if not in those modes. +\def\IEEEdisplaynontitleabstractindextext{% +% display for all conference formats +\ifCLASSOPTIONconference\@IEEEtitleabstractindextext\relax +\else% non-conferences + % V1.8a display for all technotes + \ifCLASSOPTIONtechnote\@IEEEtitleabstractindextext\relax + % V1.8a add diamond line after abstract and index terms for compsoc technotes + \@IEEEcompsoconly{\noindent\hfill\IEEEcompsocdiamondline\hfill\hbox{}\par}\relax + \else % non-conferences and non-technotes + \ifCLASSOPTIONcompsoc% display if not compsoc and not transmag + \else + \ifCLASSOPTIONtransmag + \else% not compsoc journal nor transmag journal + \@IEEEtitleabstractindextext\relax + \fi + \fi + \fi +\fi} + + +% command to allow alteration of baselinestretch, but only if the current +% baselineskip is unity. Used to tweak the compsoc abstract and keywords line spacing. +\def\@IEEEtweakunitybaselinestretch#1{{\def\baselinestretch{1}\selectfont +\global\@tempskipa\baselineskip}\ifnum\@tempskipa=\baselineskip% +\def\baselinestretch{#1}\selectfont\fi\relax} + + +% abstract and keywords are in \small, except +% for 9pt docs in which they are in \footnotesize +% Because 9pt docs use an 8pt footnotesize, \small +% becomes a rather awkward 8.5pt +\def\@IEEEabskeysecsize{\small} +\ifx\CLASSOPTIONpt\@IEEEptsizenine + \def\@IEEEabskeysecsize{\footnotesize} +\fi + +% compsoc journals use \footnotesize, compsoc conferences use normalsize +\@IEEEcompsoconly{\def\@IEEEabskeysecsize{\footnotesize}} +\@IEEEcompsocconfonly{\def\@IEEEabskeysecsize{\small}} + + +% V1.6 have abstract and keywords strip leading spaces, pars and newlines +% so that spacing is more tightly controlled. +\def\abstract{\normalfont + \if@twocolumn + \@IEEEabskeysecsize\bfseries\textit{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +% V1.6 The IEEE wants only 1 pica from end of abstract to introduction heading when in +% conference mode (the heading already has this much above it) +\def\endabstract{\relax\ifCLASSOPTIONconference\vspace{0ex}\else\vspace{1.34ex}\fi\par\if@twocolumn\else\endquotation\fi + \normalfont\normalsize} + +\def\IEEEkeywords{\normalfont + \if@twocolumn + \@IEEEabskeysecsize\bfseries\textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +\def\endIEEEkeywords{\relax\ifCLASSOPTIONtechnote\vspace{1.34ex}\else\vspace{0.67ex}\fi + \par\if@twocolumn\else\endquotation\fi% + \normalfont\normalsize} + +% V1.7 compsoc keywords index terms +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONconference% compsoc conference +\def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\bfseries + \if@twocolumn + \@IEEEabskeysecsize\noindent\textit{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} +\def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\bfseries + \if@twocolumn + \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent + \textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} + \else% compsoc not conference +\def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily + \if@twocolumn + \@IEEEabskeysecsize\noindent\textbf{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} +\def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily + \if@twocolumn + \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent + \textbf{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} + \fi +\fi + +% V1.8 transmag keywords index terms +% no abstract name, use indentation +\ifCLASSOPTIONtransmag +\def\abstract{\normalfont\parindent 1em\relax + \if@twocolumn + \@IEEEabskeysecsize\bfseries\indent + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize + \textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} + +\def\IEEEkeywords{\normalfont\parindent 1em\relax + \if@twocolumn + \@IEEEabskeysecsize\vspace{1\baselineskip}\bfseries\indent\textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\vspace{1\baselineskip}\centering\@IEEEabskeysecsize + \textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +\fi + + + +% gobbles all leading \, \\ and \par, upon finding first token that +% is not a \ , \\ or a \par, it ceases and returns that token +% +% used to strip leading \, \\ and \par from the input +% so that such things in the beginning of an environment will not +% affect the formatting of the text +\long\def\@IEEEgobbleleadPARNLSP#1{\let\@IEEEswallowthistoken=0% +\let\@IEEEgobbleleadPARNLSPtoken#1% +\let\@IEEEgobbleleadPARtoken=\par% +\let\@IEEEgobbleleadNLtoken=\\% +\let\@IEEEgobbleleadSPtoken=\ % +\def\@IEEEgobbleleadSPMACRO{\ }% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadPARtoken% +\let\@IEEEswallowthistoken=1% +\fi% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadNLtoken% +\let\@IEEEswallowthistoken=1% +\fi% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPtoken% +\let\@IEEEswallowthistoken=1% +\fi% +% a control space will come in as a macro +% when it is the last one on a line +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPMACRO% +\let\@IEEEswallowthistoken=1% +\fi% +% if we have to swallow this token, do so and taste the next one +% else spit it out and stop gobbling +\ifx\@IEEEswallowthistoken 1\let\@IEEEnextgobbleleadPARNLSP=\@IEEEgobbleleadPARNLSP\else% +\let\@IEEEnextgobbleleadPARNLSP=#1\fi% +\@IEEEnextgobbleleadPARNLSP}% + + + + +% TITLING OF SECTIONS +\def\@IEEEsectpunct{:\ \,} % Punctuation after run-in section heading (headings which are + % part of the paragraphs), need little bit more than a single space + % spacing from section number to title +% compsoc conferences use regular period/space punctuation +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference +\def\@IEEEsectpunct{.\ } +\fi\fi + + +\def\@seccntformat#1{\csname the#1dis\endcsname\hskip 0.5em\relax} + +\ifCLASSOPTIONcompsoc +% compsoc journals need extra spacing +\ifCLASSOPTIONconference\else +\def\@seccntformat#1{\csname the#1dis\endcsname\hskip 1em\relax} +\fi\fi + +%v1.7 put {} after #6 to allow for some types of user font control +%and use \@@par rather than \par +\def\@sect#1#2#3#4#5#6[#7]#8{% + \ifnum #2>\c@secnumdepth + \let\@svsec\@empty + \else + \refstepcounter{#1}% + % load section label and spacer into \@svsec + \protected@edef\@svsec{\@seccntformat{#1}\relax}% + \fi% + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@% tempskipa determines whether is treated as a high + \begingroup #6{\relax% or low level heading + \noindent % subsections are NOT indented + % print top level headings. \@svsec is label, #8 is heading title + % The IEEE does not block indent the section title text, it flows like normal + {\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\@@par}}% + \endgroup + \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else + \protect\numberline{\csname the#1\endcsname}\fi#7}% + \else % printout low level headings + % svsechd seems to swallow the trailing space, protect it with \mbox{} + % got rid of sectionmark stuff + \def\@svsechd{#6{\hskip #3\relax\@svsec #8\@IEEEsectpunct\mbox{}}% + \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else + \protect\numberline{\csname the#1\endcsname}\fi#7}}% + \fi%skip down + \@xsect{#5}} + + +% section* handler +%v1.7 put {} after #4 to allow for some types of user font control +%and use \@@par rather than \par +\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax + \ifdim \@tempskipa>\z@ + %\begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup + % The IEEE does not block indent the section title text, it flows like normal + \begingroup \noindent #4{\relax{\hskip #1}{\interlinepenalty \@M #5\@@par}}\endgroup + % svsechd swallows the trailing space, protect it with \mbox{} + \else \def\@svsechd{#4{\hskip #1\relax #5\@IEEEsectpunct\mbox{}}}\fi + \@xsect{#3}} + + +%% SECTION heading spacing and font +%% +% arguments are: #1 - sectiontype name +% (for \@sect) #2 - section level +% #3 - section heading indent +% #4 - top separation (absolute value used, neg indicates not to indent main text) +% If negative, make stretch parts negative too! +% #5 - (absolute value used) positive: bottom separation after heading, +% negative: amount to indent main text after heading +% Both #4 and #5 negative means to indent main text and use negative top separation +% #6 - font control +% You've got to have \normalfont\normalsize in the font specs below to prevent +% trouble when you do something like: +% \section{Note}{\ttfamily TT-TEXT} is known to ... +% The IEEE sometimes REALLY stretches the area before a section +% heading by up to about 0.5in. However, it may not be a good +% idea to let LaTeX have quite this much rubber. +\ifCLASSOPTIONconference% +% The IEEE wants section heading spacing to decrease for conference mode +\def\section{\@startsection{section}{1}{\z@}{1.5ex plus 1.5ex minus 0.5ex}% +{0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{1.5ex plus 1.5ex minus 0.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\else % for journals +\def\section{\@startsection{section}{1}{\z@}{3.0ex plus 1.5ex minus 1.5ex}% V1.6 3.0ex from 3.5ex +{0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{3.5ex plus 1.5ex minus 1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\fi + +% for both journals and conferences +% decided to put in a little rubber above the section, might help somebody +\def\subsubsection{\@startsection{subsubsection}{3}{\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize\itshape}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize\itshape}}% + + +% compsoc +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference +% compsoc conference +\def\section{\@startsection{section}{1}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\large\bfseries}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\sublargesize\bfseries}}% +\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{0ex}{\normalfont\normalsize\bfseries}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize}}% +\else% compsoc journals +% use negative top separation as compsoc journals do not indent paragraphs after section titles +\def\section{\@startsection{section}{1}{\z@}{-3.5ex plus -2ex minus -1.5ex}% +{0.7ex plus 1ex minus 0ex}{\normalfont\sublargesize\sffamily\bfseries\scshape}}% +% Note that subsection and smaller may not be correct for the Computer Society, +% I have to look up an example. +\def\subsection{\@startsection{subsection}{2}{\z@}{-3.5ex plus -1.5ex minus -1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\sffamily\bfseries}}% +\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex plus -1ex minus -1ex}% +{0.5ex plus 0.5ex minus 0ex}{\normalfont\normalsize\sffamily\itshape}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{-0ex plus -0.1ex minus -0.1ex}% +{0ex}{\normalfont\normalsize}}% +\fi\fi + +% transmag +\ifCLASSOPTIONtransmag +\def\subsection{\@startsection{subsection}{2}{0.75\parindent}{3.5ex plus 1.5ex minus 1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\def\subsubsection{\@startsection{subsubsection}{3}{1.25\parindent}{0.1ex plus 0.1ex minus 0.1ex}% +{0.1ex}{\normalfont\normalsize\itshape}}% +\fi + + +% V1.8a provide for a raised line Introduction section for use with Computer +% Society papers. We have to remove any spacing glue after the section +% heading and then remove the blank line for the new paragraph after it. +% LaTeX's section handler alters \everypar and we need to propogate those +% changes outside of the \parbox lest there be spacing problems at the top +% of the next section. +\def\IEEEraisesectionheading#1{\noindent\raisebox{1.5\baselineskip}[0pt][0pt]{\parbox[b]{\columnwidth}{#1\unskip\global\everypar=\everypar}}\vspace{-1\baselineskip}\vspace{-\parskip}\par} + + + +%% ENVIRONMENTS +% "box" symbols at end of proofs +\def\IEEEQEDclosed{\mbox{\rule[0pt]{1.3ex}{1.3ex}}} % for a filled box +% V1.6 some journals use an open box instead that will just fit around a closed one +\def\IEEEQEDopen{{\setlength{\fboxsep}{0pt}\setlength{\fboxrule}{0.2pt}\fbox{\rule[0pt]{0pt}{1.3ex}\rule[0pt]{1.3ex}{0pt}}}} +\ifCLASSOPTIONcompsoc +\def\IEEEQED{\IEEEQEDopen} % default to open for compsoc +\else +\def\IEEEQED{\IEEEQEDclosed} % otherwise default to closed +\fi + +%V1.8 flag to indicate if QED symbol is to be shown +\newif\if@IEEEQEDshow \@IEEEQEDshowtrue +\def\IEEEproofindentspace{2\parindent}% V1.8 allow user to change indentation amount if desired +% v1.7 name change to avoid namespace collision with amsthm. Also add support +% for an optional argument. +\def\IEEEproof{\@ifnextchar[{\@IEEEproof}{\@IEEEproof[\IEEEproofname]}} +\def\@IEEEproof[#1]{\@IEEEQEDshowtrue\par\noindent\hspace{\IEEEproofindentspace}{\itshape #1: }} +\def\endIEEEproof{\if@IEEEQEDshow\hspace*{\fill}\nobreakspace\IEEEQED\fi\par} +% qedhere for equation environments, similar to AMS \qedhere +\def\IEEEQEDhereeqn{\global\@IEEEQEDshowfalse\eqno\let\eqno\relax\let\leqno\relax + \let\veqno\relax\hbox{\IEEEQED}} +% IEEE style qedhere for IEEEeqnarray and other environments +\def\IEEEQEDhere{\global\@IEEEQEDshowfalse\IEEEQED} +% command to disable QED at end of IEEEproof +\def\IEEEQEDoff{\global\@IEEEQEDshowfalse} + + +%\itemindent is set to \z@ by list, so define new temporary variable +\newdimen\@IEEEtmpitemindent + +\ifCLASSOPTIONcompsoc +% V1.8a compsoc uses bold theorem titles, a period instead of a colon, vertical spacing, and hanging indentation +% V1.8 allow long theorem names to break across lines. +% Thanks to Miquel Payaro for reporting this. +\def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\relax + \topsep 0.2\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip + \rmfamily\trivlist\hangindent\parindent% + \item[]\textit{\bfseries\noindent #1\ #2.} \itemindent\@IEEEtmpitemindent\relax} +\def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\relax +\topsep 0.2\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip +\rmfamily\trivlist\hangindent\parindent% +% V1.6 The IEEE is back to using () around theorem names which are also in italics +% Thanks to Christian Peel for reporting this. + \item[]\textit{\bfseries\noindent #1\ #2\ (#3).} \itemindent\@IEEEtmpitemindent\relax} +% V1.7 remove bogus \unskip that caused equations in theorems to collide with +% lines below. +\def\@endtheorem{\endtrivlist\vskip 0.25\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip} +\else +% +% noncompsoc +% +% V1.8 allow long theorem names to break across lines. +% Thanks to Miquel Payaro for reporting this. +\def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\relax\topsep 0pt\rmfamily\trivlist% + \item[]\textit{\indent #1\ #2:} \itemindent\@IEEEtmpitemindent\relax} +\def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\relax\topsep 0pt\rmfamily \trivlist% +% V1.6 The IEEE is back to using () around theorem names which are also in italics +% Thanks to Christian Peel for reporting this. + \item[]\textit{\indent #1\ #2\ (#3):} \itemindent\@IEEEtmpitemindent\relax} +% V1.7 remove bogus \unskip that caused equations in theorems to collide with +% lines below. +\def\@endtheorem{\endtrivlist} +\fi + + + +% V1.6 +% display command for the section the theorem is in - so that \thesection +% is not used as this will be in Roman numerals when we want arabic. +% LaTeX2e uses \def\@thmcounter#1{\noexpand\arabic{#1}} for the theorem number +% (second part) display and \def\@thmcountersep{.} as a separator. +% V1.7 intercept calls to the section counter and reroute to \@IEEEthmcounterinsection +% to allow \appendix(ices} to override as needed. +% +% special handler for sections, allows appendix(ices) to override +\gdef\@IEEEthmcounterinsection#1{\arabic{#1}} +% string macro +\edef\@IEEEstringsection{section} + +% redefine the #1#2[#3] form of newtheorem to use a hook to \@IEEEthmcounterinsection +% if section in_counter is used +\def\@xnthm#1#2[#3]{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@newctr{#1}[#3]% + \edef\@IEEEstringtmp{#3} + \ifx\@IEEEstringtmp\@IEEEstringsection + \expandafter\xdef\csname the#1\endcsname{% + \noexpand\@IEEEthmcounterinsection{#3}\@thmcountersep + \@thmcounter{#1}}% + \else + \expandafter\xdef\csname the#1\endcsname{% + \expandafter\noexpand\csname the#3\endcsname \@thmcountersep + \@thmcounter{#1}}% + \fi + \global\@namedef{#1}{\@thm{#1}{#2}}% + \global\@namedef{end#1}{\@endtheorem}}} + + + +%% SET UP THE DEFAULT PAGESTYLE +\pagestyle{headings} +\pagenumbering{arabic} + +% normally the page counter starts at 1 +\setcounter{page}{1} +% however, for peerreview the cover sheet is page 0 or page -1 +% (for duplex printing) +\ifCLASSOPTIONpeerreview + \if@twoside + \setcounter{page}{-1} + \else + \setcounter{page}{0} + \fi +\fi + +% standard book class behavior - let bottom line float up and down as +% needed when single sided +\ifCLASSOPTIONtwoside\else\raggedbottom\fi +% if two column - turn on twocolumn, allow word spacings to stretch more and +% enforce a rigid position for the last lines +\ifCLASSOPTIONtwocolumn +% the peer review option delays invoking twocolumn + \ifCLASSOPTIONpeerreview\else + \twocolumn + \fi +\sloppy +\flushbottom +\fi + + + + +% \APPENDIX and \APPENDICES definitions + +% This is the \@ifmtarg command from the LaTeX ifmtarg package +% by Peter Wilson (CUA) and Donald Arseneau +% \@ifmtarg is used to determine if an argument to a command +% is present or not. +% For instance: +% \@ifmtarg{#1}{\typeout{empty}}{\typeout{has something}} +% \@ifmtarg is used with our redefined \section command if +% \appendices is invoked. +% The command \section will behave slightly differently depending +% on whether the user specifies a title: +% \section{My appendix title} +% or not: +% \section{} +% This way, we can eliminate the blank lines where the title +% would be, and the unneeded : after Appendix in the table of +% contents +\begingroup +\catcode`\Q=3 +\long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil} +\long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4} +\endgroup +% end of \@ifmtarg defs + + +% V1.7 +% command that allows the one time saving of the original definition +% of section to \@IEEEappendixsavesection for \appendix or \appendices +% we don't save \section here as it may be redefined later by other +% packages (hyperref.sty, etc.) +\def\@IEEEsaveoriginalsectiononce{\let\@IEEEappendixsavesection\section +\let\@IEEEsaveoriginalsectiononce\relax} + +% neat trick to grab and process the argument from \section{argument} +% we process differently if the user invoked \section{} with no +% argument (title) +% note we reroute the call to the old \section* +\def\@IEEEprocessthesectionargument#1{% +\@ifmtarg{#1}{% +\@IEEEappendixsavesection*{\appendixname\nobreakspace\thesectiondis}% +\addcontentsline{toc}{section}{\appendixname\nobreakspace\thesection}}{% +\@IEEEappendixsavesection*{\appendixname\nobreakspace\thesectiondis\\* #1}% +\addcontentsline{toc}{section}{\appendixname\nobreakspace\thesection: #1}}} + +% we use this if the user calls \section{} after +% \appendix-- which has no meaning. So, we ignore the +% command and its argument. Then, warn the user. +\def\@IEEEdestroythesectionargument#1{\typeout{** WARNING: Ignoring useless +\protect\section\space in Appendix (line \the\inputlineno).}} + + +% remember \thesection forms will be displayed in \ref calls +% and in the Table of Contents. +% The \sectiondis form is used in the actual heading itself + +% appendix command for one single appendix +% normally has no heading. However, if you want a +% heading, you can do so via the optional argument: +% \appendix[Optional Heading] +\def\appendix{\relax} +\renewcommand{\appendix}[1][]{\@IEEEsaveoriginalsectiononce\par + % v1.6 keep hyperref's identifiers unique + \gdef\theHsection{Appendix.A}% + % v1.6 adjust hyperref's string name for the section + \xdef\Hy@chapapp{appendix}% + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{subsubsection}{0}% + \setcounter{paragraph}{0}% + \gdef\thesection{A}% + \gdef\thesectiondis{}% + \gdef\thesubsection{\Alph{subsection}}% + \gdef\@IEEEthmcounterinsection##1{A} + \refstepcounter{section}% update the \ref counter + \@ifmtarg{#1}{\@IEEEappendixsavesection*{\appendixname}% + \addcontentsline{toc}{section}{\appendixname}}{% + \@IEEEappendixsavesection*{\appendixname\nobreakspace\\* #1}% + \addcontentsline{toc}{section}{\appendixname: #1}}% + % redefine \section command for appendix + % leave \section* as is + \def\section{\@ifstar{\@IEEEappendixsavesection*}{% + \@IEEEdestroythesectionargument}}% throw out the argument + % of the normal form +} + + + +% appendices command for multiple appendices +% user then calls \section with an argument (possibly empty) to +% declare the individual appendices +\def\appendices{\@IEEEsaveoriginalsectiononce\par + % v1.6 keep hyperref's identifiers unique + \gdef\theHsection{Appendix.\Alph{section}}% + % v1.6 adjust hyperref's string name for the section + \xdef\Hy@chapapp{appendix}% + \setcounter{section}{-1}% we want \refstepcounter to use section 0 + \setcounter{subsection}{0}% + \setcounter{subsubsection}{0}% + \setcounter{paragraph}{0}% + \ifCLASSOPTIONromanappendices% + \gdef\thesection{\Roman{section}}% + \gdef\thesectiondis{\Roman{section}}% + \@IEEEcompsocconfonly{\gdef\thesectiondis{\Roman{section}.}}% + \gdef\@IEEEthmcounterinsection##1{A\arabic{##1}} + \else% + \gdef\thesection{\Alph{section}}% + \gdef\thesectiondis{\Alph{section}}% + \@IEEEcompsocconfonly{\gdef\thesectiondis{\Alph{section}.}}% + \gdef\@IEEEthmcounterinsection##1{\Alph{##1}} + \fi% + \refstepcounter{section}% update the \ref counter + \setcounter{section}{0}% NEXT \section will be the FIRST appendix + % redefine \section command for appendices + % leave \section* as is + \def\section{\@ifstar{\@IEEEappendixsavesection*}{% process the *-form + \refstepcounter{section}% or is a new section so, + \@IEEEprocessthesectionargument}}% process the argument + % of the normal form +} + + + +% V1.7 compoc uses nonbold drop cap and small caps word style +\ifCLASSOPTIONcompsoc + \def\IEEEPARstartFONTSTYLE{\mdseries} + \def\IEEEPARstartWORDFONTSTYLE{\scshape} + \def\IEEEPARstartWORDCAPSTYLE{\relax} +\fi +% +% +% \IEEEPARstart +% Definition for the big two line drop cap letter at the beginning of the +% first paragraph of journal papers. The first argument is the first letter +% of the first word, the second argument is the remaining letters of the +% first word which will be rendered in upper case. +% In V1.6 this has been completely rewritten to: +% +% 1. no longer have problems when the user begins an environment +% within the paragraph that uses \IEEEPARstart. +% 2. auto-detect and use the current font family +% 3. revise handling of the space at the end of the first word so that +% interword glue will now work as normal. +% 4. produce correctly aligned edges for the (two) indented lines. +% +% We generalize things via control macros - playing with these is fun too. +% +% V1.7 added more control macros to make it easy for IEEEtrantools.sty users +% to change the font style. +% +% the number of lines that are indented to clear it +% may need to increase if using decenders +\providecommand{\IEEEPARstartDROPLINES}{2} +% minimum number of lines left on a page to allow a \@IEEEPARstart +% Does not take into consideration rubber shrink, so it tends to +% be overly cautious +\providecommand{\IEEEPARstartMINPAGELINES}{2} +% V1.7 the height of the drop cap is adjusted to match the height of this text +% in the current font (when \IEEEPARstart is called). +\providecommand{\IEEEPARstartHEIGHTTEXT}{T} +% the depth the letter is lowered below the baseline +% the height (and size) of the letter is determined by the sum +% of this value and the height of the \IEEEPARstartHEIGHTTEXT in the current +% font. It is a good idea to set this value in terms of the baselineskip +% so that it can respond to changes therein. +\providecommand{\IEEEPARstartDROPDEPTH}{1.1\baselineskip} +% V1.7 the font the drop cap will be rendered in, +% can take zero or one argument. +\providecommand{\IEEEPARstartFONTSTYLE}{\bfseries} +% V1.7 any additional, non-font related commands needed to modify +% the drop cap letter, can take zero or one argument. +\providecommand{\IEEEPARstartCAPSTYLE}{\MakeUppercase} +% V1.7 the font that will be used to render the rest of the word, +% can take zero or one argument. +\providecommand{\IEEEPARstartWORDFONTSTYLE}{\relax} +% V1.7 any additional, non-font related commands needed to modify +% the rest of the word, can take zero or one argument. +\providecommand{\IEEEPARstartWORDCAPSTYLE}{\MakeUppercase} +% This is the horizontal separation distance from the drop letter to the main text. +% Lengths that depend on the font (e.g., ex, em, etc.) will be referenced +% to the font that is active when \IEEEPARstart is called. +\providecommand{\IEEEPARstartSEP}{0.15em} +% V1.7 horizontal offset applied to the left of the drop cap. +\providecommand{\IEEEPARstartHOFFSET}{0em} +% V1.7 Italic correction command applied at the end of the drop cap. +\providecommand{\IEEEPARstartITLCORRECT}{\/} + +% width of the letter output, set globally. Can be used in \IEEEPARstartSEP +% or \IEEEPARstartHOFFSET, but not the height lengths. +\newdimen\IEEEPARstartletwidth +\IEEEPARstartletwidth 0pt\relax + +% definition of \IEEEPARstart +% THIS IS A CONTROLLED SPACING AREA, DO NOT ALLOW SPACES WITHIN THESE LINES +% +% The token \@IEEEPARstartfont will be globally defined after the first use +% of \IEEEPARstart and will be a font command which creates the big letter +% The first argument is the first letter of the first word and the second +% argument is the rest of the first word(s). +\def\IEEEPARstart#1#2{\par{% +% if this page does not have enough space, break it and lets start +% on a new one +\@IEEEtranneedspace{\IEEEPARstartMINPAGELINES\baselineskip}{\relax}% +% V1.7 move this up here in case user uses \textbf for \IEEEPARstartFONTSTYLE +% which uses command \leavevmode which causes an unwanted \indent to be issued +\noindent +% calculate the desired height of the big letter +% it extends from the top of \IEEEPARstartHEIGHTTEXT in the current font +% down to \IEEEPARstartDROPDEPTH below the current baseline +\settoheight{\@IEEEtrantmpdimenA}{\IEEEPARstartHEIGHTTEXT}% +\addtolength{\@IEEEtrantmpdimenA}{\IEEEPARstartDROPDEPTH}% +% extract the name of the current font in bold +% and place it in \@IEEEPARstartFONTNAME +\def\@IEEEPARstartGETFIRSTWORD##1 ##2\relax{##1}% +{\IEEEPARstartFONTSTYLE{\selectfont\edef\@IEEEPARstartFONTNAMESPACE{\fontname\font\space}% +\xdef\@IEEEPARstartFONTNAME{\expandafter\@IEEEPARstartGETFIRSTWORD\@IEEEPARstartFONTNAMESPACE\relax}}}% +% define a font based on this name with a point size equal to the desired +% height of the drop letter +\font\@IEEEPARstartsubfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenA\relax% +% save this value as a counter (integer) value (sp points) +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenA% +% now get the height of the actual letter produced by this font size +\settoheight{\@IEEEtrantmpdimenB}{\@IEEEPARstartsubfont\IEEEPARstartCAPSTYLE{#1}}% +% If something bogus happens like the first argument is empty or the +% current font is strange, do not allow a zero height. +\ifdim\@IEEEtrantmpdimenB=0pt\relax% +\typeout{** WARNING: IEEEPARstart drop letter has zero height! (line \the\inputlineno)}% +\typeout{ Forcing the drop letter font size to 10pt.}% +\@IEEEtrantmpdimenB=10pt% +\fi% +% and store it as a counter +\@IEEEtrantmpcountB=\@IEEEtrantmpdimenB% +% Since a font size doesn't exactly correspond to the height of the capital +% letters in that font, the actual height of the letter, \@IEEEtrantmpcountB, +% will be less than that desired, \@IEEEtrantmpcountA +% we need to raise the font size, \@IEEEtrantmpdimenA +% by \@IEEEtrantmpcountA / \@IEEEtrantmpcountB +% But, TeX doesn't have floating point division, so we have to use integer +% division. Hence the use of the counters. +% We need to reduce the denominator so that the loss of the remainder will +% have minimal affect on the accuracy of the result +\divide\@IEEEtrantmpcountB by 200% +\divide\@IEEEtrantmpcountA by \@IEEEtrantmpcountB% +% Then reequalize things when we use TeX's ability to multiply by +% floating point values +\@IEEEtrantmpdimenB=0.005\@IEEEtrantmpdimenA% +\multiply\@IEEEtrantmpdimenB by \@IEEEtrantmpcountA% +% \@IEEEPARstartfont is globaly set to the calculated font of the big letter +% We need to carry this out of the local calculation area to to create the +% big letter. +\global\font\@IEEEPARstartfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenB% +% Now set \@IEEEtrantmpdimenA to the width of the big letter +% We need to carry this out of the local calculation area to set the +% hanging indent +\settowidth{\global\@IEEEtrantmpdimenA}{\@IEEEPARstartfont +\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}}}% +% end of the isolated calculation environment +\global\IEEEPARstartletwidth\@IEEEtrantmpdimenA\relax% +% add in the extra clearance we want +\advance\@IEEEtrantmpdimenA by \IEEEPARstartSEP\relax% +% add in the optional offset +\advance\@IEEEtrantmpdimenA by \IEEEPARstartHOFFSET\relax% +% V1.7 don't allow negative offsets to produce negative hanging indents +\@IEEEtrantmpdimenB\@IEEEtrantmpdimenA +\ifnum\@IEEEtrantmpdimenB < 0 \@IEEEtrantmpdimenB 0pt\fi +% \@IEEEtrantmpdimenA has the width of the big letter plus the +% separation space and \@IEEEPARstartfont is the font we need to use +% Now, we make the letter and issue the hanging indent command +% The letter is placed in a box of zero width and height so that other +% text won't be displaced by it. +\hangindent\@IEEEtrantmpdimenB\hangafter=-\IEEEPARstartDROPLINES% +\makebox[0pt][l]{\hspace{-\@IEEEtrantmpdimenA}% +\raisebox{-\IEEEPARstartDROPDEPTH}[0pt][0pt]{\hspace{\IEEEPARstartHOFFSET}% +\@IEEEPARstartfont\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}% +\hspace{\IEEEPARstartSEP}}}% +{\IEEEPARstartWORDFONTSTYLE{\IEEEPARstartWORDCAPSTYLE{\selectfont#2}}}} + + + + +% determines if the space remaining on a given page is equal to or greater +% than the specified space of argument one +% if not, execute argument two (only if the remaining space is greater than zero) +% and issue a \newpage +% +% example: \@IEEEtranneedspace{2in}{\vfill} +% +% Does not take into consideration rubber shrinkage, so it tends to +% be overly cautious +% Based on an example posted by Donald Arseneau +% Note this macro uses \@IEEEtrantmpdimenB internally for calculations, +% so DO NOT PASS \@IEEEtrantmpdimenB to this routine +% if you need a dimen register, import with \@IEEEtrantmpdimenA instead +\def\@IEEEtranneedspace#1#2{\penalty-100\begingroup%shield temp variable +\@IEEEtrantmpdimenB\pagegoal\advance\@IEEEtrantmpdimenB-\pagetotal% space left +\ifdim #1>\@IEEEtrantmpdimenB\relax% not enough space left +\ifdim\@IEEEtrantmpdimenB>\z@\relax #2\fi% +\newpage% +\fi\endgroup} + + + +% IEEEbiography ENVIRONMENT +% Allows user to enter biography leaving place for picture (adapts to font size) +% As of V1.5, a new optional argument allows you to have a real graphic! +% V1.5 and later also fixes the "colliding biographies" which could happen when a +% biography's text was shorter than the space for the photo. +% MDS 7/2001 +% V1.6 prevent multiple biographies from making multiple TOC entries +\newif\if@IEEEbiographyTOCentrynotmade +\global\@IEEEbiographyTOCentrynotmadetrue + +% biography counter so hyperref can jump directly to the biographies +% and not just the previous section +\newcounter{IEEEbiography} +\setcounter{IEEEbiography}{0} + +% photo area size +\def\@IEEEBIOphotowidth{1.0in} % width of the biography photo area +\def\@IEEEBIOphotodepth{1.25in} % depth (height) of the biography photo area +% area cleared for photo +\def\@IEEEBIOhangwidth{1.14in} % width cleared for the biography photo area +\def\@IEEEBIOhangdepth{1.25in} % depth cleared for the biography photo area + % actual depth will be a multiple of + % \baselineskip, rounded up +\def\@IEEEBIOskipN{4\baselineskip}% nominal value of the vskip above the biography + +\newenvironment{IEEEbiography}[2][]{\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize% +\unitlength 1in\parskip=0pt\par\parindent 1em\interlinepenalty500% +% we need enough space to support the hanging indent +% the nominal value of the spacer +% and one extra line for good measure +\@IEEEtrantmpdimenA=\@IEEEBIOhangdepth% +\advance\@IEEEtrantmpdimenA by \@IEEEBIOskipN% +\advance\@IEEEtrantmpdimenA by 1\baselineskip% +% if this page does not have enough space, break it and lets start +% with a new one +\@IEEEtranneedspace{\@IEEEtrantmpdimenA}{\relax}% +% nominal spacer can strech, not shrink use 1fil so user can out stretch with \vfill +\vskip \@IEEEBIOskipN plus 1fil minus 0\baselineskip% +% the default box for where the photo goes +\def\@IEEEtempbiographybox{{\setlength{\fboxsep}{0pt}\framebox{% +\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}\centering PLACE\\ PHOTO\\ HERE \end{minipage}}}}% +% +% detect if the optional argument was supplied, this requires the +% \@ifmtarg command as defined in the appendix section above +% and if so, override the default box with what they want +\@ifmtarg{#1}{\relax}{\def\@IEEEtempbiographybox{\mbox{\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}% +\centering% +#1% +\end{minipage}}}}% end if optional argument supplied +% Make an entry into the table of contents only if we have not done so before +\if@IEEEbiographyTOCentrynotmade% +% link labels to the biography counter so hyperref will jump +% to the biography, not the previous section +\setcounter{IEEEbiography}{-1}% +\refstepcounter{IEEEbiography}% +\addcontentsline{toc}{section}{Biographies}% +\global\@IEEEbiographyTOCentrynotmadefalse% +\fi% +% one more biography +\refstepcounter{IEEEbiography}% +% Make an entry for this name into the table of contents +\addcontentsline{toc}{subsection}{#2}% +% V1.6 properly handle if a new paragraph should occur while the +% hanging indent is still active. Do this by redefining \par so +% that it will not start a new paragraph. (But it will appear to the +% user as if it did.) Also, strip any leading pars, newlines, or spaces. +\let\@IEEEBIOORGparCMD=\par% save the original \par command +\edef\par{\hfil\break\indent}% the new \par will not be a "real" \par +\settoheight{\@IEEEtrantmpdimenA}{\@IEEEtempbiographybox}% get height of biography box +\@IEEEtrantmpdimenB=\@IEEEBIOhangdepth% +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenB% countA has the hang depth +\divide\@IEEEtrantmpcountA by \baselineskip% calculates lines needed to produce the hang depth +\advance\@IEEEtrantmpcountA by 1% ensure we overestimate +% set the hanging indent +\hangindent\@IEEEBIOhangwidth% +\hangafter-\@IEEEtrantmpcountA% +% reference the top of the photo area to the top of a capital T +\settoheight{\@IEEEtrantmpdimenB}{\mbox{T}}% +% set the photo box, give it zero width and height so as not to disturb anything +\noindent\makebox[0pt][l]{\hspace{-\@IEEEBIOhangwidth}\raisebox{\@IEEEtrantmpdimenB}[0pt][0pt]{% +\raisebox{-\@IEEEBIOphotodepth}[0pt][0pt]{\@IEEEtempbiographybox}}}% +% now place the author name and begin the bio text +\noindent\textbf{#2\ }\@IEEEgobbleleadPARNLSP}{\relax\let\par=\@IEEEBIOORGparCMD\par% +% 7/2001 V1.5 detect when the biography text is shorter than the photo area +% and pad the unused area - preventing a collision from the next biography entry +% MDS +\ifnum \prevgraf <\@IEEEtrantmpcountA\relax% detect when the biography text is shorter than the photo + \advance\@IEEEtrantmpcountA by -\prevgraf% calculate how many lines we need to pad + \advance\@IEEEtrantmpcountA by -1\relax% we compensate for the fact that we indented an extra line + \@IEEEtrantmpdimenA=\baselineskip% calculate the length of the padding + \multiply\@IEEEtrantmpdimenA by \@IEEEtrantmpcountA% + \noindent\rule{0pt}{\@IEEEtrantmpdimenA}% insert an invisible support strut +\fi% +\par\normalfont} + + + +% V1.6 +% added biography without a photo environment +\newenvironment{IEEEbiographynophoto}[1]{% +% Make an entry into the table of contents only if we have not done so before +\if@IEEEbiographyTOCentrynotmade% +% link labels to the biography counter so hyperref will jump +% to the biography, not the previous section +\setcounter{IEEEbiography}{-1}% +\refstepcounter{IEEEbiography}% +\addcontentsline{toc}{section}{Biographies}% +\global\@IEEEbiographyTOCentrynotmadefalse% +\fi% +% one more biography +\refstepcounter{IEEEbiography}% +% Make an entry for this name into the table of contents +\addcontentsline{toc}{subsection}{#1}% +\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize\interlinepenalty500% +\vskip 4\baselineskip plus 1fil minus 0\baselineskip% +\parskip=0pt\par% +\noindent\textbf{#1\ }\@IEEEgobbleleadPARNLSP}{\relax\par\normalfont} + + +% provide the user with some old font commands +% got this from article.cls +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} +\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} + + +% SPECIAL PAPER NOTICE COMMANDS +% +% holds the special notice text +\def\@IEEEspecialpapernotice{\relax} + +% for special papers, like invited papers, the user can do: +% \IEEEspecialpapernotice{(Invited Paper)} before \maketitle +\def\IEEEspecialpapernotice#1{\ifCLASSOPTIONconference% +\def\@IEEEspecialpapernotice{{\sublargesize\textit{#1}\vspace*{1em}}}% +\else% +\def\@IEEEspecialpapernotice{{\\*[1.5ex]\sublargesize\textit{#1}}\vspace*{-2ex}}% +\fi} + + + + +% PUBLISHER ID COMMANDS +% to insert a publisher's ID footer +% V1.6 \IEEEpubid has been changed so that the change in page size and style +% occurs in \maketitle. \IEEEpubid must now be issued prior to \maketitle +% use \IEEEpubidadjcol as before - in the second column of the title page +% These changes allow \maketitle to take the reduced page height into +% consideration when dynamically setting the space between the author +% names and the maintext. +% +% the amount the main text is pulled up to make room for the +% publisher's ID footer +% The IEEE uses about 1.3\baselineskip for journals, +% dynamic title spacing will clean up the fraction +\def\@IEEEpubidpullup{1.3\baselineskip} +\ifCLASSOPTIONtechnote +% for technotes it must be an integer of baselineskip as there can be no +% dynamic title spacing for two column mode technotes (the title is in the +% in first column) and we should maintain an integer number of lines in the +% second column +% There are some examples (such as older issues of "Transactions on +% Information Theory") in which the IEEE really pulls the text off the ID for +% technotes - about 0.55in (or 4\baselineskip). We'll use 2\baselineskip +% and call it even. +\def\@IEEEpubidpullup{2\baselineskip} +\fi + +% V1.7 compsoc does not use a pullup +\ifCLASSOPTIONcompsoc +\def\@IEEEpubidpullup{0pt} +\fi + +% holds the ID text +\def\@IEEEpubid{\relax} + +% flag so \maketitle can tell if \IEEEpubid was called +\newif\if@IEEEusingpubid +\global\@IEEEusingpubidfalse +% issue this command in the page to have the ID at the bottom +% V1.6 use before \maketitle +\def\IEEEpubid#1{\def\@IEEEpubid{#1}\global\@IEEEusingpubidtrue} + + +% command which will pull up (shorten) the column it is executed in +% to make room for the publisher ID. Place in the second column of +% the title page when using \IEEEpubid +% Is smart enough not to do anything when in single column text or +% if the user hasn't called \IEEEpubid +% currently needed in for the second column of a page with the +% publisher ID. If not needed in future releases, please provide this +% command and define it as \relax for backward compatibility +% v1.6b do not allow command to operate if the peer review option has been +% selected because \IEEEpubidadjcol will not be on the cover page. +% V1.7 do nothing if compsoc +\def\IEEEpubidadjcol{\ifCLASSOPTIONcompsoc\else\ifCLASSOPTIONpeerreview\else +\if@twocolumn\if@IEEEusingpubid\enlargethispage{-\@IEEEpubidpullup}\fi\fi\fi\fi} + +% Special thanks to Peter Wilson, Daniel Luecking, and the other +% gurus at comp.text.tex, for helping me to understand how best to +% implement the IEEEpubid command in LaTeX. + + + +%% Lockout some commands under various conditions + +% general purpose bit bucket +\newsavebox{\@IEEEtranrubishbin} + +% flags to prevent multiple warning messages +\newif\if@IEEEWARNthanks +\newif\if@IEEEWARNIEEEPARstart +\newif\if@IEEEWARNIEEEbiography +\newif\if@IEEEWARNIEEEbiographynophoto +\newif\if@IEEEWARNIEEEpubid +\newif\if@IEEEWARNIEEEpubidadjcol +\newif\if@IEEEWARNIEEEmembership +\newif\if@IEEEWARNIEEEaftertitletext +\@IEEEWARNthankstrue +\@IEEEWARNIEEEPARstarttrue +\@IEEEWARNIEEEbiographytrue +\@IEEEWARNIEEEbiographynophototrue +\@IEEEWARNIEEEpubidtrue +\@IEEEWARNIEEEpubidadjcoltrue +\@IEEEWARNIEEEmembershiptrue +\@IEEEWARNIEEEaftertitletexttrue + + +%% Lockout some commands when in various modes, but allow them to be restored if needed +%% +% save commands which might be locked out +% so that the user can later restore them if needed +\let\@IEEESAVECMDthanks\thanks +\let\@IEEESAVECMDIEEEPARstart\IEEEPARstart +\let\@IEEESAVECMDIEEEbiography\IEEEbiography +\let\@IEEESAVECMDendIEEEbiography\endIEEEbiography +\let\@IEEESAVECMDIEEEbiographynophoto\IEEEbiographynophoto +\let\@IEEESAVECMDendIEEEbiographynophoto\endIEEEbiographynophoto +\let\@IEEESAVECMDIEEEpubid\IEEEpubid +\let\@IEEESAVECMDIEEEpubidadjcol\IEEEpubidadjcol +\let\@IEEESAVECMDIEEEmembership\IEEEmembership +\let\@IEEESAVECMDIEEEaftertitletext\IEEEaftertitletext + + +% disable \IEEEPARstart when in draft mode +% This may have originally been done because the pre-V1.6 drop letter +% algorithm had problems with a non-unity baselinestretch +% At any rate, it seems too formal to have a drop letter in a draft +% paper. +\ifCLASSOPTIONdraftcls +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** ATTENTION: \noexpand\IEEEPARstart + is disabled in draft mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} +\fi +% and for technotes +\ifCLASSOPTIONtechnote +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart + is locked out for technotes (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} +\fi + + +% lockout unneeded commands when in conference mode +\ifCLASSOPTIONconference +% when locked out, \thanks, \IEEEbiography, \IEEEbiographynophoto, \IEEEpubid, +% \IEEEmembership and \IEEEaftertitletext will all swallow their given text. +% \IEEEPARstart will output a normal character instead +% warn the user about these commands only once to prevent the console screen +% from filling up with redundant messages +\def\thanks#1{\if@IEEEWARNthanks\typeout{** WARNING: \noexpand\thanks + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNthanksfalse} +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} + + +% LaTeX treats environments and commands with optional arguments differently. +% the actual ("internal") command is stored as \\commandname +% (accessed via \csname\string\commandname\endcsname ) +% the "external" command \commandname is a macro with code to determine +% whether or not the optional argument is presented and to provide the +% default if it is absent. So, in order to save and restore such a command +% we would have to save and restore \\commandname as well. But, if LaTeX +% ever changes the way it names the internal names, the trick would break. +% Instead let us just define a new environment so that the internal +% name can be left undisturbed. +\newenvironment{@IEEEbogusbiography}[2][]{\if@IEEEWARNIEEEbiography\typeout{** WARNING: \noexpand\IEEEbiography + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographyfalse% +\setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax} +% and make biography point to our bogus biography +\let\IEEEbiography=\@IEEEbogusbiography +\let\endIEEEbiography=\end@IEEEbogusbiography + +\renewenvironment{IEEEbiographynophoto}[1]{\if@IEEEWARNIEEEbiographynophoto\typeout{** WARNING: \noexpand\IEEEbiographynophoto + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographynophotofalse% +\setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax} + +\def\IEEEpubid#1{\if@IEEEWARNIEEEpubid\typeout{** WARNING: \noexpand\IEEEpubid + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidfalse} +\def\IEEEpubidadjcol{\if@IEEEWARNIEEEpubidadjcol\typeout{** WARNING: \noexpand\IEEEpubidadjcol + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidadjcolfalse} +\def\IEEEmembership#1{\if@IEEEWARNIEEEmembership\typeout{** WARNING: \noexpand\IEEEmembership + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEmembershipfalse} +\def\IEEEaftertitletext#1{\if@IEEEWARNIEEEaftertitletext\typeout{** WARNING: \noexpand\IEEEaftertitletext + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEaftertitletextfalse} +\fi + + +% provide a way to restore the commands that are locked out +\def\IEEEoverridecommandlockouts{% +\typeout{** ATTENTION: Overriding command lockouts (line \the\inputlineno).}% +\let\thanks\@IEEESAVECMDthanks% +\let\IEEEPARstart\@IEEESAVECMDIEEEPARstart% +\let\IEEEbiography\@IEEESAVECMDIEEEbiography% +\let\endIEEEbiography\@IEEESAVECMDendIEEEbiography% +\let\IEEEbiographynophoto\@IEEESAVECMDIEEEbiographynophoto% +\let\endIEEEbiographynophoto\@IEEESAVECMDendIEEEbiographynophoto% +\let\IEEEpubid\@IEEESAVECMDIEEEpubid% +\let\IEEEpubidadjcol\@IEEESAVECMDIEEEpubidadjcol% +\let\IEEEmembership\@IEEESAVECMDIEEEmembership% +\let\IEEEaftertitletext\@IEEESAVECMDIEEEaftertitletext} + + + +% need a backslash character for typeout output +{\catcode`\|=0 \catcode`\\=12 +|xdef|@IEEEbackslash{\}} + + +% hook to allow easy disabling of all legacy warnings +\def\@IEEElegacywarn#1#2{\typeout{** ATTENTION: \@IEEEbackslash #1 is deprecated (line \the\inputlineno). +Use \@IEEEbackslash #2 instead.}} + + +% provide some legacy IEEEtran commands +\def\IEEEcompsoctitleabstractindextext{\@IEEElegacywarn{IEEEcompsoctitleabstractindextext}{IEEEtitleabstractindextext}\IEEEtitleabstractindextext} +\def\IEEEdisplaynotcompsoctitleabstractindextext{\@IEEElegacywarn{IEEEdisplaynotcompsoctitleabstractindextext}{IEEEdisplaynontitleabstractindextext}\IEEEdisplaynontitleabstractindextext} +% provide some legacy IEEEtran environments + + +% V1.8a no more support for these legacy commands +%\def\authorblockA{\@IEEElegacywarn{authorblockA}{IEEEauthorblockA}\IEEEauthorblockA} +%\def\authorblockN{\@IEEElegacywarn{authorblockN}{IEEEauthorblockN}\IEEEauthorblockN} +%\def\authorrefmark{\@IEEElegacywarn{authorrefmark}{IEEEauthorrefmark}\IEEEauthorrefmark} +%\def\PARstart{\@IEEElegacywarn{PARstart}{IEEEPARstart}\IEEEPARstart} +%\def\pubid{\@IEEElegacywarn{pubid}{IEEEpubid}\IEEEpubid} +%\def\pubidadjcol{\@IEEElegacywarn{pubidadjcol}{IEEEpubidadjcol}\IEEEpubidadjcol} +%\def\specialpapernotice{\@IEEElegacywarn{specialpapernotice}{IEEEspecialpapernotice}\IEEEspecialpapernotice} +% and environments +%\def\keywords{\@IEEElegacywarn{keywords}{IEEEkeywords}\IEEEkeywords} +%\def\endkeywords{\endIEEEkeywords} +% V1.8 no more support for legacy IED list commands +%\let\labelindent\IEEElabelindent +%\def\calcleftmargin{\@IEEElegacywarn{calcleftmargin}{IEEEcalcleftmargin}\IEEEcalcleftmargin} +%\def\setlabelwidth{\@IEEElegacywarn{setlabelwidth}{IEEEsetlabelwidth}\IEEEsetlabelwidth} +%\def\usemathlabelsep{\@IEEElegacywarn{usemathlabelsep}{IEEEusemathlabelsep}\IEEEusemathlabelsep} +%\def\iedlabeljustifyc{\@IEEElegacywarn{iedlabeljustifyc}{IEEEiedlabeljustifyc}\IEEEiedlabeljustifyc} +%\def\iedlabeljustifyl{\@IEEElegacywarn{iedlabeljustifyl}{IEEEiedlabeljustifyl}\IEEEiedlabeljustifyl} +%\def\iedlabeljustifyr{\@IEEElegacywarn{iedlabeljustifyr}{IEEEiedlabeljustifyr}\IEEEiedlabeljustifyr} +% V1.8 no more support for QED and proof stuff +%\def\QED{\@IEEElegacywarn{QED}{IEEEQED}\IEEEQED} +%\def\QEDclosed{\@IEEElegacywarn{QEDclosed}{IEEEQEDclosed}\IEEEQEDclosed} +%\def\QEDopen{\@IEEElegacywarn{QEDopen}{IEEEQEDopen}\IEEEQEDopen} +%\AtBeginDocument{\def\proof{\@IEEElegacywarn{proof}{IEEEproof}\IEEEproof}\def\endproof{\endIEEEproof}} +% V1.8 no longer support biography or biographynophoto +%\def\biography{\@IEEElegacywarn{biography}{IEEEbiography}\IEEEbiography} +%\def\biographynophoto{\@IEEElegacywarn{biographynophoto}{IEEEbiographynophoto}\IEEEbiographynophoto} +%\def\endbiography{\endIEEEbiography} +%\def\endbiographynophoto{\endIEEEbiographynophoto} +% V1.7 and later no longer supports \overrideIEEEmargins +%\def\overrideIEEEmargins{% +%\typeout{** WARNING: \string\overrideIEEEmargins \space no longer supported (line \the\inputlineno).}% +%\typeout{** Use the \string\CLASSINPUTinnersidemargin, \string\CLASSINPUToutersidemargin \space controls instead.}} + +\endinput + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of IEEEtran.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%% +% That's all folks! + diff --git a/synthetic/bck/template/Conference-LaTeX-template_10-17-19/IEEEtran_HOWTO.pdf b/synthetic/bck/template/Conference-LaTeX-template_10-17-19/IEEEtran_HOWTO.pdf new file mode 100644 index 0000000..c8e41da Binary files /dev/null and b/synthetic/bck/template/Conference-LaTeX-template_10-17-19/IEEEtran_HOWTO.pdf differ diff --git a/synthetic/bck/template/Conference-LaTeX-template_10-17-19/conference_101719.pdf b/synthetic/bck/template/Conference-LaTeX-template_10-17-19/conference_101719.pdf new file mode 100644 index 0000000..7bc7647 Binary files /dev/null and b/synthetic/bck/template/Conference-LaTeX-template_10-17-19/conference_101719.pdf differ diff --git a/synthetic/bck/template/Conference-LaTeX-template_10-17-19/conference_101719.tex b/synthetic/bck/template/Conference-LaTeX-template_10-17-19/conference_101719.tex new file mode 100644 index 0000000..09d7398 --- /dev/null +++ b/synthetic/bck/template/Conference-LaTeX-template_10-17-19/conference_101719.tex @@ -0,0 +1,288 @@ +\documentclass[conference]{IEEEtran} +\IEEEoverridecommandlockouts +% The preceding line is only needed to identify funding in the first footnote. If that is unneeded, please comment it out. +\usepackage{cite} +\usepackage{amsmath,amssymb,amsfonts} +\usepackage{algorithmic} +\usepackage{graphicx} +\usepackage{textcomp} +\usepackage{xcolor} +\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em + T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}} +\begin{document} + +\title{Conference Paper Title*\\ +{\footnotesize \textsuperscript{*}Note: Sub-titles are not captured in Xplore and +should not be used} +\thanks{Identify applicable funding agency here. If none, delete this.} +} + +\author{\IEEEauthorblockN{1\textsuperscript{st} Given Name Surname} +\IEEEauthorblockA{\textit{dept. name of organization (of Aff.)} \\ +\textit{name of organization (of Aff.)}\\ +City, Country \\ +email address or ORCID} +\and +\IEEEauthorblockN{2\textsuperscript{nd} Given Name Surname} +\IEEEauthorblockA{\textit{dept. name of organization (of Aff.)} \\ +\textit{name of organization (of Aff.)}\\ +City, Country \\ +email address or ORCID} +\and +\IEEEauthorblockN{3\textsuperscript{rd} Given Name Surname} +\IEEEauthorblockA{\textit{dept. name of organization (of Aff.)} \\ +\textit{name of organization (of Aff.)}\\ +City, Country \\ +email address or ORCID} +\and +\IEEEauthorblockN{4\textsuperscript{th} Given Name Surname} +\IEEEauthorblockA{\textit{dept. name of organization (of Aff.)} \\ +\textit{name of organization (of Aff.)}\\ +City, Country \\ +email address or ORCID} +\and +\IEEEauthorblockN{5\textsuperscript{th} Given Name Surname} +\IEEEauthorblockA{\textit{dept. name of organization (of Aff.)} \\ +\textit{name of organization (of Aff.)}\\ +City, Country \\ +email address or ORCID} +\and +\IEEEauthorblockN{6\textsuperscript{th} Given Name Surname} +\IEEEauthorblockA{\textit{dept. name of organization (of Aff.)} \\ +\textit{name of organization (of Aff.)}\\ +City, Country \\ +email address or ORCID} +} + +\maketitle + +\begin{abstract} +This document is a model and instructions for \LaTeX. +This and the IEEEtran.cls file define the components of your paper [title, text, heads, etc.]. *CRITICAL: Do Not Use Symbols, Special Characters, Footnotes, +or Math in Paper Title or Abstract. +\end{abstract} + +\begin{IEEEkeywords} +component, formatting, style, styling, insert +\end{IEEEkeywords} + +\section{Introduction} +This document is a model and instructions for \LaTeX. +Please observe the conference page limits. + +\section{Ease of Use} + +\subsection{Maintaining the Integrity of the Specifications} + +The IEEEtran class file is used to format your paper and style the text. All margins, +column widths, line spaces, and text fonts are prescribed; please do not +alter them. You may note peculiarities. For example, the head margin +measures proportionately more than is customary. This measurement +and others are deliberate, using specifications that anticipate your paper +as one part of the entire proceedings, and not as an independent document. +Please do not revise any of the current designations. + +\section{Prepare Your Paper Before Styling} +Before you begin to format your paper, first write and save the content as a +separate text file. Complete all content and organizational editing before +formatting. Please note sections \ref{AA}--\ref{SCM} below for more information on +proofreading, spelling and grammar. + +Keep your text and graphic files separate until after the text has been +formatted and styled. Do not number text heads---{\LaTeX} will do that +for you. + +\subsection{Abbreviations and Acronyms}\label{AA} +Define abbreviations and acronyms the first time they are used in the text, +even after they have been defined in the abstract. Abbreviations such as +IEEE, SI, MKS, CGS, ac, dc, and rms do not have to be defined. Do not use +abbreviations in the title or heads unless they are unavoidable. + +\subsection{Units} +\begin{itemize} +\item Use either SI (MKS) or CGS as primary units. (SI units are encouraged.) English units may be used as secondary units (in parentheses). An exception would be the use of English units as identifiers in trade, such as ``3.5-inch disk drive''. +\item Avoid combining SI and CGS units, such as current in amperes and magnetic field in oersteds. This often leads to confusion because equations do not balance dimensionally. If you must use mixed units, clearly state the units for each quantity that you use in an equation. +\item Do not mix complete spellings and abbreviations of units: ``Wb/m\textsuperscript{2}'' or ``webers per square meter'', not ``webers/m\textsuperscript{2}''. Spell out units when they appear in text: ``. . . a few henries'', not ``. . . a few H''. +\item Use a zero before decimal points: ``0.25'', not ``.25''. Use ``cm\textsuperscript{3}'', not ``cc''.) +\end{itemize} + +\subsection{Equations} +Number equations consecutively. To make your +equations more compact, you may use the solidus (~/~), the exp function, or +appropriate exponents. Italicize Roman symbols for quantities and variables, +but not Greek symbols. Use a long dash rather than a hyphen for a minus +sign. Punctuate equations with commas or periods when they are part of a +sentence, as in: +\begin{equation} +a+b=\gamma\label{eq} +\end{equation} + +Be sure that the +symbols in your equation have been defined before or immediately following +the equation. Use ``\eqref{eq}'', not ``Eq.~\eqref{eq}'' or ``equation \eqref{eq}'', except at +the beginning of a sentence: ``Equation \eqref{eq} is . . .'' + +\subsection{\LaTeX-Specific Advice} + +Please use ``soft'' (e.g., \verb|\eqref{Eq}|) cross references instead +of ``hard'' references (e.g., \verb|(1)|). That will make it possible +to combine sections, add equations, or change the order of figures or +citations without having to go through the file line by line. + +Please don't use the \verb|{eqnarray}| equation environment. Use +\verb|{align}| or \verb|{IEEEeqnarray}| instead. The \verb|{eqnarray}| +environment leaves unsightly spaces around relation symbols. + +Please note that the \verb|{subequations}| environment in {\LaTeX} +will increment the main equation counter even when there are no +equation numbers displayed. If you forget that, you might write an +article in which the equation numbers skip from (17) to (20), causing +the copy editors to wonder if you've discovered a new method of +counting. + +{\BibTeX} does not work by magic. It doesn't get the bibliographic +data from thin air but from .bib files. If you use {\BibTeX} to produce a +bibliography you must send the .bib files. + +{\LaTeX} can't read your mind. If you assign the same label to a +subsubsection and a table, you might find that Table I has been cross +referenced as Table IV-B3. + +{\LaTeX} does not have precognitive abilities. If you put a +\verb|\label| command before the command that updates the counter it's +supposed to be using, the label will pick up the last counter to be +cross referenced instead. In particular, a \verb|\label| command +should not go before the caption of a figure or a table. + +Do not use \verb|\nonumber| inside the \verb|{array}| environment. It +will not stop equation numbers inside \verb|{array}| (there won't be +any anyway) and it might stop a wanted equation number in the +surrounding equation. + +\subsection{Some Common Mistakes}\label{SCM} +\begin{itemize} +\item The word ``data'' is plural, not singular. +\item The subscript for the permeability of vacuum $\mu_{0}$, and other common scientific constants, is zero with subscript formatting, not a lowercase letter ``o''. +\item In American English, commas, semicolons, periods, question and exclamation marks are located within quotation marks only when a complete thought or name is cited, such as a title or full quotation. When quotation marks are used, instead of a bold or italic typeface, to highlight a word or phrase, punctuation should appear outside of the quotation marks. A parenthetical phrase or statement at the end of a sentence is punctuated outside of the closing parenthesis (like this). (A parenthetical sentence is punctuated within the parentheses.) +\item A graph within a graph is an ``inset'', not an ``insert''. The word alternatively is preferred to the word ``alternately'' (unless you really mean something that alternates). +\item Do not use the word ``essentially'' to mean ``approximately'' or ``effectively''. +\item In your paper title, if the words ``that uses'' can accurately replace the word ``using'', capitalize the ``u''; if not, keep using lower-cased. +\item Be aware of the different meanings of the homophones ``affect'' and ``effect'', ``complement'' and ``compliment'', ``discreet'' and ``discrete'', ``principal'' and ``principle''. +\item Do not confuse ``imply'' and ``infer''. +\item The prefix ``non'' is not a word; it should be joined to the word it modifies, usually without a hyphen. +\item There is no period after the ``et'' in the Latin abbreviation ``et al.''. +\item The abbreviation ``i.e.'' means ``that is'', and the abbreviation ``e.g.'' means ``for example''. +\end{itemize} +An excellent style manual for science writers is \cite{b7}. + +\subsection{Authors and Affiliations} +\textbf{The class file is designed for, but not limited to, six authors.} A +minimum of one author is required for all conference articles. Author names +should be listed starting from left to right and then moving down to the +next line. This is the author sequence that will be used in future citations +and by indexing services. Names should not be listed in columns nor group by +affiliation. Please keep your affiliations as succinct as possible (for +example, do not differentiate among departments of the same organization). + +\subsection{Identify the Headings} +Headings, or heads, are organizational devices that guide the reader through +your paper. There are two types: component heads and text heads. + +Component heads identify the different components of your paper and are not +topically subordinate to each other. Examples include Acknowledgments and +References and, for these, the correct style to use is ``Heading 5''. Use +``figure caption'' for your Figure captions, and ``table head'' for your +table title. Run-in heads, such as ``Abstract'', will require you to apply a +style (in this case, italic) in addition to the style provided by the drop +down menu to differentiate the head from the text. + +Text heads organize the topics on a relational, hierarchical basis. For +example, the paper title is the primary text head because all subsequent +material relates and elaborates on this one topic. If there are two or more +sub-topics, the next level head (uppercase Roman numerals) should be used +and, conversely, if there are not at least two sub-topics, then no subheads +should be introduced. + +\subsection{Figures and Tables} +\paragraph{Positioning Figures and Tables} Place figures and tables at the top and +bottom of columns. Avoid placing them in the middle of columns. Large +figures and tables may span across both columns. Figure captions should be +below the figures; table heads should appear above the tables. Insert +figures and tables after they are cited in the text. Use the abbreviation +``Fig.~\ref{fig}'', even at the beginning of a sentence. + +\begin{table}[htbp] +\caption{Table Type Styles} +\begin{center} +\begin{tabular}{|c|c|c|c|} +\hline +\textbf{Table}&\multicolumn{3}{|c|}{\textbf{Table Column Head}} \\ +\cline{2-4} +\textbf{Head} & \textbf{\textit{Table column subhead}}& \textbf{\textit{Subhead}}& \textbf{\textit{Subhead}} \\ +\hline +copy& More table copy$^{\mathrm{a}}$& & \\ +\hline +\multicolumn{4}{l}{$^{\mathrm{a}}$Sample of a Table footnote.} +\end{tabular} +\label{tab1} +\end{center} +\end{table} + +\begin{figure}[htbp] +\centerline{\includegraphics{fig1.png}} +\caption{Example of a figure caption.} +\label{fig} +\end{figure} + +Figure Labels: Use 8 point Times New Roman for Figure labels. Use words +rather than symbols or abbreviations when writing Figure axis labels to +avoid confusing the reader. As an example, write the quantity +``Magnetization'', or ``Magnetization, M'', not just ``M''. If including +units in the label, present them within parentheses. Do not label axes only +with units. In the example, write ``Magnetization (A/m)'' or ``Magnetization +\{A[m(1)]\}'', not just ``A/m''. Do not label axes with a ratio of +quantities and units. For example, write ``Temperature (K)'', not +``Temperature/K''. + +\section*{Acknowledgment} + +The preferred spelling of the word ``acknowledgment'' in America is without +an ``e'' after the ``g''. Avoid the stilted expression ``one of us (R. B. +G.) thanks $\ldots$''. Instead, try ``R. B. G. thanks$\ldots$''. Put sponsor +acknowledgments in the unnumbered footnote on the first page. + +\section*{References} + +Please number citations consecutively within brackets \cite{b1}. The +sentence punctuation follows the bracket \cite{b2}. Refer simply to the reference +number, as in \cite{b3}---do not use ``Ref. \cite{b3}'' or ``reference \cite{b3}'' except at +the beginning of a sentence: ``Reference \cite{b3} was the first $\ldots$'' + +Number footnotes separately in superscripts. Place the actual footnote at +the bottom of the column in which it was cited. Do not put footnotes in the +abstract or reference list. Use letters for table footnotes. + +Unless there are six authors or more give all authors' names; do not use +``et al.''. Papers that have not been published, even if they have been +submitted for publication, should be cited as ``unpublished'' \cite{b4}. Papers +that have been accepted for publication should be cited as ``in press'' \cite{b5}. +Capitalize only the first word in a paper title, except for proper nouns and +element symbols. + +For papers published in translation journals, please give the English +citation first, followed by the original foreign-language citation \cite{b6}. + +\begin{thebibliography}{00} +\bibitem{b1} G. Eason, B. Noble, and I. N. Sneddon, ``On certain integrals of Lipschitz-Hankel type involving products of Bessel functions,'' Phil. Trans. Roy. Soc. London, vol. A247, pp. 529--551, April 1955. +\bibitem{b2} J. Clerk Maxwell, A Treatise on Electricity and Magnetism, 3rd ed., vol. 2. Oxford: Clarendon, 1892, pp.68--73. +\bibitem{b3} I. S. Jacobs and C. P. Bean, ``Fine particles, thin films and exchange anisotropy,'' in Magnetism, vol. III, G. T. Rado and H. Suhl, Eds. New York: Academic, 1963, pp. 271--350. +\bibitem{b4} K. Elissa, ``Title of paper if known,'' unpublished. +\bibitem{b5} R. Nicole, ``Title of paper with only first word capitalized,'' J. Name Stand. Abbrev., in press. +\bibitem{b6} Y. Yorozu, M. Hirano, K. Oka, and Y. Tagawa, ``Electron spectroscopy studies on magneto-optical media and plastic substrate interface,'' IEEE Transl. J. Magn. Japan, vol. 2, pp. 740--741, August 1987 [Digests 9th Annual Conf. Magnetics Japan, p. 301, 1982]. +\bibitem{b7} M. Young, The Technical Writer's Handbook. Mill Valley, CA: University Science, 1989. +\end{thebibliography} +\vspace{12pt} +\color{red} +IEEE conference templates contain guidance text for composing and formatting conference papers. Please ensure that all template text is removed from your conference paper prior to submission to the conference. Failure to remove the template text from your paper may result in your paper not being published. + +\end{document} diff --git a/synthetic/bck/template/Conference-LaTeX-template_10-17-19/fig1.png b/synthetic/bck/template/Conference-LaTeX-template_10-17-19/fig1.png new file mode 100644 index 0000000..c45bb5f Binary files /dev/null and b/synthetic/bck/template/Conference-LaTeX-template_10-17-19/fig1.png differ diff --git a/synthetic/bck/template/conference-latex-template_10-17-19.zip b/synthetic/bck/template/conference-latex-template_10-17-19.zip new file mode 100644 index 0000000..6446f17 Binary files /dev/null and b/synthetic/bck/template/conference-latex-template_10-17-19.zip differ diff --git a/synthetic/biblio.bib b/synthetic/biblio.bib new file mode 100644 index 0000000..6ee7f50 --- /dev/null +++ b/synthetic/biblio.bib @@ -0,0 +1,387 @@ +@misc{carlini2022membershipinferenceattacksprinciples, + title={Membership Inference Attacks From First Principles}, + author={Nicholas Carlini and Steve Chien and Milad Nasr and Shuang Song and Andreas Terzis and Florian Tramer}, + year={2022}, + eprint={2112.03570}, + archivePrefix={arXiv}, + primaryClass={cs.CR}, + url={https://arxiv.org/abs/2112.03570}, +} + +@article{brayne2015predictive, + title={Predictive policing}, + author={Brayne, Sarah and Rosenblat, Alex and Boyd, Danah}, + journal={Data \& Civil Rights: A New Era Of Policing And Justice}, + pages={2015--1027}, + year={2015} +} + +@inproceedings{barthelemy:hal-01837361, + TITLE = {{Pl@ntNet, une plate-forme innovante d'agr{\'e}gation et partage d'observations botaniques}}, + AUTHOR = {Barth{\'e}l{\'e}my, Daniel and Boujemaa, Nozha and Molino, Jean-Fran{\c c}ois and Joly, Alexis and Go{\"e}au, Herv{\'e} and Baki{\'c}, Vera and Selmi, Souheil and Champ, Julien and Carre, Jennifer and Chouet, Mathias and Perronnet, Aur{\'e}lien and Vignau, Christelle and Dufour-Kowalski, Samuel and Affouard, Antoine and Barbe, Julien and Bonnet, Pierre}, + URL = {https://hal.science/hal-01837361}, + BOOKTITLE = {{International Conference ‘Botanists of the Twenty-first Century'}}, + ADDRESS = {Paris, France}, + ORGANIZATION = {{UNESCO}}, + HAL_LOCAL_REFERENCE = {DEVMP}, + EDITOR = {No{\"e}line R. Rakotoarisoa and Stephen Blackmore and Bernard Riera}, + PAGES = {191-197}, + YEAR = {2014}, + MONTH = Sep, + KEYWORDS = {Pl@ntNet ; Botany ; Plateforme participative ; Observations botaniques}, + PDF = {https://hal.science/hal-01837361/file/DB_etal_plantnet_plateforme_2016_1.pdf}, + HAL_ID = {hal-01837361}, + HAL_VERSION = {v1}, +} + +@misc{plantnet, + title={Pl@ntNet}, + howpublished={\url{https://identify.plantnet.org/}}, + note={Dernier accès: 2024-07-24} +} + + +@article{dunn2018wearables, + title={Wearables and the medical revolution}, + author={Dunn, Jessilyn and Runge, Ryan and Snyder, Michael}, + journal={Personalized medicine}, + volume={15}, + number={5}, + pages={429--448}, + year={2018}, + publisher={Taylor \& Francis} +} + +@misc{gtrend, + title={Google trend Intelligence Artificielle}, + howpublished={\url{https://trends.google.com/trends/explore?date=all&geo=FR&q=intelligence%20artificielle&hl=en-US}}, + note={Dernier accès: 2024-07-24} +} + +@misc{france2030, + title={France 2030}, + howpublished={\url{https://www.info.gouv.fr/grand-dossier/france-2030}}, + note={Dernier accès: 2024-07-24} +} + +@misc{stratfr, + title={La stratégie nationale pour l'intelligence artificielle}, + howpublished={\url{https://www.entreprises.gouv.fr/fr/numerique/enjeux/la-strategie-nationale-pour-l-ia}}, + note={Dernier accès: 2024-07-24} +} + +@misc{applewatch, + title={WatchOS 11 brings powerful health and fitness insights, and even more personalization and connectivity }, + howpublished={\url{https://www.apple.com/newsroom/2024/06/watchos-11-brings-powerful-health-and-fitness-insights/}}, + note={Dernier accès: 2024-07-24} +} + +%%%%%%%%%%%CLIMATE CHANGE BACKGROUND +@article{barnes2019viewing, + title={Viewing forced climate patterns through an AI lens}, + author={Barnes, Elizabeth A and Hurrell, James W and Ebert-Uphoff, Imme and Anderson, Chuck and Anderson, David}, + journal={Geophysical Research Letters}, + volume={46}, + number={22}, + pages={13389--13398}, + year={2019}, + publisher={Wiley Online Library} +} + +@article{slater2023hybrid, + title={Hybrid forecasting: blending climate predictions with AI models}, + author={Slater, Louise J and Arnal, Louise and Boucher, Marie-Am{\'e}lie and Chang, Annie Y-Y and Moulds, Simon and Murphy, Conor and Nearing, Grey and Shalev, Guy and Shen, Chaopeng and Speight, Linda and others}, + journal={Hydrology and earth system sciences}, + volume={27}, + number={9}, + pages={1865--1889}, + year={2023}, + publisher={Copernicus Publications G{\"o}ttingen, Germany} +} + +%%%%%%%%%%%%ENERGY BACKGROUND +@article{jin2020energy, + title={Energy and AI}, + author={Jin, Donghan and Ocone, Raffaella and Jiao, Kui and Xuan, Jin}, + journal={Energy and AI}, + volume={1}, + pages={100002}, + year={2020}, + publisher={Elsevier} +} + +@article{kumar2020distributed, + title={Distributed energy resources and the application of AI, IoT, and blockchain in smart grids}, + author={Kumar, Nallapaneni Manoj and Chand, Aneesh A and Malvoni, Maria and Prasad, Kushal A and Mamun, Kabir A and Islam, FR and Chopra, Shauhrat S}, + journal={Energies}, + volume={13}, + number={21}, + pages={5739}, + year={2020}, + publisher={MDPI} +} + +@article{kumari2020blockchain, + title={Blockchain and AI amalgamation for energy cloud management: Challenges, solutions, and future directions}, + author={Kumari, Aparna and Gupta, Rajesh and Tanwar, Sudeep and Kumar, Neeraj}, + journal={Journal of Parallel and Distributed Computing}, + volume={143}, + pages={148--166}, + year={2020}, + publisher={Elsevier} +} + +@article{ngarambe2020use, + title={The use of artificial intelligence (AI) methods in the prediction of thermal comfort in buildings: Energy implications of AI-based thermal comfort controls}, + author={Ngarambe, Jack and Yun, Geun Young and Santamouris, Mat}, + journal={Energy and Buildings}, + volume={211}, + pages={109807}, + year={2020}, + publisher={Elsevier} +} + + +%%%%%OPEN AI + +@misc{openaibfm, + title={OpenAI, cette société qui révolutionne l'intelligence artificielle}, + howpublished={\url{https://www.bfmtv.com/tech/intelligence-artificielle/open-ai-cette-societe-qui-revolutionne-l-intelligence-artificielle_DN-202311200564.html}}, + note={Dernier accès: 2024-07-24} +} + +@misc{openaiinter, + title={Intelligence artificielle : pourquoi Sam Altman, créateur de ChatGPT, a été débarqué d'OpenAI}, + howpublished={\url{https://www.radiofrance.fr/franceinter/ce-que-l-on-sait-du-renvoi-de-sam-altman-patron-d-openai-et-createur-de-chatgpt-5672369}}, + note={Dernier accès: 2024-07-24} +} + +@misc{openaint, + title={OpenAI Says It Has Begun Training a New Flagship A.I. Model}, + howpublished={\url{https://www.nytimes.com/2024/05/28/technology/openai-gpt4-new-model.html}}, + note={Dernier accès: 2024-07-24} +} + +@misc{openaibg, + title={ChatGPT sets record for fastest-growing user base - analyst note}, + howpublished={\url{https://www.reuters.com/technology/chatgpt-sets-record-fastest-growing-user-base-analyst-note-2023-02-01/}}, + note={Dernier accès: 2024-07-24} +} + +@misc{gptjournal, + title={ChatGPT : le quotidien Le Monde signe un partenariat avec OpenAI, une première en France}, + howpublished={\url{https://www.radiofrance.fr/franceinter/podcasts/l-info-de-france-inter/les-doc-france-inter-du-jeudi-14-mars-3-7619379}}, + note={Dernier accès: 2024-07-24} +} + +@article{beraja2023ai, + title={AI-tocracy}, + author={Beraja, Martin and Kao, Andrew and Yang, David Y and Yuchtman, Noam}, + journal={The Quarterly Journal of Economics}, + volume={138}, + number={3}, + pages={1349--1402}, + year={2023}, + publisher={Oxford University Press} +} + + + + + +@misc{song2020overlearning, + title={Overlearning Reveals Sensitive Attributes}, + author={Congzheng Song and Vitaly Shmatikov}, + year={2020}, + eprint={1905.11742}, + archivePrefix={arXiv}, + primaryClass={cs.LG} +} + +@article{EO, + author = {Moritz Hardt and + Eric Price and + Nathan Srebro}, + title = {Equality of Opportunity in Supervised Learning}, + journal = {CoRR}, + volume = {abs/1610.02413}, + year = {2016}, + url = {http://arxiv.org/abs/1610.02413}, + eprinttype = {arXiv}, + eprint = {1610.02413}, + timestamp = {Tue, 26 Apr 2022 09:17:17 +0200}, + biburl = {https://dblp.org/rec/journals/corr/HardtPS16.bib}, + bibsource = {dblp computer science bibliography, https://dblp.org} +} + +@article{hawkins2004problem, + title={The problem of overfitting}, + author={Hawkins, Douglas M}, + journal={Journal of chemical information and computer sciences}, + volume={44}, + number={1}, + pages={1--12}, + year={2004}, + publisher={ACS Publications} +} + +@misc{yeom, + title={Privacy Risk in Machine Learning: Analyzing the Connection to Overfitting}, + author={Samuel Yeom and Irene Giacomelli and Matt Fredrikson and Somesh Jha}, + year={2018}, + eprint={1709.01604}, + archivePrefix={arXiv}, + primaryClass={cs.CR} +} + +@misc{vgg16, + title={Very Deep Convolutional Networks for Large-Scale Image Recognition}, + author={Karen Simonyan and Andrew Zisserman}, + year={2015}, + eprint={1409.1556}, + archivePrefix={arXiv}, + primaryClass={cs.CV}, + url={https://arxiv.org/abs/1409.1556}, +} +@misc{CGAN, + title={Conditional Generative Adversarial Nets}, + author={Mehdi Mirza and Simon Osindero}, + year={2014}, + eprint={1411.1784}, + archivePrefix={arXiv}, + primaryClass={cs.LG}, + url={https://arxiv.org/abs/1411.1784}, +} +@ARTICLE{cnn, + + author={Rawat, Waseem and Wang, Zenghui}, + + journal={Neural Computation}, + + title={Deep Convolutional Neural Networks for Image Classification: A Comprehensive Review}, + + year={2017}, + + volume={29}, + + number={9}, + + pages={2352-2449}, + + keywords={}, + + doi={10.1162/neco_a_00990}} + +@misc{dcgan, + title={Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks}, + author={Alec Radford and Luke Metz and Soumith Chintala}, + year={2016}, + eprint={1511.06434}, + archivePrefix={arXiv}, + primaryClass={cs.LG}, + url={https://arxiv.org/abs/1511.06434} +} +@inproceedings{gan, +author = {Goodfellow, Ian J. and Pouget-Abadie, Jean and Mirza, Mehdi and Xu, Bing and Warde-Farley, David and Ozair, Sherjil and Courville, Aaron and Bengio, Yoshua}, +title = {Generative adversarial nets}, +year = {2014}, +publisher = {MIT Press}, +address = {Cambridge, MA, USA}, +booktitle = {Proceedings of the 27th International Conference on Neural Information Processing Systems - Volume 2}, +pages = {2672–2680}, +numpages = {9}, +location = {Montreal, Canada}, +series = {NIPS'14} +} +@misc{ctgan, + title={Modeling Tabular data using Conditional GAN}, + author={Lei Xu and Maria Skoularidou and Alfredo Cuesta-Infante and Kalyan Veeramachaneni}, + year={2019}, + eprint={1907.00503}, + archivePrefix={arXiv}, + primaryClass={cs.LG}, + url={https://arxiv.org/abs/1907.00503}, +} +@article{bellovin2019privacy, + title={Privacy and synthetic datasets}, + author={Bellovin, Steven M and Dutta, Preetam K and Reitinger, Nathan}, + journal={Stan. Tech. L. Rev.}, + volume={22}, + pages={1}, + year={2019}, + publisher={HeinOnline} +} + +@inproceedings{ping2017datasynthesizer, + title={Datasynthesizer: Privacy-preserving synthetic datasets}, + author={Ping, Haoyue and Stoyanovich, Julia and Howe, Bill}, + booktitle={Proceedings of the 29th International Conference on Scientific and Statistical Database Management}, + pages={1--5}, + year={2017} +} + +@inproceedings{kuppa2021towards, + title={Towards improving privacy of synthetic datasets}, + author={Kuppa, Aditya and Aouad, Lamine and Le-Khac, Nhien-An}, + booktitle={Annual Privacy Forum}, + pages={106--119}, + year={2021}, + organization={Springer} +} + +@article{tai2023user, + title={User-Driven Synthetic Dataset Generation with Quantifiable Differential Privacy}, + author={Tai, Bo-Chen and Tsou, Yao-Tung and Li, Szu-Chuang and Huang, Yennun and Tsai, Pei-Yuan and Tsai, Yu-Cheng}, + journal={IEEE Transactions on Services Computing}, + year={2023}, + publisher={IEEE} +} +@article{stadler2020synthetic, + title={Synthetic data-A privacy mirage}, + author={Stadler, Theresa and Oprisanu, Bristena and Troncoso, Carmela}, + journal={arXiv preprint arXiv:2011.07018}, + year={2020}, + publisher={Nov} +} + +@inproceedings{jordon2021hide, + title={Hide-and-seek privacy challenge: Synthetic data generation vs. patient re-identification}, + author={Jordon, James and Jarrett, Daniel and Saveliev, Evgeny and Yoon, Jinsung and Elbers, Paul and Thoral, Patrick and Ercole, Ari and Zhang, Cheng and Belgrave, Danielle and van der Schaar, Mihaela}, + booktitle={NeurIPS 2020 Competition and Demonstration Track}, + pages={206--215}, + year={2021}, + organization={PMLR} +} + +@inproceedings{abadi2016deep, + title={Deep learning with differential privacy}, + author={Abadi, Martin and Chu, Andy and Goodfellow, Ian and McMahan, H Brendan and Mironov, Ilya and Talwar, Kunal and Zhang, Li}, + booktitle={Proceedings of the 2016 ACM SIGSAC conference on computer and communications security}, + pages={308--318}, + year={2016} +} + +@inproceedings{shokri2017membership, + title={Membership inference attacks against machine learning models}, + author={Shokri, Reza and Stronati, Marco and Song, Congzheng and Shmatikov, Vitaly}, + booktitle={2017 IEEE symposium on security and privacy (SP)}, + pages={3--18}, + year={2017}, + organization={IEEE} +} + +@article{ding2021retiring, + title={Retiring Adult: New Datasets for Fair Machine Learning}, + author={Ding, Frances and Hardt, Moritz and Miller, John and Schmidt, Ludwig}, + journal={Advances in Neural Information Processing Systems}, + volume={34}, + year={2021} +} + +@inproceedings{zhifei2017cvpr, + title={Age Progression/Regression by Conditional Adversarial Autoencoder}, + author={Zhang, Zhifei and Song, Yang and Qi, Hairong}, + booktitle={IEEE Conference on Computer Vision and Pattern Recognition (CVPR)}, + year={2017}, + organization={IEEE} +} diff --git a/synthetic/compile.sh b/synthetic/compile.sh new file mode 100644 index 0000000..3897a0b --- /dev/null +++ b/synthetic/compile.sh @@ -0,0 +1,5 @@ +pdflatex main.tex; +bibtex main; +pdflatex main.tex; +pdflatex main.tex; +pdflatex main.tex; diff --git a/synthetic/conclusion.tex b/synthetic/conclusion.tex new file mode 100644 index 0000000..bb6dd17 --- /dev/null +++ b/synthetic/conclusion.tex @@ -0,0 +1,6 @@ +Even though synthetic dataset are promising regarding users' data protection, in itself it does not bring guaranties regarding attribute inference attack. +For future work we suggest that applying fairness regularization during the training of the generator could be a way to remove bias toward sensitive attributes. + +Concerning membership inference attack, synthetic data reduce the overall risk while still leaving an attack surface on some outliers points. +Differential privacy is a way to reduce the risk on outliers but removing entirely the risk while keeping some level of utility is impossible. +Hence more work in this direction is required. \ No newline at end of file diff --git a/synthetic/figure/image1.png b/synthetic/figure/image1.png new file mode 100644 index 0000000..b9278b1 Binary files /dev/null and b/synthetic/figure/image1.png differ diff --git a/synthetic/figure/image2.png b/synthetic/figure/image2.png new file mode 100644 index 0000000..9d4f44e Binary files /dev/null and b/synthetic/figure/image2.png differ diff --git a/synthetic/figure/method/overfit/aia.pdf b/synthetic/figure/method/overfit/aia.pdf new file mode 100644 index 0000000..f055f5f Binary files /dev/null and b/synthetic/figure/method/overfit/aia.pdf differ diff --git a/synthetic/figure/method/overfit/mia.pdf b/synthetic/figure/method/overfit/mia.pdf new file mode 100644 index 0000000..cb09492 Binary files /dev/null and b/synthetic/figure/method/overfit/mia.pdf differ diff --git a/synthetic/figure/method/overfit/quality.pdf b/synthetic/figure/method/overfit/quality.pdf new file mode 100644 index 0000000..a59734e Binary files /dev/null and b/synthetic/figure/method/overfit/quality.pdf differ diff --git a/synthetic/figure/method/overfit/utility.pdf b/synthetic/figure/method/overfit/utility.pdf new file mode 100644 index 0000000..205fe79 Binary files /dev/null and b/synthetic/figure/method/overfit/utility.pdf differ diff --git a/synthetic/figure/result/adult/aia.pdf b/synthetic/figure/result/adult/aia.pdf new file mode 100644 index 0000000..3510fa9 Binary files /dev/null and b/synthetic/figure/result/adult/aia.pdf differ diff --git a/synthetic/figure/result/adult/mia.pdf b/synthetic/figure/result/adult/mia.pdf new file mode 100644 index 0000000..58b81ae Binary files /dev/null and b/synthetic/figure/result/adult/mia.pdf differ diff --git a/synthetic/figure/result/adult/utility.pdf b/synthetic/figure/result/adult/utility.pdf new file mode 100644 index 0000000..2359440 Binary files /dev/null and b/synthetic/figure/result/adult/utility.pdf differ diff --git a/synthetic/figure/tikz/data.tex b/synthetic/figure/tikz/data.tex new file mode 100644 index 0000000..663b59c --- /dev/null +++ b/synthetic/figure/tikz/data.tex @@ -0,0 +1,20 @@ +\makeatletter +\tikzset{ + database/.style={ + path picture={ + \draw (0, 1.5*\database@segmentheight) circle [x radius=\database@radius,y radius=\database@aspectratio*\database@radius]; + \draw (-\database@radius, 0.5*\database@segmentheight) arc [start angle=180,end angle=360,x radius=\database@radius, y radius=\database@aspectratio*\database@radius]; + \draw (-\database@radius,-0.5*\database@segmentheight) arc [start angle=180,end angle=360,x radius=\database@radius, y radius=\database@aspectratio*\database@radius]; + \draw (-\database@radius,1.5*\database@segmentheight) -- ++(0,-3*\database@segmentheight) arc [start angle=180,end angle=360,x radius=\database@radius, y radius=\database@aspectratio*\database@radius] -- ++(0,3*\database@segmentheight); + }, + minimum width=2*\database@radius + \pgflinewidth, + minimum height=3*\database@segmentheight + 2*\database@aspectratio*\database@radius + \pgflinewidth, + }, + database segment height/.store in=\database@segmentheight, + database radius/.store in=\database@radius, + database aspect ratio/.store in=\database@aspectratio, + database segment height=0.1cm, + database radius=0.25cm, + database aspect ratio=0.35, +} +\makeatother diff --git a/synthetic/figure/tikz/data_flow/step1.tex b/synthetic/figure/tikz/data_flow/step1.tex new file mode 100644 index 0000000..739163f --- /dev/null +++ b/synthetic/figure/tikz/data_flow/step1.tex @@ -0,0 +1,30 @@ +\input{figure/tikz/data} + +\begin{tikzpicture} +\node[database,label=left:$D$] (d) at (0,0){}; +\node[database,label=left:$D_{\text{Train}}$] (train) at (0,-2){}; +\node[database,label=right:$D_{\text{Ttest}}$] (test) at (2,0){}; + +\draw[->] (d) to (train); +\draw[->] (d) to (test); + +\def \p {-2} %Bloc position +\def \s {1} %spacing +\node[rectangle,draw] (g1) at (2,\p+\s) {Generator 1}; +\node[rectangle,draw] (g2) at (2,\p) {Generator 2}; +\node[rectangle,draw] (g3) at (2,\p-\s) {Generator 3}; + +\draw[->] (train) to (g1); +\draw[->] (train) to (g2); +\draw[->] (train) to (g3); + +\node[database,label=right:$S_{1}$] (s1) at (4,\p+\s){}; +\node[database,label=right:$S_{2}$] (s2) at (4,\p){}; +\node[database,label=right:$S_{3}$] (s3) at (4,\p-\s){}; + +\draw[->] (g1) to (s1); +\draw[->] (g2) to (s2); +\draw[->] (g3) to (s3); + + +\end{tikzpicture} diff --git a/synthetic/figure/tikz/data_flow/step2.tex b/synthetic/figure/tikz/data_flow/step2.tex new file mode 100644 index 0000000..b00ff0e --- /dev/null +++ b/synthetic/figure/tikz/data_flow/step2.tex @@ -0,0 +1,16 @@ +\input{figure/tikz/data} + +\begin{tikzpicture} +\node[database,label=left:$S_{1}$] (s1) at (0,0){}; +\node[database,label=left:$S_{2}$] (s2) at (0,-1){}; +\node[database,label=left:$S_{3}$] (s3) at (0,-2){}; + +\node[rectangle,draw] (pred1) at (2,0) {Predictor 1}; +\node[rectangle,draw] (pred2) at (2,-1) {Predictor 2}; +\node[rectangle,draw] (pred3) at (2,-2) {Predictor 3}; + +\draw[->] (s1) to (pred1); +\draw[->] (s2) to (pred2); +\draw[->] (s3) to (pred3); + +\end{tikzpicture} diff --git a/synthetic/figure/tikz/data_flow/step3.tex b/synthetic/figure/tikz/data_flow/step3.tex new file mode 100644 index 0000000..e7d0d28 --- /dev/null +++ b/synthetic/figure/tikz/data_flow/step3.tex @@ -0,0 +1,23 @@ +\input{figure/tikz/data} + +\begin{tikzpicture} +\node[database,label=left:$D_{\text{test}}$] (test) at (0,-1){}; + +\node[rectangle,draw] (pred1) at (2,0) {Predictor 1}; +\node[rectangle,draw] (pred2) at (2,-1) {Predictor 2}; +\node[rectangle,draw] (pred3) at (2,-2) {Predictor 3}; + + +\node[database,label=right:$P_{1}$] (p1) at (4,0){}; +\node[database,label=right:$P_{2}$] (p2) at (4,-1){}; +\node[database,label=right:$P_{3}$] (p3) at (4,-2){}; + +\draw[->] (test) to (pred1); +\draw[->] (test) to (pred2); +\draw[->] (test) to (pred3); + +\draw[->] (pred1) to (p1); +\draw[->] (pred2) to (p2); +\draw[->] (pred3) to (p3); + +\end{tikzpicture} diff --git a/synthetic/figure/tikz/data_split/bck b/synthetic/figure/tikz/data_split/bck new file mode 100644 index 0000000..727f594 --- /dev/null +++ b/synthetic/figure/tikz/data_split/bck @@ -0,0 +1,73 @@ + +\begin{tikzpicture} + \node[database,label=left:Full] (d) at (0,0){}; + + \node[database,label=left:$m$ 80\%] (dtr) at (2,0.5){}; + \node[database,label=left:$\bar{m}$ 20\%] (dte) at (2,-0.5){}; + + \draw[->] (d) to (dtr); + \draw[->] (d) to (dte); + + \node[rectangle,draw,align=center] (target) at (5,0.5) {Target\\Model}; + + \draw[->] (dtr) to[bend left] node[midway,above,inner sep=2pt] {training} (target); + \draw[->] (dtr) to node[midway,below] {eval} (target); + \draw[->] (dte) to node[midway,below] {eval} (target); + + \node[database,label=above:loss $m$] (dlm) at (7,0.5){}; + \node[database,label=above:loss $\bar{m}$] (dlnm) at (7,-0.5){}; + + \draw[->] (target) to node[midway,above] {eval} (dlm); + \draw[->] (target) to node[midway,below] {eval} (dlnm); + + \node[database,label=below:MIA data] (shu) at (7,-2){}; + \draw[->] (dlm) to[out=0,in=50] (shu); + \draw[->] (dlnm) to[bend left] (shu); + + \node[database,label=right:Train 80\%] (miatr) at (4,-1.5){}; + \node[database,label=right:Test 20\%] (miate) at (4,-2.5){}; + \draw[->] (shu) to (miatr); + \draw[->] (shu) to (miate); + + \node[rectangle,draw,align=center] (miamod) at (2, -1.5) {MIA\\Model}; + + \draw[->] (miatr) to[bend right] node[midway,above,inner sep=2pt] {training} (miamod); + \draw[->] (miate) to node[midway,below] {eval} (miamod); + + \node (res) at (0,-1.5) {MIA result}; + \draw[->] (miamod) to (res); +\end{tikzpicture} + + + + + + +\begin{tikzpicture} +\node[database,label=left:$D$] (d) at (0,0){}; +\node[database,label=left:$D_{\text{Train}}$] (train) at (0,-2){}; +\node[database,label=right:$D_{\text{Ttest}}$] (test) at (2,0){}; + +\draw[->] (d) to (train); +\draw[->] (d) to (test); + +\def \p {-2} %Bloc position +\def \s {1} %spacing +\node[rectangle,draw] (g1) at (2,\p+\s) {Generator 1}; +\node[rectangle,draw] (g2) at (2,\p) {Generator 2}; +\node[rectangle,draw] (g3) at (2,\p-\s) {Generator 3}; + +\draw[->] (train) to (g1); +\draw[->] (train) to (g2); +\draw[->] (train) to (g3); + +\node[database,label=right:$S_{1}$] (s1) at (4,\p+\s){}; +\node[database,label=right:$S_{2}$] (s2) at (4,\p){}; +\node[database,label=right:$S_{3}$] (s3) at (4,\p-\s){}; + +\draw[->] (g1) to (s1); +\draw[->] (g2) to (s2); +\draw[->] (g3) to (s3); + + +\end{tikzpicture} diff --git a/synthetic/figure/tikz/data_split/split.tex b/synthetic/figure/tikz/data_split/split.tex new file mode 100644 index 0000000..a742424 --- /dev/null +++ b/synthetic/figure/tikz/data_split/split.tex @@ -0,0 +1,65 @@ +\input{synthetic/figure/tikz/data} + + +\begin{tikzpicture} + + %\draw[fill=red] (-1.1,1) rectangle (7.2,-2.5); + %\draw[fill=green] (-1.1,-2.5) rectangle (7.2,-5); + %\draw[fill=blue] (-1.1,-5) rectangle (7.2,-8); + %\draw[fill=white,fill opacity=0.8] (-1.1,1) rectangle (7.2,-8); + + %\node[single arrow, anchor=west, very thick, fill=lightgray, fill opacity=0.9, + % minimum width = 30pt, single arrow head extend=3pt, + % minimum height=89mm, + % rotate=-90] () at (3,1){}; + + \node[database,label={[align=left]left:Real\\data}] (d) at (0,0){}; + \node[rectangle,draw,align=center] (overfit) at (2,0) {OVR\\CTRL}; + \draw[->] (d) to node[midway,above] {80\%} (overfit); + \node[database,label=above:$m$] (realtr) at (3,0){}; + \draw[->] (overfit) to (realtr); + \node[rectangle,draw,align=center] (gen) at (6,0) {Generator\\Model}; + \draw[->] (realtr) to node[midway,above] {training} (gen); + + \node[database,label={[align=left]right:Synthetic\\data}] (syn) at (5,-1.5) {}; + \draw[->] (gen) to (syn); + \node[database,label=below:$\bar{m}$] (realte) at (0,-1.5) {}; + \draw[->] (d) to node[midway,left] {20\%}(realte); + \node[rectangle,draw,align=center] (tarmod) at (2,-2) {Target\\Model}; + \draw[->] (realte) to[out=0,in=130] node[midway,above] {eval} (tarmod); + \draw[->] (realtr) to node[midway,right] {eval} (tarmod); + \draw[->] (syn) to[out=-90,in=0] node[midway,above] {training} (tarmod); + \node[database,label={[align=center]left:loss\\$\bar{m}$}] (miam) at (1.5,-5) {}; + \node[database,label={[align=center]right:loss\\$m$}] (mian) at (2.5,-5) {}; + \node[database,label={[align=center]below:MIA\\data}] (mia) at (2,-6.5) {}; + \draw[->] (tarmod) to node[midway,fill=white] (aiabranch) {\small prediction} (miam); + \draw[->] (tarmod) to (mian); + \draw[->] (miam) to (mia); + \draw[->] (mian) to (mia); + + \node[database,label=above:Train] (miatr) at (4,-6.5) {}; + \node[database,label=below:Test] (miate) at (4,-7) {}; + \draw[->] (mia) to node[midway,above] {80\%} (miatr); + \draw[->] (mia) to node[midway,below] {20\%} (miate); + \node[rectangle,draw,align=center] (miamod) at (6.5,-6.5) {MIA\\Model}; + \draw[->] (miatr) to node[midway,above] {training} (miamod); + \node[align=center] (miares) at (6.5,-7.5) {MIA\\Result}; + \draw[->] (miate) to node[midway,below] {eval} (miamod); + \draw[->] (miamod) to (miares); + + \node[database,label={[align=center]above:AIA\\data}] (aiad) at (3.2,-3.6){}; + \node[align=center] (ures) at (0,-3.6) {Utility\\Result}; + \draw[->] (aiabranch) to (aiad); + \draw[->] (aiabranch) to (ures); + \node[database,label=above:Train] (aiatr) at (4.5,-3.6) {}; + \node[database,label=below:Test] (aiate) at (4.5,-4.1) {}; + \draw[->] (aiad) to node[midway,above] {80\%} (aiatr); + \draw[->] (aiad) to node[midway,below] {20\%} (aiate); + \node[rectangle,draw,align=center] (aiamod) at (6.5,-3.8) {AIA\\Model}; + + \draw[->] (aiatr) to node[midway,above] {training} (aiamod); + \draw[->] (aiate) to node[midway,below] {eval} (aiamod); + \node[align=center] (aiares) at (6.5,-5) {AIA\\Result}; + \draw[->] (aiamod) to (aiares); +\end{tikzpicture} + diff --git a/synthetic/figure/tikz/ovre.tex b/synthetic/figure/tikz/ovre.tex new file mode 100644 index 0000000..2ae2645 --- /dev/null +++ b/synthetic/figure/tikz/ovre.tex @@ -0,0 +1,13 @@ +%Control of the overfitting +\input{synthetic/figure/tikz/data} +\begin{tikzpicture} + \node[database,label=Input] (in) at (0,1) {}; + \node (i) at (0,0) {$r_0,\cdots, r_{N-1}$}; + \draw[->] (in) to node[midway,right] {sampling} (i); + \node (m) at (0,-1) {$r_0,\cdots, r_{N-1},r_0,\cdots, r_{N-1},\cdots,r_0,\cdots, r_{N-1}$}; + \draw[->] (i) to node[midway,right] {repetition}(m); + \node[rectangle,draw] (shu) at (0,-2) {Shuffle}; + \draw[->] (m) to (shu); + \node[database,label=below:Output] (out) at (0,-3){}; + \draw[->] (shu) to (out); +\end{tikzpicture} diff --git a/synthetic/introduction.tex b/synthetic/introduction.tex new file mode 100644 index 0000000..c4b827a --- /dev/null +++ b/synthetic/introduction.tex @@ -0,0 +1,34 @@ +% Antoine : v0.1, still working on it + +The deployment of Machine Learning and AI is becoming widespread in all areas ranging from cars, medicine, IoT, multimedia, cybersecurity to name a few. +This race is fueled by a strong hope for innovation and new services such as autonomous car, personalized medicine, better understanding of life, advanced and personalized service for instance. %targeted advertising.... +This generalization of AI requires being fed with a large quantity of data in order to train the underlying learning models. +At the heart of a large amount of innovative service is the human, therefore, these learning models are fed by a lot of personal information which is continuously and massively collected and resold. + +This omnipresence of personal information in training data opens up a new attack surface that is still poorly understood. +A large number of attacks have appeared in recent years which showed a risk of reconstruction of training data, inference of sensitive attributes on individuals, inference of membership on training data for instance. +These new privacy risks come up against regulations governing the use of personal data and are framed in new regulations on AI (e.g., IA Act). + +In order to reduce these risks on privacy and better comply with regulations, the generation of synthetic data has been largely adopted. +This technique relies on a generative model which is learned to artificially generate data which has the same statistical properties to the training data. +%Ainsi, au lieu de partager les données personnelles brutes (ou anonymisé), les données synthetiques ne sont plus associées à un individu et peuvent être partagées plus facilement. +Hence, instead of sharing raw personal data (or anonymized), synthetic data points are not linked to any individual and so can be shared with less restrictions. +This new El Dorado of synthetic data for the sale or sharing of data outside the GDPR is attracting a lot of interest and many startups or services have emerged to meet the demand. +This new economy also fuels the need for data to feed learning models through training with synthetic data. +%For example, projections of the use of synthetic data for model training show that in 2030, more than X\% of models will be trained with this data. + +Although training from synthetic data reduces the risk, synthetic data also carries a risk of leaking information compared to the raw data used such as membership inference and attribute inference. +Membership inference refers to the possibility of inferring weather or not a data record belongs to the training data. +Attribute inference refers to how a trained model can be leveraged to infer a sensitive attribute such as the race or the gender. + +However, no study has focused on the propagation of the risks of using synthetic data instead of real data for model training. +This paper investigates this risk propagation. +More specifically, we study how membership and attribute inference are impacted by synthetic data. +We studies the following research question through an experimental approach: +How does using synthetic data instead of real data affect users' privacy in the context of training machine learning models? + +The paper is organized as follows: +We begin by introduction key notions around machine learning and synthetic data privacy. +Then we present our experimental methodology followed by our result with our interpretation. +Finally we show an overview of how this work integrates with the current literature. + diff --git a/synthetic/list_of_conf_journals b/synthetic/list_of_conf_journals new file mode 100644 index 0000000..bbdec2d --- /dev/null +++ b/synthetic/list_of_conf_journals @@ -0,0 +1 @@ +https://www.springer.com/journal/357 diff --git a/synthetic/main.log b/synthetic/main.log new file mode 100644 index 0000000..ad4d005 --- /dev/null +++ b/synthetic/main.log @@ -0,0 +1,27 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024/Arch Linux) (preloaded format=pdflatex 2024.6.8) 4 SEP 2024 23:10 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**main.tex +(./main.tex +LaTeX2e <2023-11-01> patch level 1 +L3 programming layer <2024-02-20> +! Misplaced alignment tab character &. +l.1 & + %\documentclass{IEEEtran} +? x + +Here is how much of TeX's memory you used: + 16 strings out of 476047 + 382 string characters out of 5792627 + 1925187 words of memory out of 5000000 + 22232 multiletter control sequences out of 15000+600000 + 558069 words of font info for 36 fonts, out of 8000000 for 9000 + 14 hyphenation exceptions out of 8191 + 12i,0n,13p,66b,8s stack positions out of 10000i,1000n,20000p,200000b,200000s +No pages of output. +PDF statistics: + 0 PDF objects out of 1000 (max. 8388607) + 0 named destinations out of 1000 (max. 500000) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/synthetic/main.pdf b/synthetic/main.pdf new file mode 100644 index 0000000..7605892 Binary files /dev/null and b/synthetic/main.pdf differ diff --git a/synthetic/main.tex b/synthetic/main.tex new file mode 100644 index 0000000..8b6afdd --- /dev/null +++ b/synthetic/main.tex @@ -0,0 +1,19 @@ + +\section{Introduction} +\input{synthetic/introduction} + +%\section{Background and related Work} +%\input{background} + +\section{Méthodologie} +\input{synthetic/methodology} + +\section{Résultats} +\label{sec:synth-res} +\input{synthetic/results} + +\section{Related work} +\input{synthetic/related} + +\section{Conclusion} +\input{synthetic/conclusion} diff --git a/synthetic/methodology.tex b/synthetic/methodology.tex new file mode 100644 index 0000000..db3861e --- /dev/null +++ b/synthetic/methodology.tex @@ -0,0 +1,143 @@ +Dans cete section nous allons discuter de l'approche expérimentale que nous allons suivre pour apporter des élément de réponse à la question posée précédement. +Nous commencont par présenter le jeu de donnée et le générateur que nous utilisons. +Ensuite nous parlerons du modèle cible que nous entraînons avec le sortie du générateur. +Ainsi nous pourrons présenter les attaque de confidentialité pris en compte dans cette étude. +A la Section~\ref{sec:ovr} nous metrons en avant un particulartié de notre méthodologie : comment nous controlons le niveau d'\textit{overfitting} du générateur et du modèle cible. +Finalement, nous montrons une représentation graphique du procédé dans son entiéretest, des données réeles jusqu'au résultat expérrimentaux dans la Figure~\ref{fig:split}. + +\subsection{Jeu de donnée} +Notre étude ce concentre sur Adult que nous avons déjà présenté à la section~\ref{sec:aia-methodo-jeu}. +%It allows us to experiments with various types of generators (cf. Section~\ref{sec:gen}) and target models (cf. Section~\ref{sec:target}). + +Pour ce chapitre, la tâche de classification que nous allons considérer est la prédiction binaire suivante : est-ce qu'un individu à un travial ou non. +Nous étudirons la couleur de peau comme attribut sensible. +Dans le rencenemnt des USA\footnote{\textit{Census}} l'éthnie est encodée par neuf classes. +Nous transformon l'ethnie en un attribut binaire en encodan les personnes à la peau noir avec un un ($1$) et toutes les autres avec un ($0$). +Ainsi, dans les contexte d'une AIA, le but de l'attaquant est d'inférer si une personne à la peau noir. + +Nous n'utilisrons pas directment de rencesment de USA, nous utiliserons une version adapté à l'étude de l'équitée : \textit{Retiring adult}~\cite{ding2021retiring}. +Cette version à formaté la base de donnée que l'on peut télécharger sur le site du gouvernement des USA pour le rendre facilement interfacable avec des outils standard du language Python come pandas, numpy ou scikit-learn. +Cela nous permet de séléctioner, l'état, l'année, la tâche de classification et les attributs senssiebles facilement. +Pour des raison pratiques, principalement de taille de stockage et de puissane de calcul, nous nous limitons aux données de l'Alabama du recensemelt de 2018. +Ce sous ensemble contient les données de 47777 presonnes. + +\subsection{Entraînement de générateur} +\label{sec:synth-gen} +Dans cette édute, nous considérons une variante du GAN : +CTGAN~\cite{ctgan}. +CTAGN est un GAN conditionel spécialiement concu pour des données tabulaires hétérogènes. +Ce générateur prend en considération des attributs aussi bien qualitatif que quantitatif. +Par exemplen, l'attribue emploie est qualitatif là où la taille est quantitaif. +Dans nos experiences nous utilisons l'implémentation de CTGAN du \textit{Synthetic Data Vault} (SDV)~\footnote{sdv.dev}. + +\subsection{Entraînement du prédicteur} +\label{sec:synth-target} +Nous utilisons une forête aléatoire avec cent arbres pour la tâche de classification du modèle cible : inféré si la personne à un travail. +Nous utilisant l'implémentation de scikit-learn de la forêt aléatoire. + +Pour évaluer les tâche de classification nous utilisons la \textit{balanced accuracy} que nous avons présenté en Section~\ref{sec:background-ml-classification}. + +\subsection{Moèdele d'attaque} +Nous utilisons étudions deux notions de confidentialité : l'AIA et la MIA. +Concernant l'AIA nous n'étudions ici que la version de l'attaque qui utilise les logits, celle que nous avons présenté à la section~\ref{sec:aia-soft}. + +\subsubsection{Inférence de l'appartenance (MIA)} +To perform MIA we do not use shadow models but rather adopt an approach similar to Yeom et all~\cite{yeom}. +We consider the attacker already has a dataset of the losses with their corresponding membership status ($m$ or $\bar{m}$). +Hence our methodology gives an upper bound with respect to shadow models. +Because our study focuses on synthetic data, the members are the points used to train the generator and not the points used to train the target model as we describe in Figure~\ref{fig:split}. + +\subsection{Contrôle de l'\textit{overfitting}} +Les attaque MIA donnent habituelle d'assez faible résultatons, spécialiement pour de faible taux de faux positif~\cite{stadler2020synthetic}. +Ainsi pour pouvoir juger de l'impacte des données synthetique sur le risque de MIA nous augmentont artificielment l'\textit{overfitting} avec la fonction OVR CTRL. +Nous appliquons OVR CTRL à la fois sur les donnée synthétique et sur les donnée réel ainsi nous pouvons obtenons des résultat comparables pour ces deux cas. +\label{sec:ovr} +\begin{figure} + \centering + \input{synthetic/figure/tikz/ovre} + \caption{Dans cette figure nous détaillons la fonction OVR CTRL. + Cette fonction contrôle le niveau d'\textit{overfitting} du modèle cible. + Elle prend en entrée une base de donnée de taille $N$ et en ressort une autre de taille $M$. + Dans un premier temps, nous séléctionons $N$ lignes de manière aléatoire que nous appelons $r_0,\cdots,r_{N-1}$. + Ensuite, nous répétons le lignes $\lfloor\frac{M}{N}\rfloor$ fois. + Enfin nous melangons la base de donnée obtenue.} + \label{fig:aia-ovr} +\end{figure} + +Avant d'utiliser les donnée réel pour entraîner le générateur, nous leurs appliquons la fonction OVR CTRL. +Cette fonction contrôle le niveau d'{overfitting} du générateur +par de l'échantillionage, de la répétition et une permutation aléatoire~\footnote{shuffle}. +Nous décrivons en détail le fonctionement de cette fonction dans la Figure~\ref{fig:aia-ovr}. +OVR CTRL duplique $N$ donée réel pour crée une nouvelle base de donée contenant $M$ lignes. +Quand $N$ est inférieur à $M$, chaque donée est vue plusieurs fois à chaque époque de l'entraînement. + +Nous observons empitiquelent que le modèle cible \textit{overfit} plus pour certaines valeurs de $N$. +Nous représentons cela sur la Figre~\ref{fig:tune_ovr}, sur le jeu Adult, pour 5000 point différent l'utilité et la qualité de de donnée synthétiqeus sont hautes (supérieur à $0,7$ de \textit{balanced accuracy}) tout en ateigant une MIA de $0,54$ ce qui indique une fuite de la qualité d'apartenance au jeu d'entraînement. +Nous choisisson donc 5000 donnée difféentes ($N=5000$) pour un base de donnée de taille 100000 ($M=100000$). + +\begin{figure} + \centering + \begin{subfigure}{0.45\linewidth} + \includegraphics[width=\textwidth]{synthetic/figure/method/overfit/quality.pdf} + \caption{Qualitée de donnée synthétiques.} + \end{subfigure} + \begin{subfigure}{0.45\linewidth} + \includegraphics[width=\textwidth]{synthetic/figure/method/overfit/utility.pdf} + \caption{Utilitée des données synthétiques.} + \end{subfigure} + \begin{subfigure}{0.45\linewidth} + \includegraphics[width=\textwidth]{synthetic/figure/method/overfit/mia.pdf} + \caption{Sensibilité à l'attaque MIA.} + \end{subfigure} + \begin{subfigure}{0.45\linewidth} + \includegraphics[width=\textwidth]{synthetic/figure/method/overfit/aia.pdf} + \caption{Sensibilité à l'attaque AIA.} + \end{subfigure} + \caption{Méthodolgie de recherche d'une niveau de répétition qui permette de satisfaire une haute utilitée et sensibilité à la MIA. + Nous utilisons un total de 100000 points. + Dans cet expericence nous utilisons uniquement le générateur CTGAN.} + + \label{fig:aia-tune_ovr} +\end{figure} +\subsection{Cheminement de données} +Dans cette section, ne décrivons comment les différentes étapes par lesquelle passent le données au trauvers de notre précédé experimentale. +La Figure~\ref{fig:synth-split} représene ce cheminement. +Nous commencons par les donnée réel que nous partageons en jeu d'entraînment ($m$) et jeu d'évaluiation ($\bar{m}$). +Le jeu d'entraînement commence par passer par la fonction OVR CTRL, ensuite il est utilisé pour entraînement de générateur. +Si le générateur est l'identitée, alors $m$ est aussi la sortie du générateur. +Nous utilisons cette sortie pour entraîner le target modèle. +Uniquement $\bar{m}$ est utilisé pour évaluer l'utilitée du target modèle. +Sur la Figure~\ref{fig:synth-split} nous avaons appele prédiction la sortie du target modèle évalue sur $\bar{m}$. + +Cette prédiction, en plus d'être utilisé pour le calcul de l'utilité, sert a construire la base de donnée qui sert à l'AIA. +Cela assure que le modèle de menace de l'attaque AIA décrit à la Section~\ref{sec:aia-tm}, c'est à dire que l'attaquant n'est que accès à des données qui n'ont pas été vus à l'entraînement. +Ensuite nous séparons le jeu de donnée AIA en évaluation et entraînement pour calculer la \textit{balanced accuracy} de cette attaque. + +Finally, we run the MIA represented in the bottom part of Figure~\ref{fig:split}. +In addition of prediction, the target model outputs the losses of $m$ and $\bar{m}$ which we use to build the MIA dataset. +Similarly to AIA, we split the MIA dataset to train and evaluate the MIA model. + +Each one of the split is repeated five times in a cross-validation setting. +\label{sec:data} +\begin{figure} +\centering +\input{synthetic/figure/tikz/data_split/split} + \caption{This figure presents the data splits and subsets used to compute results. + It is a representation of the whole methodology described in this sections. + The reader may start on the top left corner, with the real data. + The rectangle boxes represents functions where the inputs are incoming arrows and the outputs out comings arrows. + In the case of trainable functions such as machine learning models, we indicate that an input is the training data with the label "training". + We use a similar notation for evaluation. + } + \label{fig:split} +\end{figure} + +\subsection{Comparisons between synthetic and real data} +In Section~\ref{sec:res}, we compare metrics computed using two generators: the identity to try the pipeline with real data and a GAN to try the pipeline with synthetic data. +In each of the following experiments, when comparing results, every parameters are the same except for the generator used. +It allows us to attribute observed significative differences between metrics to solely the usage of synthetic or real data. + +We repeat every experiment with cross validation, hence utility results are computed five times and MIA and AIA results are computed 25 times. +We display the results in the form of boxplots and we decide if the gap between two boxplots is significant or not using an analysis of variance (anova). +In this test the null hypothesis is: The results from real and synthetic data have the same mean. +If the p-value of the Fisher test is less than 0.01 we reject the null hypothesis and conclude that using synthetic data over real data has an impact. diff --git a/synthetic/pdfcompress.sh b/synthetic/pdfcompress.sh new file mode 100644 index 0000000..54c3555 --- /dev/null +++ b/synthetic/pdfcompress.sh @@ -0,0 +1 @@ +gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=compressed_PDF_file.pdf $1 diff --git a/synthetic/problem.tex b/synthetic/problem.tex new file mode 100644 index 0000000..30aaa05 --- /dev/null +++ b/synthetic/problem.tex @@ -0,0 +1,13 @@ +\begin{figure} + \centering + \begin{subfigure}{0.35\linewidth} + \includegraphics[width=\textwidth]{figure/image1.png} + \caption{Training with raw data} + \end{subfigure} + \hspace{4mm} + \begin{subfigure}{0.58\linewidth} + \includegraphics[width=\textwidth]{figure/image2.png} + \caption{Training with synthetic data} + \end{subfigure} + \caption{Risk propagation of training a learning model with synthetic data instead of raw data.} +\end{figure} \ No newline at end of file diff --git a/synthetic/related.tex b/synthetic/related.tex new file mode 100644 index 0000000..207bdf4 --- /dev/null +++ b/synthetic/related.tex @@ -0,0 +1,38 @@ +The literature on the privacy of synthetic data focuses on a different yet related problem. +In our work, the synthetic data is not released to the public, it is used as a proxy in between the real data and the target model. +In contrary, the literature uses synthetic data as a way to release a dataset to third parties. +The goal of this endeavour is to circumvent legislation on personal data~\cite{bellovin2019privacy}. +Previous work shows that releasing synthetic data instead of the real data does not protect against re-identification nor attribute linkage~\cite{stadler2020synthetic}. + +Bellocin et all.~\cite{bellovin2019privacy} discuss the legal aspect of sharing synthetic data over sharing the real data. +They come to the conclusion that a court will not allow the disclosure of synthetic data because numerous examples show that inferring private attributes of the real data is possible. +They hint that using differential privacy may lead to legislation allowing synthetic data release. +For instance, Ping et all.~\cite{ping2017datasynthesizer} use the GreddyBayes algorithm for tabular data in which they introduce differential privacy. + +%This conclusion transfers to our work because we have shown that using synthetic data to train a model does not full protect againts privacy attack. +%Datasynthesizer: privacy preserving synthetic datasets~\cite{ping2017datasynthesizer}. +%Towards improving privacy of synthetic datasets~\cite{kuppa2021towards}. +%User-Driven Synthetic Dataset Generation with Quantifiable Differential Privacy~\cite{tai2023user}. + + +%Stadler et all~\cite{stadler2020synthetic} focus on releasing to third parties a genertad synthetic dataset instead of the real dataset. +%In countrary to our work where we consider that the generated synthetic dataset is not released but is used to train a machine learning model. +%The study two privacy risks: Reidentification via linkaged and attribute disclosure. +%Reidentification via linkage is somwhat similar to membership inference attack as this kind of attack aims at inferfing if a data record has been used to generated the synthetic dataset. +%Attribute disclosure is closer to attribute inference in the sense that an attacker aims to infer sensitive attribute of user's data. +%The main difference with Stadler et all and our work is that we add in between the synthetic dataset and the attacker a trained machine learning model and the attacker has only a black box acces to this model. +%In our setup, the synthetic dataset is not directly accessible to the attacker. +%The sensitive informations contained in the real dataset are filtred twice: by the generation process and then by the training of the target model. +%In Stadler et all, the sensitive informations are filterd only by the generation process. +% +%Stadler et all show that using synthetic data does not protect user's privacy against neither linkage nor attribute disclosure. +%Our conclusion is that using a synthetic dataset to train a machine learning model does not protect user's privacy against adversaries with black box access to this model. +%Hence Stadlr et all and our work are aligned in showing that synthetic datasets are not a guaranted protection to user's personal data. + +Jordon et all~\cite{jordon2021hide} state that generative approaches can be used to hide the membership status. +Their contribution consists in a data anonymisation challenge where with two track. +The first has to produce an algorithm that generates synthetic data that hides the membership status. +The second produces an algorithm that infers (i.e. an attack) the membership status using synthetic data generated from the algorithms of the first track. +Sadly, their results remains inconclusive because the participants of the first track submitted their work to closely to the deadline which did not leave enough time for the attacker to develop tailored attacks. + + diff --git a/synthetic/results.tex b/synthetic/results.tex new file mode 100644 index 0000000..ec3149a --- /dev/null +++ b/synthetic/results.tex @@ -0,0 +1,54 @@ +In this section we analyse the impact of using synthetic data instead of real data on MIA and AIA. +Section~\ref{sec:uti} presents the utility of the target. +This control factor allows us to assess that every model has learned some level of information and is not random guessing the label. + + +\subsection{Utility} +\label{sec:uti} + +\begin{figure} + \centering + \includegraphics[width=0.45\textwidth]{synthetic/figure/result/adult/utility.pdf} + \caption{Utility of the target model in terms of balanced accuracy evaluated on unseen data. + The "Real" label refers to a generator equal to identity, hence the synthetic data used to train the target model is the real data. + The "Synthetic" label refers to a CGAN generator, hence the synthetic data are sampled according to a distribution learned by the generator model. + In this case the target model is not trained on real date.} + \label{fig:utility} +\end{figure} +Using synthetic dataset degrades the utility of the predictor. +We present the balanced accuracy for both synthetic and real data in Figure~\ref{fig:utility}. + +Using synthetic data degrades significatively the utility of the target model by 5\% with an anova p-value of $1.23\times 10^{-5}$. +But with a minimum of 0.68 of balanced accuracy on synthetic data, we argue that the target model has learned a level of information that gives a meaningful result in terms of AIA and MIA. + +\subsection{Membership inference attack} +\begin{figure} + \centering + \includegraphics[width=0.45\textwidth]{synthetic/figure/result/adult/mia.pdf} + \caption{Success of the MIA in terms of balanced accuracy evaluated on the Train part of MIA dataset.} +\end{figure} +We observe a degradation of the balanced accuracy of the MIA of 30\% on average. +An anova p-value of $4.54\times 10^{-12}$ indicates the this difference is significative. +In addition we observe that using synthetic data over real data results in drop of balanced accuracy from 0.86 to 0.55. +We conclude that using synthetic data protects significantly the membership status of the majority of data records. + +But this result does not mean that the membership status is protected. +The remaining 5\% left is due to outliers in the dataset that can be identified by an attacker~\cite{carlini2022membershipinferenceattacksprinciples}. + +\subsection{Attribute inference attack} +\begin{figure} + \centering + \includegraphics[width=0.45\textwidth]{synthetic/figure/result/adult/aia.pdf} + \caption{Success of the AIA in terms of balanced accuracy evaluated on the Train part of AIA dataset. + The AIA dataset is made of points that have not been seen during training of the target model. + The target model does not use the sensitive attribute.} + + \label{fig:aia} +\end{figure} +Using synthetic dataset does not have an impact on the success of attribute inference attack. +We present in Figure~\ref{fig:aia} a comparison of AIA between real and synthetic data. + +With an anova p-value of $8.65\times 10^{-1}$ we observe that whether we use synthetic or real data does not impact attribute privacy inference. +In addition, with an attack balanced accuracy ranging from 0.52 to 0.54, we observe a slight but certain risk for attribute leakage. +Hence, we conclude that using synthetic data does not protect users against AIA. + diff --git a/synthetic/template/Conference-LaTeX-template_10-17-19/IEEEtran.cls b/synthetic/template/Conference-LaTeX-template_10-17-19/IEEEtran.cls new file mode 100644 index 0000000..8d2b1c6 --- /dev/null +++ b/synthetic/template/Conference-LaTeX-template_10-17-19/IEEEtran.cls @@ -0,0 +1,6347 @@ +%% +%% IEEEtran.cls 2015/08/26 version V1.8b +%% +%% This is the IEEEtran LaTeX class for authors of the Institute of +%% Electrical and Electronics Engineers (IEEE) Transactions journals and +%% conferences. +%% +%% Support sites: +%% http://www.michaelshell.org/tex/ieeetran/ +%% http://www.ctan.org/pkg/ieeetran +%% and +%% http://www.ieee.org/ +%% +%% Based on the original 1993 IEEEtran.cls, but with many bug fixes +%% and enhancements (from both JVH and MDS) over the 1996/7 version. +%% +%% +%% Contributors: +%% Gerry Murray (1993), Silvano Balemi (1993), +%% Jon Dixon (1996), Peter N"uchter (1996), +%% Juergen von Hagen (2000), and Michael Shell (2001-2014) +%% +%% +%% Copyright (c) 1993-2000 by Gerry Murray, Silvano Balemi, +%% Jon Dixon, Peter N"uchter, +%% Juergen von Hagen +%% and +%% Copyright (c) 2001-2015 by Michael Shell +%% +%% Current maintainer (V1.3 to V1.8b): Michael Shell +%% See: +%% http://www.michaelshell.org/ +%% for current contact information. +%% +%% Special thanks to Peter Wilson (CUA) and Donald Arseneau +%% for allowing the inclusion of the \@ifmtarg command +%% from their ifmtarg LaTeX package. +%% +%%************************************************************************* +%% Legal Notice: +%% This code is offered as-is without any warranty either expressed or +%% implied; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE! +%% User assumes all risk. +%% In no event shall the IEEE or any contributor to this code be liable for +%% any damages or losses, including, but not limited to, incidental, +%% consequential, or any other damages, resulting from the use or misuse +%% of any information contained here. +%% +%% All comments are the opinions of their respective authors and are not +%% necessarily endorsed by the IEEE. +%% +%% This work is distributed under the LaTeX Project Public License (LPPL) +%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used, +%% distributed and modified. A copy of the LPPL, version 1.3, is included +%% in the base LaTeX documentation of all distributions of LaTeX released +%% 2003/12/01 or later. +%% Retain all contribution notices and credits. +%% ** Modified files should be clearly indicated as such, including ** +%% ** renaming them and changing author support contact information. ** +%% +%% File list of work: IEEEtran.cls, IEEEtran_HOWTO.pdf, bare_adv.tex, +%% bare_conf.tex, bare_jrnl.tex, bare_conf_compsoc.tex, +%% bare_jrnl_compsoc.tex +%% +%% Major changes to the user interface should be indicated by an +%% increase in the version numbers. If a version is a beta, it will +%% be indicated with a BETA suffix, i.e., 1.4 BETA. +%% Small changes can be indicated by appending letters to the version +%% such as "IEEEtran_v14a.cls". +%% In all cases, \Providesclass, any \typeout messages to the user, +%% \IEEEtransversionmajor and \IEEEtransversionminor must reflect the +%% correct version information. +%% The changes should also be documented via source comments. +%%************************************************************************* +%% +% +% Available class options +% e.g., \documentclass[10pt,conference]{IEEEtran} +% +% *** choose only one from each category *** +% +% 9pt, 10pt, 11pt, 12pt +% Sets normal font size. The default is 10pt. +% +% conference, journal, technote, peerreview, peerreviewca +% determines format mode - conference papers, journal papers, +% correspondence papers (technotes), or peer review papers. The user +% should also select 9pt when using technote. peerreview is like +% journal mode, but provides for a single-column "cover" title page for +% anonymous peer review. The paper title (without the author names) is +% repeated at the top of the page after the cover page. For peer review +% papers, the \IEEEpeerreviewmaketitle command must be executed (will +% automatically be ignored for non-peerreview modes) at the place the +% cover page is to end, usually just after the abstract (keywords are +% not normally used with peer review papers). peerreviewca is like +% peerreview, but allows the author names to be entered and formatted +% as with conference mode so that author affiliation and contact +% information can be easily seen on the cover page. +% The default is journal. +% +% draft, draftcls, draftclsnofoot, final +% determines if paper is formatted as a widely spaced draft (for +% handwritten editor comments) or as a properly typeset final version. +% draftcls restricts draft mode to the class file while all other LaTeX +% packages (i.e., \usepackage{graphicx}) will behave as final - allows +% for a draft paper with visible figures, etc. draftclsnofoot is like +% draftcls, but does not display the date and the word "DRAFT" at the foot +% of the pages. If using one of the draft modes, the user will probably +% also want to select onecolumn. +% The default is final. +% +% letterpaper, a4paper, cspaper +% determines paper size: 8.5in X 11in, 210mm X 297mm or 7.875in X 10.75in. +% Changing the paper size in the standard journal and conference modes +% will not alter the typesetting of the document - only the margins will +% be affected. In particular, documents using the a4paper option will +% have reduced side margins (A4 is narrower than US letter) and a longer +% bottom margin (A4 is longer than US letter). For both cases, the top +% margins will be the same and the text will be horizontally centered. +% For the compsoc conference and draft modes, it is the margins that will +% remain constant, and thus the text area size will vary, with changes in +% the paper size. +% The cspaper option is the special ``trim'' paper size (7.875in x 10.75in) +% used in the actual publication of Computer Society journals. Under +% compsoc journal mode, this option does not alter the typesetting of the +% document. Authors should invoke the cspaper option only if requested to +% do so by the editors of the specific journal they are submitting to. +% For final submission to the IEEE, authors should generally use US letter +% (8.5 X 11in) paper unless otherwise instructed. Note that authors should +% ensure that all post-processing (ps, pdf, etc.) uses the same paper +% specificiation as the .tex document. Problems here are by far the number +% one reason for incorrect margins. IEEEtran will automatically set the +% default paper size under pdflatex (without requiring any change to +% pdftex.cfg), so this issue is more important to dvips users. Fix +% config.ps, config.pdf, or ~/.dvipsrc for dvips, or use the +% dvips -t papersize option instead as needed. For the cspaper option, +% the corresponding dvips paper name is "ieeecs". +% See the testflow documentation +% http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/testflow +% for more details on dvips paper size configuration. +% The default is letterpaper. +% +% oneside, twoside +% determines if layout follows single sided or two sided (duplex) +% printing. The only notable change is with the headings at the top of +% the pages. +% The default is oneside. +% +% onecolumn, twocolumn +% determines if text is organized into one or two columns per page. One +% column mode is usually used only with draft papers. +% The default is twocolumn. +% +% comsoc, compsoc, transmag +% Use the format of the IEEE Communications Society, IEEE Computer Society +% or IEEE Transactions on Magnetics, respectively. +% +% romanappendices +% Use the "Appendix I" convention when numbering appendices. IEEEtran.cls +% now defaults to Alpha "Appendix A" convention - the opposite of what +% v1.6b and earlier did. +% +% captionsoff +% disables the display of the figure/table captions. Some IEEE journals +% request that captions be removed and figures/tables be put on pages +% of their own at the end of an initial paper submission. The endfloat +% package can be used with this class option to achieve this format. +% +% nofonttune +% turns off tuning of the font interword spacing. Maybe useful to those +% not using the standard Times fonts or for those who have already "tuned" +% their fonts. +% The default is to enable IEEEtran to tune font parameters. +% +% +%---------- +% Available CLASSINPUTs provided (all are macros unless otherwise noted): +% \CLASSINPUTbaselinestretch +% \CLASSINPUTinnersidemargin +% \CLASSINPUToutersidemargin +% \CLASSINPUTtoptextmargin +% \CLASSINPUTbottomtextmargin +% +% Available CLASSINFOs provided: +% \ifCLASSINFOpdf (TeX if conditional) +% \CLASSINFOpaperwidth (macro) +% \CLASSINFOpaperheight (macro) +% \CLASSINFOnormalsizebaselineskip (length) +% \CLASSINFOnormalsizeunitybaselineskip (length) +% +% Available CLASSOPTIONs provided: +% all class option flags (TeX if conditionals) unless otherwise noted, +% e.g., \ifCLASSOPTIONcaptionsoff +% point size options provided as a single macro: +% \CLASSOPTIONpt +% which will be defined as 9, 10, 11, or 12 depending on the document's +% normalsize point size. +% also, class option peerreviewca implies the use of class option peerreview +% and classoption draft implies the use of class option draftcls + + + + + +\ProvidesClass{IEEEtran}[2015/08/26 V1.8b by Michael Shell] +\typeout{-- See the "IEEEtran_HOWTO" manual for usage information.} +\typeout{-- http://www.michaelshell.org/tex/ieeetran/} +\NeedsTeXFormat{LaTeX2e} + +% IEEEtran.cls version numbers, provided as of V1.3 +% These values serve as a way a .tex file can +% determine if the new features are provided. +% The version number of this IEEEtrans.cls can be obtained from +% these values. i.e., V1.4 +% KEEP THESE AS INTEGERS! i.e., NO {4a} or anything like that- +% (no need to enumerate "a" minor changes here) +\def\IEEEtransversionmajor{1} +\def\IEEEtransversionminor{8} + + +% hook to allow easy changeover to IEEEtran.cls/tools.sty error reporting +\def\@IEEEclspkgerror{\ClassError{IEEEtran}} + + +% These do nothing, but provide them like in article.cls +\newif\if@restonecol +\newif\if@titlepage + + +% class option conditionals +\newif\ifCLASSOPTIONonecolumn \CLASSOPTIONonecolumnfalse +\newif\ifCLASSOPTIONtwocolumn \CLASSOPTIONtwocolumntrue + +\newif\ifCLASSOPTIONoneside \CLASSOPTIONonesidetrue +\newif\ifCLASSOPTIONtwoside \CLASSOPTIONtwosidefalse + +\newif\ifCLASSOPTIONfinal \CLASSOPTIONfinaltrue +\newif\ifCLASSOPTIONdraft \CLASSOPTIONdraftfalse +\newif\ifCLASSOPTIONdraftcls \CLASSOPTIONdraftclsfalse +\newif\ifCLASSOPTIONdraftclsnofoot \CLASSOPTIONdraftclsnofootfalse + +\newif\ifCLASSOPTIONpeerreview \CLASSOPTIONpeerreviewfalse +\newif\ifCLASSOPTIONpeerreviewca \CLASSOPTIONpeerreviewcafalse + +\newif\ifCLASSOPTIONjournal \CLASSOPTIONjournaltrue +\newif\ifCLASSOPTIONconference \CLASSOPTIONconferencefalse +\newif\ifCLASSOPTIONtechnote \CLASSOPTIONtechnotefalse + +\newif\ifCLASSOPTIONnofonttune \CLASSOPTIONnofonttunefalse + +\newif\ifCLASSOPTIONcaptionsoff \CLASSOPTIONcaptionsofffalse + +\newif\ifCLASSOPTIONcomsoc \CLASSOPTIONcomsocfalse +\newif\ifCLASSOPTIONcompsoc \CLASSOPTIONcompsocfalse +\newif\ifCLASSOPTIONtransmag \CLASSOPTIONtransmagfalse + +\newif\ifCLASSOPTIONromanappendices \CLASSOPTIONromanappendicesfalse + + +% class info conditionals + +% indicates if pdf (via pdflatex) output +\newif\ifCLASSINFOpdf \CLASSINFOpdffalse + + +% V1.6b internal flag to show if using a4paper +\newif\if@IEEEusingAfourpaper \@IEEEusingAfourpaperfalse +% V1.6b internal flag to show if using cspaper +\newif\if@IEEEusingcspaper \@IEEEusingcspaperfalse + + +% IEEEtran class scratch pad registers +% dimen +\newdimen\@IEEEtrantmpdimenA +\newdimen\@IEEEtrantmpdimenB +\newdimen\@IEEEtrantmpdimenC +% count +\newcount\@IEEEtrantmpcountA +\newcount\@IEEEtrantmpcountB +\newcount\@IEEEtrantmpcountC +% token list +\newtoks\@IEEEtrantmptoksA + +% we use \CLASSOPTIONpt so that we can ID the point size (even for 9pt docs) +% as well as LaTeX's \@ptsize to retain some compatability with some +% external packages +\def\@ptsize{0} +% LaTeX does not support 9pt, so we set \@ptsize to 0 - same as that of 10pt +\DeclareOption{9pt}{\def\CLASSOPTIONpt{9}\def\@ptsize{0}} +\DeclareOption{10pt}{\def\CLASSOPTIONpt{10}\def\@ptsize{0}} +\DeclareOption{11pt}{\def\CLASSOPTIONpt{11}\def\@ptsize{1}} +\DeclareOption{12pt}{\def\CLASSOPTIONpt{12}\def\@ptsize{2}} + + + +\DeclareOption{letterpaper}{\setlength{\paperwidth}{8.5in}% + \setlength{\paperheight}{11in}% + \@IEEEusingAfourpaperfalse + \@IEEEusingcspaperfalse + \def\CLASSOPTIONpaper{letter}% + \def\CLASSINFOpaperwidth{8.5in}% + \def\CLASSINFOpaperheight{11in}} + + +\DeclareOption{a4paper}{\setlength{\paperwidth}{210mm}% + \setlength{\paperheight}{297mm}% + \@IEEEusingAfourpapertrue + \@IEEEusingcspaperfalse + \def\CLASSOPTIONpaper{a4}% + \def\CLASSINFOpaperwidth{210mm}% + \def\CLASSINFOpaperheight{297mm}} + +% special paper option for compsoc journals +\DeclareOption{cspaper}{\setlength{\paperwidth}{7.875in}% + \setlength{\paperheight}{10.75in}% + \@IEEEusingcspapertrue + \@IEEEusingAfourpaperfalse + \def\CLASSOPTIONpaper{ieeecs}% + \def\CLASSINFOpaperwidth{7.875in}% + \def\CLASSINFOpaperheight{10.75in}} + +\DeclareOption{oneside}{\@twosidefalse\@mparswitchfalse + \CLASSOPTIONonesidetrue\CLASSOPTIONtwosidefalse} +\DeclareOption{twoside}{\@twosidetrue\@mparswitchtrue + \CLASSOPTIONtwosidetrue\CLASSOPTIONonesidefalse} + +\DeclareOption{onecolumn}{\CLASSOPTIONonecolumntrue\CLASSOPTIONtwocolumnfalse} +\DeclareOption{twocolumn}{\CLASSOPTIONtwocolumntrue\CLASSOPTIONonecolumnfalse} + +% If the user selects draft, then this class AND any packages +% will go into draft mode. +\DeclareOption{draft}{\CLASSOPTIONdrafttrue\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofootfalse} +% draftcls is for a draft mode which will not affect any packages +% used by the document. +\DeclareOption{draftcls}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofootfalse} +% draftclsnofoot is like draftcls, but without the footer. +\DeclareOption{draftclsnofoot}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofoottrue} +\DeclareOption{final}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclsfalse + \CLASSOPTIONdraftclsnofootfalse} + +\DeclareOption{journal}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournaltrue\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{conference}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencetrue\CLASSOPTIONtechnotefalse} + +\DeclareOption{technote}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotetrue} + +\DeclareOption{peerreview}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{peerreviewca}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcatrue + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{nofonttune}{\CLASSOPTIONnofonttunetrue} + +\DeclareOption{captionsoff}{\CLASSOPTIONcaptionsofftrue} + +\DeclareOption{comsoc}{\CLASSOPTIONcomsoctrue\CLASSOPTIONcompsocfalse\CLASSOPTIONtransmagfalse} + +\DeclareOption{compsoc}{\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsoctrue\CLASSOPTIONtransmagfalse} + +\DeclareOption{transmag}{\CLASSOPTIONtransmagtrue\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsocfalse} + +\DeclareOption{romanappendices}{\CLASSOPTIONromanappendicestrue} + + +% default to US letter paper, 10pt, twocolumn, one sided, final, journal +\ExecuteOptions{letterpaper,10pt,twocolumn,oneside,final,journal} +% overrride these defaults per user requests +\ProcessOptions + + + +%% -- Command Argument Scanning Support Functions -- + +% Sets the category codes for punctuation to their normal values. +% For local use with argument scanning. +\def\IEEEnormalcatcodespunct{\catcode`\!=12 \catcode`\,=12 \catcode`\:=12 +\catcode`\;=12 \catcode`\`=12 \catcode`\'=12 \catcode`\"=12 \catcode`\.=12 +\catcode`\/=12 \catcode`\?=12 \catcode`\*=12 \catcode`\+=12 \catcode`\-=12 +\catcode`\<=12 \catcode`\>=12 \catcode`\(=12 \catcode`\)=12 \catcode`\[=12 +\catcode`\]=12 \catcode`\==12 \catcode`\|=12} +% Sets the category codes for numbers to their normal values. +% For local use with argument scanning. +\def\IEEEnormalcatcodesnum{\catcode`\0=12 \catcode`\1=12 \catcode`\2=12 +\catcode`\3=12 \catcode`\4=12 \catcode`\5=12 \catcode`\6=12 \catcode`\7=12 +\catcode`\8=12 \catcode`\9=12} +% combined action of \IEEEnormalcatcodespunct and \IEEEnormalcatcodesnum +\def\IEEEnormalcatcodes{\IEEEnormalcatcodespunct\IEEEnormalcatcodesnum} + + +% usage: \@IEEEextracttoken*{} +% \@IEEEextracttoken fully expands its argument (which it then stores in +% \@IEEEextracttokenarg) via \edef and then the meaning of the first +% nonbrace (but including the empty group) token found is assigned via \let +% to \@IEEEextractedtoken as well as stored in the macro +% \@IEEEextractedtokenmacro. Tokens that would otherwise be discarded during +% the acquisition of the first are stored in \@IEEEextractedtokensdiscarded, +% however their original relative brace nesting depths are not guaranteed to +% be preserved. +% If the argument is empty, or if a first nonbrace token does not exist (or +% is an empty group), \@IEEEextractedtoken will be \relax and +% \@IEEEextractedtokenmacro and \@IEEEextractedtokensdiscarded will be empty. +% +% For example: +% \@IEEEextracttoken{{{ab}{cd}}{{ef}g}} +% results in: +% +% \@IEEEextracttokenarg ==> a macro containing {{ab}{cd}}{{ef}g} +% \@IEEEextractedtoken ==> the letter a +% \@IEEEextractedtokenmacro ==> a macro containing a +% \@IEEEextractedtokensdiscarded ==> a macro containing bcd{ef}g +% +% the *-star form, \@IEEEextracttoken*, does not expand its argument +% contents during processing. +\def\@IEEEextracttoken{\@ifstar{\let\@IEEEextracttokendef=\def\@@IEEEextracttoken}{\let\@IEEEextracttokendef=\edef\@@IEEEextracttoken}} + +\def\@@IEEEextracttoken#1{\@IEEEextracttokendef\@IEEEextracttokenarg{#1}\relax +\def\@IEEEextractedtokensdiscarded{}\relax % initialize to empty +% if the macro is unchanged after being acquired as a single undelimited argument +% with anything after it being stripped off as a delimited argument +% we know we have one token without any enclosing braces. loop until this is true. +\let\@IEEEextracttokencurgroup\@IEEEextracttokenarg +\loop + % trap case of an empty argument as this would cause a problem with + % \@@@IEEEextracttoken's first (nondelimited) argument acquisition + \ifx\@IEEEextracttokencurgroup\@empty + \def\@IEEEextractedtokenmacro{}\relax + \else + \expandafter\@@@IEEEextracttoken\@IEEEextracttokencurgroup\@IEEEgeneralsequenceDELIMITER\relax + \fi + \ifx\@IEEEextractedtokenmacro\@IEEEextracttokencurgroup + \else + \let\@IEEEextracttokencurgroup=\@IEEEextractedtokenmacro +\repeat +% we can safely do a \let= here because there should be at most one token +% the relax is needed to handle the case of no token found +\expandafter\let\expandafter\@IEEEextractedtoken\@IEEEextractedtokenmacro\relax} + +\def\@@@IEEEextracttoken#1#2\@IEEEgeneralsequenceDELIMITER{\def\@IEEEextractedtokenmacro{#1}\relax +\def\@@IEEEextractedtokensdiscarded{#2}\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter +\@IEEEextractedtokensdiscarded\expandafter\expandafter\expandafter +{\expandafter\@@IEEEextractedtokensdiscarded\@IEEEextractedtokensdiscarded}} +%% +%% -- End of Command Argument Scanning Support Functions -- + + + +% Computer Society conditional execution command +\long\def\@IEEEcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\relax#1\relax\fi\relax} +% inverse +\long\def\@IEEEnotcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\else\relax#1\relax\fi\relax} +% compsoc conference +\long\def\@IEEEcompsocconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\relax#1\relax\fi\fi\relax} +% compsoc not conference +\long\def\@IEEEcompsocnotconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\else\relax#1\relax\fi\fi\relax} + + +% comsoc verify that newtxmath, mtpro2, mt11p or mathtime has been loaded +\def\@IEEEcomsocverifymathfont{\typeout{-- Verifying Times compatible math font.}\relax + \@ifpackageloaded{newtxmath}{\typeout{-- newtxmath loaded, OK.}}{\@@IEEEcomsocverifymathfont}} +\def\@@IEEEcomsocverifymathfont{\@ifpackageloaded{mtpro2}{\typeout{-- mtpro2 loaded, OK.}}{\@@@IEEEcomsocverifymathfont}} +\def\@@@IEEEcomsocverifymathfont{\@ifpackageloaded{mt11p}{\typeout{-- mt11p2 loaded, OK.}}{\@@@@IEEEcomsocverifymathfont}} +\def\@@@@IEEEcomsocverifymathfont{\@ifpackageloaded{mathtime}{\typeout{-- mathtime loaded, OK.}}{\@IEEEcomsocenforcemathfont}} + +% comsoc, if a Times math font was not loaded by user, enforce it +\def\@IEEEcomsocenforcemathfont{\typeout{** Times compatible math font not found, forcing.}\relax +\IfFileExists{newtxmath.sty}{\typeout{-- Found newtxmath, loading.}\RequirePackage{newtxmath}}{\@@IEEEcomsocenforcemathfont}} +\def\@@IEEEcomsocenforcemathfont{\IfFileExists{mtpro2.sty}{\typeout{-- Found mtpro2, loading.}\RequirePackage{mtpro2}}{\@@@IEEEcomsocenforcemathfont}} +\def\@@@IEEEcomsocenforcemathfont{\IfFileExists{mt11p.sty}{\typeout{-- Found mt11p, loading.}\RequirePackage{mt11p}}{\@@@@IEEEcomsocenforcemathfont}} +\def\@@@@IEEEcomsocenforcemathfont{\IfFileExists{mathtime.sty}{\typeout{-- Found mathtime, loading.}\RequirePackage{mathtime}}{\@@@@@IEEEcomsocenforcemathfont}} +% if no acceptable Times math font package found, error with newtxmath requirement +\def\@@@@@IEEEcomsocenforcemathfont{\typeout{** No Times compatible math font package found. newtxmath is required.}\RequirePackage{newtxmath}} + + +\ifCLASSOPTIONcomsoc + % ensure that if newtxmath is used, the cmintegrals option is also invoked + \PassOptionsToPackage{cmintegrals}{newtxmath} + % comsoc requires a Times like math font + % ensure this requirement is satisfied at document start + \AtBeginDocument{\@IEEEcomsocverifymathfont} +\fi + + + +% The IEEE uses Times Roman font, so we'll default to Times. +% These three commands make up the entire times.sty package. +\renewcommand{\sfdefault}{phv} +\renewcommand{\rmdefault}{ptm} +\renewcommand{\ttdefault}{pcr} + +% V1.7 compsoc nonconference papers, use Palatino/Palladio as the main text font, +% not Times Roman. +\@IEEEcompsocnotconfonly{\renewcommand{\rmdefault}{ppl}} + +% enable the selected main text font +\normalfont\selectfont + + +\ifCLASSOPTIONcomsoc + \typeout{-- Using IEEE Communications Society mode.} +\fi + +\ifCLASSOPTIONcompsoc + \typeout{-- Using IEEE Computer Society mode.} +\fi + + +% V1.7 conference notice message hook +\def\@IEEEconsolenoticeconference{\typeout{}% +\typeout{** Conference Paper **}% +\typeout{Before submitting the final camera ready copy, remember to:}% +\typeout{}% +\typeout{ 1. Manually equalize the lengths of two columns on the last page}% +\typeout{ of your paper;}% +\typeout{}% +\typeout{ 2. Ensure that any PostScript and/or PDF output post-processing}% +\typeout{ uses only Type 1 fonts and that every step in the generation}% +\typeout{ process uses the appropriate paper size.}% +\typeout{}} + + +% we can send console reminder messages to the user here +\AtEndDocument{\ifCLASSOPTIONconference\@IEEEconsolenoticeconference\fi} + + +% warn about the use of single column other than for draft mode +\ifCLASSOPTIONtwocolumn\else% + \ifCLASSOPTIONdraftcls\else% + \typeout{** ATTENTION: Single column mode is not typically used with IEEE publications.}% + \fi% +\fi + + +% V1.7 improved paper size setting code. +% Set pdfpage and dvips paper sizes. Conditional tests are similar to that +% of ifpdf.sty. Retain within {} to ensure tested macros are never altered, +% even if only effect is to set them to \relax. +% if \pdfoutput is undefined or equal to relax, output a dvips special +{\@ifundefined{pdfoutput}{\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}}{% +% pdfoutput is defined and not equal to \relax +% check for pdfpageheight existence just in case someone sets pdfoutput +% under non-pdflatex. If exists, set them regardless of value of \pdfoutput. +\@ifundefined{pdfpageheight}{\relax}{\global\pdfpagewidth\paperwidth +\global\pdfpageheight\paperheight}% +% if using \pdfoutput=0 under pdflatex, send dvips papersize special +\ifcase\pdfoutput +\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}% +\else +% we are using pdf output, set CLASSINFOpdf flag +\global\CLASSINFOpdftrue +\fi}} + +% let the user know the selected papersize +\typeout{-- Using \CLASSINFOpaperwidth\space x \CLASSINFOpaperheight\space +(\CLASSOPTIONpaper)\space paper.} + +\ifCLASSINFOpdf +\typeout{-- Using PDF output.} +\else +\typeout{-- Using DVI output.} +\fi + + +% The idea hinted here is for LaTeX to generate markleft{} and markright{} +% automatically for you after you enter \author{}, \journal{}, +% \journaldate{}, journalvol{}, \journalnum{}, etc. +% However, there may be some backward compatibility issues here as +% well as some special applications for IEEEtran.cls and special issues +% that may require the flexible \markleft{}, \markright{} and/or \markboth{}. +% We'll leave this as an open future suggestion. +%\newcommand{\journal}[1]{\def\@journal{#1}} +%\def\@journal{} + + + +% pointsize values +% used with ifx to determine the document's normal size +\def\@IEEEptsizenine{9} +\def\@IEEEptsizeten{10} +\def\@IEEEptsizeeleven{11} +\def\@IEEEptsizetwelve{12} + + + +% FONT DEFINITIONS (No sizexx.clo file needed) +% V1.6 revised font sizes, displayskip values and +% revised normalsize baselineskip to reduce underfull vbox problems +% on the 58pc = 696pt = 9.5in text height we want +% normalsize #lines/column baselineskip (aka leading) +% 9pt 63 11.0476pt (truncated down) +% 10pt 58 12pt (exact) +% 11pt 52 13.3846pt (truncated down) +% 12pt 50 13.92pt (exact) +% + +% we need to store the nominal baselineskip for the given font size +% in case baselinestretch ever changes. +% this is a dimen, so it will not hold stretch or shrink +\newdimen\@IEEEnormalsizeunitybaselineskip +\@IEEEnormalsizeunitybaselineskip\baselineskip + + + +%% ******* WARNING! ******* +%% +%% Authors should not alter font sizes, baselineskip ("leading"), +%% margins or other spacing values in an attempt to squeeze more +%% material on each page. +%% +%% The IEEE's own typesetting software will restore the correct +%% values when re-typesetting/proofing the submitted document, +%% possibly resulting in unexpected article over length charges. +%% +%% ******* WARNING! ******* + + +% 9pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\typeout{-- This is a 9 point document.} +\def\normalsize{\@setfontsize{\normalsize}{9}{11.0476pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.0476pt} +\normalsize +\abovedisplayskip 1.5ex plus 3pt minus 1pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 3pt +\belowdisplayshortskip 1.5ex plus 3pt minus 1pt +\def\small{\@setfontsize{\small}{8.5}{10pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}} +\def\tiny{\@setfontsize{\tiny}{5}{6pt}} +% sublargesize is the same as large - 10pt +\def\sublargesize{\@setfontsize{\sublargesize}{10}{12pt}} +\def\large{\@setfontsize{\large}{10}{12pt}} +\def\Large{\@setfontsize{\Large}{12}{14pt}} +\def\LARGE{\@setfontsize{\LARGE}{14}{17pt}} +\def\huge{\@setfontsize{\huge}{17}{20pt}} +\def\Huge{\@setfontsize{\Huge}{20}{24pt}} +\fi +% +% 10pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\typeout{-- This is a 10 point document.} +\def\normalsize{\@setfontsize{\normalsize}{10}{12.00pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{12pt} +\normalsize +\abovedisplayskip 1.5ex plus 4pt minus 2pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4pt +\belowdisplayshortskip 1.5ex plus 4pt minus 2pt +\def\small{\@setfontsize{\small}{9}{10pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}} +\def\tiny{\@setfontsize{\tiny}{5}{6pt}} +% sublargesize is a tad smaller than large - 11pt +\def\sublargesize{\@setfontsize{\sublargesize}{11}{13.4pt}} +\def\large{\@setfontsize{\large}{12}{14pt}} +\def\Large{\@setfontsize{\Large}{14}{17pt}} +\def\LARGE{\@setfontsize{\LARGE}{17}{20pt}} +\def\huge{\@setfontsize{\huge}{20}{24pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi +% +% 11pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\typeout{-- This is an 11 point document.} +\def\normalsize{\@setfontsize{\normalsize}{11}{13.3846pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.3846pt} +\normalsize +\abovedisplayskip 1.5ex plus 5pt minus 3pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5pt +\belowdisplayshortskip 1.5ex plus 5pt minus 3pt +\def\small{\@setfontsize{\small}{10}{12pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}} +\def\tiny{\@setfontsize{\tiny}{6}{7pt}} +% sublargesize is the same as large - 12pt +\def\sublargesize{\@setfontsize{\sublargesize}{12}{14pt}} +\def\large{\@setfontsize{\large}{12}{14pt}} +\def\Large{\@setfontsize{\Large}{14}{17pt}} +\def\LARGE{\@setfontsize{\LARGE}{17}{20pt}} +\def\huge{\@setfontsize{\huge}{20}{24pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi +% +% 12pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\typeout{-- This is a 12 point document.} +\def\normalsize{\@setfontsize{\normalsize}{12}{13.92pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.92pt} +\normalsize +\abovedisplayskip 1.5ex plus 6pt minus 4pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6pt +\belowdisplayshortskip 1.5ex plus 6pt minus 4pt +\def\small{\@setfontsize{\small}{10}{12pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}} +\def\tiny{\@setfontsize{\tiny}{6}{7pt}} +% sublargesize is the same as large - 14pt +\def\sublargesize{\@setfontsize{\sublargesize}{14}{17pt}} +\def\large{\@setfontsize{\large}{14}{17pt}} +\def\Large{\@setfontsize{\Large}{17}{20pt}} +\def\LARGE{\@setfontsize{\LARGE}{20}{24pt}} +\def\huge{\@setfontsize{\huge}{22}{26pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi + + + +% V1.8a compsoc font sizes +% compsoc font sizes use bp "Postscript" point units (1/72in) +% rather than the traditional pt (1/72.27) +\ifCLASSOPTIONcompsoc +% -- compsoc defaults -- +% ** will override some of these values later ** +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{11bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\def\small{\@setfontsize{\small}{8.5bp}{10bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{8bp}{9bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{7bp}{8bp}} +\def\tiny{\@setfontsize{\tiny}{5bp}{6bp}} +% sublargesize is the same as large - 10bp +\def\sublargesize{\@setfontsize{\sublargesize}{10bp}{12bp}} +\def\large{\@setfontsize{\large}{10bp}{12bp}} +\def\Large{\@setfontsize{\Large}{12bp}{14bp}} +\def\LARGE{\@setfontsize{\LARGE}{14bp}{17bp}} +\def\huge{\@setfontsize{\huge}{17bp}{20bp}} +\def\Huge{\@setfontsize{\Huge}{20bp}{24bp}} +\fi +% +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\def\normalsize{\@setfontsize{\normalsize}{10bp}{12bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{12bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\def\small{\@setfontsize{\small}{9bp}{10bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{8bp}{9bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{7bp}{8bp}} +\def\tiny{\@setfontsize{\tiny}{5bp}{6bp}} +% sublargesize is a tad smaller than large - 11bp +\def\sublargesize{\@setfontsize{\sublargesize}{11bp}{13.5bp}} +\def\large{\@setfontsize{\large}{12bp}{14bp}} +\def\Large{\@setfontsize{\Large}{14bp}{17bp}} +\def\LARGE{\@setfontsize{\LARGE}{17bp}{20bp}} +\def\huge{\@setfontsize{\huge}{20bp}{24bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.5bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.5bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\def\small{\@setfontsize{\small}{10bp}{12bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{9bp}{10.5bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{8bp}{9bp}} +\def\tiny{\@setfontsize{\tiny}{6bp}{7bp}} +% sublargesize is the same as large - 12bp +\def\sublargesize{\@setfontsize{\sublargesize}{12bp}{14bp}} +\def\large{\@setfontsize{\large}{12bp}{14bp}} +\def\Large{\@setfontsize{\Large}{14bp}{17bp}} +\def\LARGE{\@setfontsize{\LARGE}{17bp}{20bp}} +\def\huge{\@setfontsize{\huge}{20bp}{24bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14bp}}% +\setlength{\@IEEEnormalsizeunitybaselineskip}{14bp}% +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\def\small{\@setfontsize{\small}{10bp}{12bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{9bp}{10.5bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{8bp}{9bp}} +\def\tiny{\@setfontsize{\tiny}{6bp}{7bp}} +% sublargesize is the same as large - 14bp +\def\sublargesize{\@setfontsize{\sublargesize}{14bp}{17bp}} +\def\large{\@setfontsize{\large}{14bp}{17bp}} +\def\Large{\@setfontsize{\Large}{17bp}{20bp}} +\def\LARGE{\@setfontsize{\LARGE}{20bp}{24bp}} +\def\huge{\@setfontsize{\huge}{22bp}{26bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% -- override defaults: compsoc journals use special normalsizes -- +\ifCLASSOPTIONconference +% +% compsoc conferences +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{10.8bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{10.8bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\fi +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\def\normalsize{\@setfontsize{\normalsize}{10bp}{11.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\fi +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\fi +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14.4bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{14.4bp} +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\fi +% +% compsoc nonconferences +\else +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{10.8bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{10.8bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\fi +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +% the official spec is 9.5bp with 11.4bp leading for 10pt, +% but measurements of proofs suggest upto 11.723bp leading +% here we'll use 11.54bp which gives 61 lines per column +% with the standard compsoc margins +\def\normalsize{\@setfontsize{\normalsize}{9.5bp}{11.54bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.54bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\fi +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\fi +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14.4bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{14.4bp} +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\fi +\fi\fi + + + + +% V1.6 The Computer Modern Fonts will issue a substitution warning for +% 24pt titles (24.88pt is used instead, but the default and correct +% Times font will scale exactly as needed) increase the substitution +% tolerance to turn off this warning. +% +% V1.8a, the compsoc bp font sizes can also cause bogus font substitution +% warnings with footnote or scriptsize math and the $\bullet$ itemized +% list of \IEEEcompsocitemizethanks. So, increase this to 1.5pt or more. +\def\fontsubfuzz{1.7bp} + + +% warn the user in case they forget to use the 9pt option with +% technote +\ifCLASSOPTIONtechnote% + \ifx\CLASSOPTIONpt\@IEEEptsizenine\else% + \typeout{** ATTENTION: Technotes are normally 9pt documents.}% + \fi% +\fi + + +% V1.7 +% Improved \textunderscore to provide a much better fake _ when used with +% OT1 encoding. Under OT1, detect use of pcr or cmtt \ttfamily and use +% available true _ glyph for those two typewriter fonts. +\def\@IEEEstringptm{ptm} % Times Roman family +\def\@IEEEstringppl{ppl} % Palatino Roman family +\def\@IEEEstringphv{phv} % Helvetica Sans Serif family +\def\@IEEEstringpcr{pcr} % Courier typewriter family +\def\@IEEEstringcmtt{cmtt} % Computer Modern typewriter family +\DeclareTextCommandDefault{\textunderscore}{\leavevmode +\ifx\f@family\@IEEEstringpcr\string_\else +\ifx\f@family\@IEEEstringcmtt\string_\else +\ifx\f@family\@IEEEstringptm\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else +\ifx\f@family\@IEEEstringppl\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else +\ifx\f@family\@IEEEstringphv\kern -0.03em\vbox{\hrule\@width 0.62em\@height 0.52pt\kern -0.33ex}\kern -0.03em\else +\kern 0.09em\vbox{\hrule\@width 0.6em\@height 0.44pt\kern -0.63pt\kern -0.42ex}\kern 0.09em\fi\fi\fi\fi\fi\relax} + + + + +% set the default \baselinestretch +\def\baselinestretch{1} +\ifCLASSOPTIONdraftcls + \def\baselinestretch{1.5}% default baselinestretch for draft modes +\fi + + +% process CLASSINPUT baselinestretch +\ifx\CLASSINPUTbaselinestretch\@IEEEundefined +\else + \edef\baselinestretch{\CLASSINPUTbaselinestretch} % user CLASSINPUT override + \typeout{** ATTENTION: Overriding \string\baselinestretch\space to + \baselinestretch\space via \string\CLASSINPUT.} +\fi + +\small\normalsize % make \baselinestretch take affect + + + + +% store the normalsize baselineskip +\newdimen\CLASSINFOnormalsizebaselineskip +\CLASSINFOnormalsizebaselineskip=\baselineskip\relax +% and the normalsize unity (baselinestretch=1) baselineskip +% we could save a register by giving the user access to +% \@IEEEnormalsizeunitybaselineskip. However, let's protect +% its read only internal status +\newdimen\CLASSINFOnormalsizeunitybaselineskip +\CLASSINFOnormalsizeunitybaselineskip=\@IEEEnormalsizeunitybaselineskip\relax +% store the nominal value of jot +\newdimen\IEEEnormaljot +\IEEEnormaljot=0.25\baselineskip\relax + +% set \jot +\jot=\IEEEnormaljot\relax + + + + +% V1.6, we are now going to fine tune the interword spacing +% The default interword glue for Times under TeX appears to use a +% nominal interword spacing of 25% (relative to the font size, i.e., 1em) +% a maximum of 40% and a minimum of 19%. +% For example, 10pt text uses an interword glue of: +% +% 2.5pt plus 1.49998pt minus 0.59998pt +% +% However, the IEEE allows for a more generous range which reduces the need +% for hyphenation, especially for two column text. Furthermore, the IEEE +% tends to use a little bit more nominal space between the words. +% The IEEE's interword spacing percentages appear to be: +% 35% nominal +% 23% minimum +% 50% maximum +% (They may even be using a tad more for the largest fonts such as 24pt.) +% +% for bold text, the IEEE increases the spacing a little more: +% 37.5% nominal +% 23% minimum +% 55% maximum + +% here are the interword spacing ratios we'll use +% for medium (normal weight) +\def\@IEEEinterspaceratioM{0.35} +\def\@IEEEinterspaceMINratioM{0.23} +\def\@IEEEinterspaceMAXratioM{0.50} + +% for bold +\def\@IEEEinterspaceratioB{0.375} +\def\@IEEEinterspaceMINratioB{0.23} +\def\@IEEEinterspaceMAXratioB{0.55} + + +% compsoc nonconference papers use Palatino, +% tweak settings to better match the proofs +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference\else +% for medium (normal weight) +\def\@IEEEinterspaceratioM{0.28} +\def\@IEEEinterspaceMINratioM{0.21} +\def\@IEEEinterspaceMAXratioM{0.47} +% for bold +\def\@IEEEinterspaceratioB{0.305} +\def\@IEEEinterspaceMINratioB{0.21} +\def\@IEEEinterspaceMAXratioB{0.52} +\fi\fi + + +% command to revise the interword spacing for the current font under TeX: +% \fontdimen2 = nominal interword space +% \fontdimen3 = interword stretch +% \fontdimen4 = interword shrink +% since all changes to the \fontdimen are global, we can enclose these commands +% in braces to confine any font attribute or length changes +\def\@@@IEEEsetfontdimens#1#2#3{{% +\setlength{\@IEEEtrantmpdimenB}{\f@size pt}% grab the font size in pt, could use 1em instead. +\setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}% +\fontdimen2\font=\@IEEEtrantmpdimenA\relax +\addtolength{\@IEEEtrantmpdimenA}{-#2\@IEEEtrantmpdimenB}% +\fontdimen3\font=-\@IEEEtrantmpdimenA\relax +\setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}% +\addtolength{\@IEEEtrantmpdimenA}{-#3\@IEEEtrantmpdimenB}% +\fontdimen4\font=\@IEEEtrantmpdimenA\relax}} + +% revise the interword spacing for each font weight +\def\@@IEEEsetfontdimens{{% +\mdseries +\@@@IEEEsetfontdimens{\@IEEEinterspaceratioM}{\@IEEEinterspaceMAXratioM}{\@IEEEinterspaceMINratioM}% +\bfseries +\@@@IEEEsetfontdimens{\@IEEEinterspaceratioB}{\@IEEEinterspaceMAXratioB}{\@IEEEinterspaceMINratioB}% +}} + +% revise the interword spacing for each font shape +% \slshape is not often used for IEEE work and is not altered here. The \scshape caps are +% already a tad too large in the free LaTeX fonts (as compared to what the IEEE uses) so we +% won't alter these either. +\def\@IEEEsetfontdimens{{% +\normalfont +\@@IEEEsetfontdimens +\normalfont\itshape +\@@IEEEsetfontdimens +}} + +% command to revise the interword spacing for each font size (and shape +% and weight). Only the \rmfamily is done here as \ttfamily uses a +% fixed spacing and \sffamily is not used as the main text of IEEE papers. +\def\@IEEEtunefonts{{\selectfont\rmfamily +\tiny\@IEEEsetfontdimens +\scriptsize\@IEEEsetfontdimens +\footnotesize\@IEEEsetfontdimens +\small\@IEEEsetfontdimens +\normalsize\@IEEEsetfontdimens +\sublargesize\@IEEEsetfontdimens +\large\@IEEEsetfontdimens +\LARGE\@IEEEsetfontdimens +\huge\@IEEEsetfontdimens +\Huge\@IEEEsetfontdimens}} + +% if the nofonttune class option is not given, revise the interword spacing +% now - in case IEEEtran makes any default length measurements, and make +% sure all the default fonts are loaded +\ifCLASSOPTIONnofonttune\else +\@IEEEtunefonts +\fi + +% and again at the start of the document in case the user loaded different fonts +\AtBeginDocument{\ifCLASSOPTIONnofonttune\else\@IEEEtunefonts\fi} + + + + + +% -- V1.8a page setup commands -- + +% The default sample text for calculating margins +% Note that IEEE publications use \scriptsize for headers and footers. +\def\IEEEdefaultsampletext{\normalfont\normalsize gT} +\def\IEEEdefaultheadersampletext{\normalfont\scriptsize T}% IEEE headers default to uppercase +\def\IEEEdefaultfootersampletext{\normalfont\scriptsize gT} + + + +% usage: \IEEEsettextwidth{inner margin}{outer margin} +% Sets \textwidth to allow the specified inner and outer margins +% for the current \paperwidth. +\def\IEEEsettextwidth#1#2{\@IEEEtrantmpdimenA\paperwidth +\@IEEEtrantmpdimenB#1\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\@IEEEtrantmpdimenB#2\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\textwidth\@IEEEtrantmpdimenA} + + + +% usage: \IEEEsetsidemargin{mode: i, o, c, a}{margin/offset} +% Sets \oddsidemargin and \evensidemargin to yield the specified margin +% of the given mode. +% The available modes are: +% i = inner margin +% o = outer margin +% c = centered, with the given offset +% a = adjust the margins using the given offset +% For the offsets, positive values increase the inner margin. +% \textwidth should be set properly for the given margins before calling this +% function. +\def\IEEEsetsidemargin#1#2{\@IEEEtrantmpdimenA #2\relax +\@IEEEextracttoken{#1}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `i'}{Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}\relax + \let\@IEEEextractedtoken=i\relax + \def\@IEEEextractedtokenmacro{i}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetsidemargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken c\relax + \oddsidemargin\paperwidth + \advance\oddsidemargin by -\textwidth + \divide\oddsidemargin by 2\relax + \advance\oddsidemargin by -1in\relax + \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken o\relax + \oddsidemargin\paperwidth + \advance\oddsidemargin by -\textwidth + \advance\oddsidemargin by -\@IEEEtrantmpdimenA + \advance\oddsidemargin by -1in\relax +\else + \if\@IEEEextractedtoken i\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `i'}% + {Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}% + \fi + \oddsidemargin\@IEEEtrantmpdimenA + \advance\oddsidemargin by -1in\relax +\fi\fi\fi +% odd and even side margins both mean "inner" for single sided pages +\evensidemargin\oddsidemargin +% but are mirrors of each other when twosided is in effect +\if@twoside + \evensidemargin\paperwidth + \advance\evensidemargin by -\textwidth + \advance\evensidemargin by -\oddsidemargin + % have to compensate for both the builtin 1in LaTex offset + % and the fact we already subtracted this offset from \oddsidemargin + \advance\evensidemargin -2in\relax +\fi} + + + +% usage: \IEEEsettextheight[sample text]{top text margin}{bottom text margin} +% Sets \textheight based on the specified top margin and bottom margin. +% Takes into consideration \paperheight, \topskip, and (by default) the +% the actual height and depth of the \IEEEdefaultsampletext text. +\def\IEEEsettextheight{\@ifnextchar [{\@IEEEsettextheight}{\@IEEEsettextheight[\IEEEdefaultsampletext]}} +\def\@IEEEsettextheight[#1]#2#3{\textheight\paperheight\relax + \@IEEEtrantmpdimenA #2\relax + \advance \textheight by -\@IEEEtrantmpdimenA% subtract top margin + \@IEEEtrantmpdimenA #3\relax + \advance \textheight by -\@IEEEtrantmpdimenA% subtract bottom margin + \advance \textheight by \topskip% add \topskip + % subtract off everything above the top, and below the bottom, baselines + \settoheight{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance \textheight by -\@IEEEtrantmpdimenA + \settodepth{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance \textheight by -\@IEEEtrantmpdimenA} + + + +\newdimen\IEEEquantizedlength +\IEEEquantizedlength 0sp\relax +\newdimen\IEEEquantizedlengthdiff +\IEEEquantizedlengthdiff 0sp\relax +\def\IEEEquantizedlengthint{0} + +% usage: \IEEEquantizelength{mode: d, c, i}{base unit}{length} +% Sets the length \IEEEquantizedlength to be an integer multiple of the given +% (nonzero) base unit such that \IEEEquantizedlength approximates the given +% length. +% \IEEEquantizedlengthdiff is a length equal to the difference between the +% \IEEEquantizedlength and the given length. +% \IEEEquantizedlengthint is a macro containing the integer number of base units +% in \IEEEquantizedlength. +% i.e., \IEEEquantizedlength = \IEEEquantizedlengthint * base unit +% The mode determines how \IEEEquantizedlength is quantized: +% d = always decrease (always round down \IEEEquantizeint) +% c = use the closest match +% i = always increase (always round up \IEEEquantizeint) +% In anycase, if the given length is already quantized, +% \IEEEquantizedlengthdiff will be set to zero. +\def\IEEEquantizelength#1#2#3{\begingroup +% work in isolation so as not to externally disturb the \@IEEEtrantmp +% variables +% load the argument values indirectly via \IEEEquantizedlengthdiff +% in case the user refers to our \@IEEEtrantmpdimenX, \IEEEquantizedlength, +% etc. in the arguments. we also will work with these as counters, +% i.e., in sp units +% A has the base unit +\IEEEquantizedlengthdiff #2\relax\relax\relax\relax +\@IEEEtrantmpcountA\IEEEquantizedlengthdiff +% B has the input length +\IEEEquantizedlengthdiff #3\relax\relax\relax\relax +\@IEEEtrantmpcountB\IEEEquantizedlengthdiff +\@IEEEtrantmpdimenA\the\@IEEEtrantmpcountA sp\relax +\@IEEEtrantmpdimenB\the\@IEEEtrantmpcountB sp\relax +% \@IEEEtrantmpcountC will have the quantized int +% \IEEEquantizedlength will have the quantized length +% \@IEEEtrantmpdimenC will have the quantized diff +% initialize them to zero as this is what will be +% exported if an error occurs +\@IEEEtrantmpcountC 0\relax +\IEEEquantizedlength 0sp\relax +\@IEEEtrantmpdimenC 0sp\relax +% extract mode +\@IEEEextracttoken{#1}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + Defaulting to `d'}{Valid modes for \string\IEEEquantizelength\space are: d, c and i.}\relax + \let\@IEEEextractedtoken=d\relax + \def\@IEEEextractedtokenmacro{d}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEquantizelength\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% check for base unit is zero error +\ifnum\@IEEEtrantmpcountA=0\relax +\@IEEEclspkgerror{Base unit is zero in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + \string\IEEEquantizedlength\space and \string\IEEEquantizedlengthdiff\space are set to zero}{Division by zero is not allowed.}\relax +\else% base unit is nonzero + % \@IEEEtrantmpcountC carries the number of integer units + % in the quantized length (integer length \ base) + \@IEEEtrantmpcountC\@IEEEtrantmpcountB\relax + \divide\@IEEEtrantmpcountC by \@IEEEtrantmpcountA\relax + % \IEEEquantizedlength has the (rounded down) quantized length + % = base * int + \IEEEquantizedlength\@IEEEtrantmpdimenA\relax + \multiply\IEEEquantizedlength by \@IEEEtrantmpcountC\relax + % \@IEEEtrantmpdimenC has the difference + % = quantized length - length + \@IEEEtrantmpdimenC\IEEEquantizedlength\relax + \advance\@IEEEtrantmpdimenC by -\@IEEEtrantmpdimenB\relax + % trap special case of length being already quantized + % to avoid a roundup under i option + \ifdim\@IEEEtrantmpdimenC=0sp\relax + \else % length not is already quantized + % set dimenA to carry the upper quantized (absolute value) difference: + % quantizedlength + base - length + \advance\@IEEEtrantmpdimenA by \IEEEquantizedlength\relax + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB\relax + % set dimenB to carry the lower quantized (absolute value) difference: + % length - quantizedlength + \advance\@IEEEtrantmpdimenB by -\IEEEquantizedlength\relax + % handle each mode + \if\@IEEEextractedtoken c\relax + % compare upper and lower amounts, select upper if lower > upper + \ifdim\@IEEEtrantmpdimenB>\@IEEEtrantmpdimenA\relax + % use upper + \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax + \advance\@IEEEtrantmpcountC by 1\relax + \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA + \else% <=. uselower + % no need to do anything for lower, use output values already setup + \fi + \else% not mode c + \if\@IEEEextractedtoken i\relax + % always round up under i mode + \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax + \advance\@IEEEtrantmpcountC by 1\relax + \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA + \else + \if\@IEEEextractedtoken d\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + Defaulting to `d'}% + {Valid modes for \string\IEEEquantizelength\space are: d, c, and i.}\relax + \fi % if d + % no need to do anything for d, use output values already setup + \fi\fi % if i, c + \fi % if length is already quantized +\fi% if base unit is zero +% globally assign the results to macros we use here to escape the enclosing +% group without needing to call \global on any of the \@IEEEtrantmp variables. +% \@IEEEtrantmpcountC has the quantized int +% \IEEEquantizedlength has the quantized length +% \@IEEEtrantmpdimenC has the quantized diff +\xdef\@IEEEquantizedlengthintmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlength\relax +\xdef\@IEEEquantizedlengthmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\@IEEEtrantmpdimenC\relax +\xdef\@IEEEquantizedlengthdiffmacro{\the\@IEEEtrantmpcountC}\relax +\endgroup +% locally assign the outputs here from the macros +\expandafter\IEEEquantizedlength\@IEEEquantizedlengthmacro sp\relax +\expandafter\IEEEquantizedlengthdiff\@IEEEquantizedlengthdiffmacro sp\relax +\edef\IEEEquantizedlengthint{\@IEEEquantizedlengthintmacro}\relax} + + + +\newdimen\IEEEquantizedtextheightdiff +\IEEEquantizedtextheightdiff 0sp\relax + +% usage: \IEEEquantizetextheight[base unit]{mode: d, c, i} +% Sets \textheight to be an integer multiple of the current \baselineskip +% (or the optionally specified base unit) plus the first (\topskip) line. +% \IEEEquantizedtextheightdiff is a length equal to the difference between +% the new quantized and original \textheight. +% \IEEEquantizedtextheightlpc is a macro containing the integer number of +% lines per column under the quantized \textheight. i.e., +% \textheight = \IEEEquantizedtextheightlpc * \baselineskip + \topskip +% The mode determines how \textheight is quantized: +% d = always decrease (always round down the number of lines per column) +% c = use the closest match +% i = always increase (always round up the number of lines per column) +% In anycase, if \textheight is already quantized, it will remain unchanged, +% and \IEEEquantizedtextheightdiff will be set to zero. +% Depends on: \IEEEquantizelength +\def\IEEEquantizetextheight{\@ifnextchar [{\@IEEEquantizetextheight}{\@IEEEquantizetextheight[\baselineskip]}} +\def\@IEEEquantizetextheight[#1]#2{\begingroup +% use our \IEEEquantizedtextheightdiff as a scratch pad +% we need to subtract off \topskip before quantization +\IEEEquantizedtextheightdiff\textheight +\advance\IEEEquantizedtextheightdiff by -\topskip\relax +\IEEEquantizelength{#2}{#1}{\IEEEquantizedtextheightdiff} +% add back \topskip line +\advance\IEEEquantizedlength by \topskip +\@IEEEtrantmpcountC\IEEEquantizedlengthint\relax +\advance\@IEEEtrantmpcountC by 1\relax +% globally assign the results to macros we use here to escape the enclosing +% group without needing to call \global on any of the \@IEEEtrantmp variables. +\xdef\@IEEEquantizedtextheightlpcmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlength\relax +\xdef\@IEEEquantizedtextheightmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlengthdiff\relax +\xdef\@IEEEquantizedtextheightdiffmacro{\the\@IEEEtrantmpcountC}\relax +\endgroup +% locally assign the outputs here from the macros +\textheight\@IEEEquantizedtextheightmacro sp\relax +\IEEEquantizedtextheightdiff\@IEEEquantizedtextheightdiffmacro sp\relax +\edef\IEEEquantizedtextheightlpc{\@IEEEquantizedtextheightlpcmacro}} + + + +% usage: \IEEEsettopmargin[sample text]{mode: t, b, c, a, q}{margin/offset} +% Sets \topmargin based on the specified vertical margin. +% Takes into consideration the base 1in offset, \headheight, \headsep, +% \topskip, and (by default) the the actual height (or, for the bottom, depth) +% of the \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin +% b = bottom margin +% c = vertically centered, with the given offset +% a = adjust the vertical margins using the given offset +% q = adjust the margins using \IEEEquantizedtextheightdiff and the given offset +% For the offsets, positive values increase the top margin. +% \headheight, \headsep, \topskip and \textheight should be set properly for the +% given margins before calling this function. +\def\IEEEsettopmargin{\@ifnextchar [{\@IEEEsettopmargin}{\@IEEEsettopmargin[\IEEEdefaultsampletext]}} +\def\@IEEEsettopmargin[#1]#2#3{\@IEEEtrantmpdimenA #3\relax +\@IEEEextracttoken{#2}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsettopmargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken q\relax + % we need to adjust by half the \IEEEquantizedtextheightdiff value + \@IEEEtrantmpdimenB\IEEEquantizedtextheightdiff\relax + \divide\@IEEEtrantmpdimenB by 2\relax + % a positive \IEEEquantizedtextheightdiff means we need to reduce \topmargin + % because \textheight has been lenghtened + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken c\relax + \topmargin\paperheight + \advance\topmargin by -\textheight + % \textheight includes \topskip, but we should not count topskip whitespace here, backout + \advance \topmargin by \topskip + \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \divide\topmargin by 2\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken b\relax + \topmargin\paperheight + \advance\topmargin by -\textheight + % \textheight includes \topskip, but we should not count topskip whitespace here, backout + \advance \topmargin by \topskip + \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \advance\topmargin by -\@IEEEtrantmpdimenA\relax +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax + \fi + \topmargin\@IEEEtrantmpdimenA\relax + \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by \@IEEEtrantmpdimenB\relax +\fi\fi % if t, b, c +% convert desired top margin into actual \topmargin +% this is not done for the q or a modes because they are only adjustments +\advance \topmargin by -\topskip +\advance \topmargin by -1in +\advance \topmargin by -\headheight +\advance \topmargin by -\headsep +\fi\fi % if q, a +} + + + +% usage: \IEEEsetheadermargin[header sample][text sample]{mode: t, b, c, a}{margin/offset} +% Differentially adjusts \topmargin and \headsep (such that their sum is unchanged) +% based on the specified header margin. +% Takes into consideration the base 1in offset, \headheight, \topskip, and (by default) +% the actual height (or depth) of the \IEEEdefaultheadersampletext and +% \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin (top of the header text to the top of the page) +% b = bottom margin (bottom of the header text to the top of the main text) +% c = vertically centered between the main text and the top of the page, +% with the given offset +% a = adjust the vertical position using the given offset +% For the offsets, positive values move the header downward. +% \headheight, \headsep, \topskip and \topmargin should be set properly before +% calling this function. +\def\IEEEsetheadermargin{\@ifnextchar [{\@IEEEsetheadermargin}{\@IEEEsetheadermargin[\IEEEdefaultheadersampletext]}} +\def\@IEEEsetheadermargin[#1]{\@ifnextchar [{\@@IEEEsetheadermargin[#1]}{\@@IEEEsetheadermargin[#1][\IEEEdefaultsampletext]}} +\def\@@IEEEsetheadermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax +\@IEEEextracttoken{#3}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsetheadermargin\space are: t, b, c, and a.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetheadermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + % No need to do anything here and can pass through the adjustment + % value as is. The end adjustment of \topmargin and \headsep will + % do all that is needed +\else +\if\@IEEEextractedtoken c\relax + % get the bottom margin + \@IEEEtrantmpdimenB\headsep\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \advance\@IEEEtrantmpdimenB by \topskip + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header bottom margin + % subtract from it the top header margin + \advance\@IEEEtrantmpdimenB -1in\relax % take into consideration the system 1in offset of the top margin + \advance\@IEEEtrantmpdimenB by -\topmargin + \advance\@IEEEtrantmpdimenB by -\headheight + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the difference between the bottom and top margins + % we need to adjust by half this amount to center the header + \divide\@IEEEtrantmpdimenB by 2\relax + % and add to offset + \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB +\else +\if\@IEEEextractedtoken b\relax + \@IEEEtrantmpdimenB\headsep\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \advance\@IEEEtrantmpdimenB by \topskip + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header bottom margin + % get the difference between the actual and the desired + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA + \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsetheadermargin\space are: t, b, c and a.}\relax + \fi + \@IEEEtrantmpdimenB 1in\relax % take into consideration the system 1in offset of the top margin + \advance\@IEEEtrantmpdimenB by \topmargin + \advance\@IEEEtrantmpdimenB by \headheight + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header top margin + % get the difference between the desired and the actual + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\fi\fi % if t, b, c +\fi % if a +% advance \topmargin by the needed amount and reduce \headsep by the same +% so as not to disturb the location of the main text +\advance\topmargin by \@IEEEtrantmpdimenA\relax +\advance\headsep by -\@IEEEtrantmpdimenA\relax +} + + + +% usage: \IEEEsetfootermargin[footer sample][text sample]{mode: t, b, c, a}{margin/offset} +% Adjusts \footskip based on the specified footer margin. +% Takes into consideration the base 1in offset, \paperheight, \headheight, +% \headsep, \textheight and (by default) the actual height (or depth) of the +% \IEEEdefaultfootersampletext and \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin (top of the footer text to the bottom of the main text) +% b = bottom margin (bottom of the footer text to the bottom of page) +% c = vertically centered between the main text and the bottom of the page, +% with the given offset +% a = adjust the vertical position using the given offset +% For the offsets, positive values move the footer downward. +% \headheight, \headsep, \topskip, \topmargin, and \textheight should be set +% properly before calling this function. +\def\IEEEsetfootermargin{\@ifnextchar [{\@IEEEsetfootermargin}{\@IEEEsetfootermargin[\IEEEdefaultfootersampletext]}} +\def\@IEEEsetfootermargin[#1]{\@ifnextchar [{\@@IEEEsetfootermargin[#1]}{\@@IEEEsetfootermargin[#1][\IEEEdefaultsampletext]}} +\def\@@IEEEsetfootermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax +\@IEEEextracttoken{#3}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsetfootermargin\space are: t, b, c, and a.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetfootermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + % No need to do anything here and can pass through the adjustment + % value as is. The end adjustment of \footskip will do all that + % is needed +\else +\if\@IEEEextractedtoken c\relax + % calculate the bottom margin + \@IEEEtrantmpdimenB 1in\relax % system 1in offset + \advance\@IEEEtrantmpdimenB\topmargin\relax + \advance\@IEEEtrantmpdimenB\headheight\relax + \advance\@IEEEtrantmpdimenB\headsep\relax + \advance\@IEEEtrantmpdimenB\textheight\relax + \advance\@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB + \@IEEEtrantmpdimenB\paperheight + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin + % now subtract off the footer top margin + \advance\@IEEEtrantmpdimenB -\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the difference between the bottom + % and top footer margins + % our adjustment must be half this value to center the footer + \divide\@IEEEtrantmpdimenB by 2\relax + % add to the offset + \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB +\else +\if\@IEEEextractedtoken b\relax + % calculate the bottom margin + \@IEEEtrantmpdimenB 1in\relax % system 1in offset + \advance\@IEEEtrantmpdimenB\topmargin\relax + \advance\@IEEEtrantmpdimenB\headheight\relax + \advance\@IEEEtrantmpdimenB\headsep\relax + \advance\@IEEEtrantmpdimenB\textheight\relax + \advance\@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB + \@IEEEtrantmpdimenB\paperheight + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin + % get the difference between the actual and the desired + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA + \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsetfootermargin\space are: t, b, c and a.}\relax + \fi + \@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer top margin + % get the difference between the desired and the actual + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\fi\fi % if t, b, c +\fi % if a +% advance \footskip by the needed amount +\advance\footskip by \@IEEEtrantmpdimenA\relax +} + +% -- End V1.8a page setup commands -- + + + + + +% V1.6 +% LaTeX is a little to quick to use hyphenations +% So, we increase the penalty for their use and raise +% the badness level that triggers an underfull hbox +% warning. The author may still have to tweak things, +% but the appearance will be much better "right out +% of the box" than that under V1.5 and prior. +% TeX default is 50 +\hyphenpenalty=750 +\ifCLASSOPTIONcompsoc +\hyphenpenalty 500 +\fi +% If we didn't adjust the interword spacing, 2200 might be better. +% The TeX default is 1000 +\hbadness=1350 +% The IEEE does not use extra spacing after punctuation +\frenchspacing + +% V1.7 increase this a tad to discourage equation breaks +\binoppenalty=1000 % default 700 +\relpenalty=800 % default 500 + +% v1.8a increase these to discourage widows and orphans +\clubpenalty=1000 % default 150 +\widowpenalty=1000 % default 150 +\displaywidowpenalty=1000 % default 50 + + +% margin note stuff +\marginparsep 10pt +\marginparwidth 20pt +\marginparpush 25pt + + +% if things get too close, go ahead and let them touch +\lineskip 0pt +\normallineskip 0pt +\lineskiplimit 0pt +\normallineskiplimit 0pt + +% The distance from the lower edge of the text body to the +% footline +\footskip 0.4in + +% normally zero, should be relative to font height. +% put in a little rubber to help stop some bad breaks (underfull vboxes) +\parskip 0ex plus 0.2ex minus 0.1ex + +\parindent 1.0em +\ifCLASSOPTIONcompsoc + \parindent 1.5em +\fi + +\headheight 12pt +\headsep 18pt +% use the normal font baselineskip +% so that \topskip is unaffected by changes in \baselinestretch +\topskip=\@IEEEnormalsizeunitybaselineskip + + +% V1.8 \maxdepth defaults to 4pt, but should be font size dependent +\maxdepth=0.5\@IEEEnormalsizeunitybaselineskip +\textheight 58pc % 9.63in, 696pt + +% set the default top margin to 58pt +% which results in a \topmargin of -49.59pt for 10pt documents +\IEEEsettopmargin{t}{58pt} +% tweak textheight to a perfect integer number of lines/column. +% standard is: 9pt/63 lpc; 10pt/58 lpc; 11pt/52 lpc; 12pt/50 lpc +\IEEEquantizetextheight{c} +% tweak top margin so that the error is shared equally at the top and bottom +\IEEEsettopmargin{q}{0sp} + + +\columnsep 1pc +\textwidth 43pc % 2 x 21pc + 1pc = 43pc + +% set the default side margins to center the text +\IEEEsetsidemargin{c}{0pt} + + +% adjust margins for default conference mode +\ifCLASSOPTIONconference + \textheight 9.25in % The standard for conferences (668.4975pt) + \IEEEsettopmargin{t}{0.75in} + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/61 lpc; 10pt/56 lpc; 11pt/50 lpc; 12pt/48 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} +\fi + + +% compsoc text sizes, margins and spacings +\ifCLASSOPTIONcompsoc + \columnsep 12bp + % CS specs for \textwdith are 6.875in + % \textwidth 6.875in + % however, measurements from proofs show they are using 3.5in columns + \textwidth 7in + \advance\textwidth by \columnsep + % set the side margins to center the text + \IEEEsetsidemargin{c}{0pt} + % top/bottom margins to center + % could just set \textheight to 9.75in for all the different paper sizes + % and then quantize, but we'll do it the long way here to allow for easy + % future per-paper size adjustments + \IEEEsettextheight{0.625in}{0.625in}% 11in - 2 * 0.625in = 9.75in is the standard text height for compsoc journals + \IEEEsettopmargin{t}{0.625in} + \if@IEEEusingcspaper + \IEEEsettextheight{0.5in}{0.5in}% 10.75in - 2 * 0.5in = 9.75in + \IEEEsettopmargin{t}{0.5in} + \fi + \if@IEEEusingAfourpaper + \IEEEsettextheight{24.675mm}{24.675mm}% 297mm - 2 * 24.675mm = 247.650mm (9.75in) + \IEEEsettopmargin{t}{24.675mm} + \fi + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/65 lpc; 10pt/61 lpc; 11pt/53 lpc; 12pt/49 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} + +% compsoc conference + \ifCLASSOPTIONconference + % compsoc conference use a larger value for columnsep + \columnsep 0.25in + \IEEEsettextwidth{0.75in}{0.75in} + % set the side margins to center the text (0.75in for letterpaper) + \IEEEsetsidemargin{c}{0pt} + % compsoc conferences want 1in top and bottom margin + \IEEEsettextheight{1in}{1in} + \IEEEsettopmargin{t}{1in} + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/58 lpc; 10pt/53 lpc; 11pt/48 lpc; 12pt/46 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} + \fi +\fi + + + +% draft mode settings override that of all other modes +% provides a nice 1in margin all around the paper and extra +% space between the lines for editor's comments +\ifCLASSOPTIONdraftcls + % we want 1in side margins regardless of paper type + \IEEEsettextwidth{1in}{1in} + \IEEEsetsidemargin{c}{0pt} + % want 1in top and bottom margins + \IEEEsettextheight{1in}{1in} + \IEEEsettopmargin{t}{1in} + % digitize textheight to be an integer number of lines. + % this may cause the top and bottom margins to be off a tad + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} +\fi + + + +% process CLASSINPUT inner/outer margin +% if inner margin defined, but outer margin not, set outer to inner. +\ifx\CLASSINPUTinnersidemargin\@IEEEundefined +\else + \ifx\CLASSINPUToutersidemargin\@IEEEundefined + \edef\CLASSINPUToutersidemargin{\CLASSINPUTinnersidemargin} + \fi +\fi + +\ifx\CLASSINPUToutersidemargin\@IEEEundefined +\else + % if outer margin defined, but inner margin not, set inner to outer. + \ifx\CLASSINPUTinnersidemargin\@IEEEundefined + \edef\CLASSINPUTinnersidemargin{\CLASSINPUToutersidemargin} + \fi + \IEEEsettextwidth{\CLASSINPUTinnersidemargin}{\CLASSINPUToutersidemargin} + \IEEEsetsidemargin{i}{\CLASSINPUTinnersidemargin} + \typeout{** ATTENTION: Overriding inner side margin to \CLASSINPUTinnersidemargin\space and + outer side margin to \CLASSINPUToutersidemargin\space via \string\CLASSINPUT.} +\fi + + + +% process CLASSINPUT top/bottom text margin +% if toptext margin defined, but bottomtext margin not, set bottomtext to toptext margin +\ifx\CLASSINPUTtoptextmargin\@IEEEundefined +\else + \ifx\CLASSINPUTbottomtextmargin\@IEEEundefined + \edef\CLASSINPUTbottomtextmargin{\CLASSINPUTtoptextmargin} + \fi +\fi + +\ifx\CLASSINPUTbottomtextmargin\@IEEEundefined +\else + % if bottomtext margin defined, but toptext margin not, set toptext to bottomtext margin + \ifx\CLASSINPUTtoptextmargin\@IEEEundefined + \edef\CLASSINPUTtoptextmargin{\CLASSINPUTbottomtextmargin} + \fi + \IEEEsettextheight{\CLASSINPUTtoptextmargin}{\CLASSINPUTbottomtextmargin} + \IEEEsettopmargin{t}{\CLASSINPUTtoptextmargin} + \typeout{** ATTENTION: Overriding top text margin to \CLASSINPUTtoptextmargin\space and + bottom text margin to \CLASSINPUTbottomtextmargin\space via \string\CLASSINPUT.} +\fi + + + +% default to center header and footer text in the margins +\IEEEsetheadermargin{c}{0pt} +\IEEEsetfootermargin{c}{0pt} + +% adjust header and footer positions for compsoc journals +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONjournal + \IEEEsetheadermargin{b}{\@IEEEnormalsizeunitybaselineskip} + \IEEEsetfootermargin{t}{\@IEEEnormalsizeunitybaselineskip} + \fi +\fi + + +% V1.8a display lines per column info message on user's console +\def\IEEEdisplayinfolinespercolumn{\@IEEEtrantmpdimenA=\textheight +% topskip represents only one line even if > baselineskip +\advance\@IEEEtrantmpdimenA by -1\topskip +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenA +\@IEEEtrantmpcountB=\@IEEEtrantmpdimenA +\divide\@IEEEtrantmpcountB by \baselineskip +% need to add one line to include topskip (first) line +\advance\@IEEEtrantmpcountB by 1 +% save lines per column value as text +\edef\@IEEEnumlinespercolumninfotxt{\the\@IEEEtrantmpcountB} +% backout topskip advance to allow direct \@IEEEtrantmpcountA comparison +\advance\@IEEEtrantmpcountB by -1 +% restore value as text height (without topskip) rather than just as number of lines +\multiply\@IEEEtrantmpcountB by \baselineskip +% is the column height an integer number of lines per column? +\ifnum\@IEEEtrantmpcountA=\@IEEEtrantmpcountB +\edef\@IEEEnumlinespercolumnexactinfotxt{exact} +\else +\@IEEEtrantmpdimenA\@IEEEtrantmpcountA sp\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpcountB sp\relax +\edef\@IEEEnumlinespercolumnexactinfotxt{approximate, difference = \the\@IEEEtrantmpdimenA} +\fi +\typeout{-- Lines per column: \@IEEEnumlinespercolumninfotxt\space (\@IEEEnumlinespercolumnexactinfotxt).}} +% delay execution till start of document to allow for user changes +\AtBeginDocument{\IEEEdisplayinfolinespercolumn} + + + +% LIST SPACING CONTROLS + +% Controls the amount of EXTRA spacing +% above and below \trivlist +% Both \list and IED lists override this. +% However, \trivlist will use this as will most +% things built from \trivlist like the \center +% environment. +\topsep 0.5\baselineskip + +% Controls the additional spacing around lists preceded +% or followed by blank lines. the IEEE does not increase +% spacing before or after paragraphs so it is set to zero. +% \z@ is the same as zero, but faster. +\partopsep \z@ + +% Controls the spacing between paragraphs in lists. +% The IEEE does not increase spacing before or after paragraphs +% so this is also zero. +% With IEEEtran.cls, global changes to +% this value DO affect lists (but not IED lists). +\parsep \z@ + +% Controls the extra spacing between list items. +% The IEEE does not put extra spacing between items. +% With IEEEtran.cls, global changes to this value DO affect +% lists (but not IED lists). +\itemsep \z@ + +% \itemindent is the amount to indent the FIRST line of a list +% item. It is auto set to zero within the \list environment. To alter +% it, you have to do so when you call the \list. +% However, the IEEE uses this for the theorem environment +% There is an alternative value for this near \leftmargini below +\itemindent -1em + +% \leftmargin, the spacing from the left margin of the main text to +% the left of the main body of a list item is set by \list. +% Hence this statement does nothing for lists. +% But, quote and verse do use it for indention. +\leftmargin 2em + +% we retain this stuff from the older IEEEtran.cls so that \list +% will work the same way as before. However, itemize, enumerate and +% description (IED) could care less about what these are as they +% all are overridden. +\leftmargini 2em +%\itemindent 2em % Alternative values: sometimes used. +%\leftmargini 0em +\leftmarginii 1em +\leftmarginiii 1.5em +\leftmarginiv 1.5em +\leftmarginv 1.0em +\leftmarginvi 1.0em +\labelsep 0.5em +\labelwidth \z@ + + +% The old IEEEtran.cls behavior of \list is retained. +% However, the new V1.3 IED list environments override all the +% @list stuff (\@listX is called within \list for the +% appropriate level just before the user's list_decl is called). +% \topsep is now 2pt as the IEEE puts a little extra space around +% lists - used by those non-IED macros that depend on \list. +% Note that \parsep and \itemsep are not redefined as in +% the sizexx.clo \@listX (which article.cls uses) so global changes +% of these values DO affect \list +% +\def\@listi{\leftmargin\leftmargini \topsep 2pt plus 1pt minus 1pt} +\let\@listI\@listi +\def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi% + \advance\labelwidth-\labelsep \topsep 2pt} + + +% The IEEE uses 5) not 5. +\def\labelenumi{\theenumi)} \def\theenumi{\arabic{enumi}} + +% The IEEE uses a) not (a) +\def\labelenumii{\theenumii)} \def\theenumii{\alph{enumii}} + +% The IEEE uses iii) not iii. +\def\labelenumiii{\theenumiii)} \def\theenumiii{\roman{enumiii}} + +% The IEEE uses A) not A. +\def\labelenumiv{\theenumiv)} \def\theenumiv{\Alph{enumiv}} + +% exactly the same as in article.cls +\def\p@enumii{\theenumi} +\def\p@enumiii{\theenumi(\theenumii)} +\def\p@enumiv{\p@enumiii\theenumiii} + +% itemized list label styles +\def\labelitemi{$\scriptstyle\bullet$} +\def\labelitemii{\textbf{--}} +\def\labelitemiii{$\ast$} +\def\labelitemiv{$\cdot$} + + + +% **** V1.3 ENHANCEMENTS **** +% Itemize, Enumerate and Description (IED) List Controls +% *************************** +% +% +% The IEEE seems to use at least two different values by +% which ITEMIZED list labels are indented to the right +% For The Journal of Lightwave Technology (JLT) and The Journal +% on Selected Areas in Communications (JSAC), they tend to use +% an indention equal to \parindent. For Transactions on Communications +% they tend to indent ITEMIZED lists a little more--- 1.3\parindent. +% We'll provide both values here for you so that you can choose +% which one you like in your document using a command such as: +% setlength{\IEEEilabelindent}{\IEEEilabelindentB} +\newdimen\IEEEilabelindentA +\IEEEilabelindentA \parindent + +\newdimen\IEEEilabelindentB +\IEEEilabelindentB 1.3\parindent +% However, we'll default to using \parindent +% which makes more sense to me +\newdimen\IEEEilabelindent +\IEEEilabelindent \IEEEilabelindentA + + +% This controls the default amount the enumerated list labels +% are indented to the right. +% Normally, this is the same as the paragraph indention +\newdimen\IEEEelabelindent +\IEEEelabelindent \parindent + +% This controls the default amount the description list labels +% are indented to the right. +% Normally, this is the same as the paragraph indention +\newdimen\IEEEdlabelindent +\IEEEdlabelindent \parindent + +% This is the value actually used within the IED lists. +% The IED environments automatically set its value to +% one of the three values above, so global changes do +% not have any effect +\newdimen\IEEElabelindent +\IEEElabelindent \parindent + +% The actual amount labels will be indented is +% \IEEElabelindent multiplied by the factor below +% corresponding to the level of nesting depth +% This provides a means by which the user can +% alter the effective \IEEElabelindent for deeper +% levels +% There may not be such a thing as correct "standard IEEE" +% values. What the IEEE actually does may depend on the specific +% circumstances. +% The first list level almost always has full indention. +% The second levels I've seen have only 75% of the normal indentation +% Three level or greater nestings are very rare. I am guessing +% that they don't use any indentation. +\def\IEEElabelindentfactori{1.0} % almost always one +\def\IEEElabelindentfactorii{0.75} % 0.0 or 1.0 may be used in some cases +\def\IEEElabelindentfactoriii{0.0} % 0.75? 0.5? 0.0? +\def\IEEElabelindentfactoriv{0.0} +\def\IEEElabelindentfactorv{0.0} +\def\IEEElabelindentfactorvi{0.0} + +% value actually used within IED lists, it is auto +% set to one of the 6 values above +% global changes here have no effect +\def\IEEElabelindentfactor{1.0} + +% This controls the default spacing between the end of the IED +% list labels and the list text, when normal text is used for +% the labels. +% compsoc uses a larger value here, but we'll set that later +% in the class so that this code block area can be extracted +% as-is for IEEEtrantools.sty +\newdimen\IEEEiednormlabelsep +\IEEEiednormlabelsep 0.6em + +% This controls the default spacing between the end of the IED +% list labels and the list text, when math symbols are used for +% the labels (nomenclature lists). The IEEE usually increases the +% spacing in these cases +\newdimen\IEEEiedmathlabelsep +\IEEEiedmathlabelsep 1.2em + +% This controls the extra vertical separation put above and +% below each IED list. the IEEE usually puts a little extra spacing +% around each list. However, this spacing is barely noticeable. +% compsoc uses a larger value here, but we'll set that later +% in the class so that this code block area can be extracted +% as-is for IEEEtrantools.sty +\newskip\IEEEiedtopsep +\IEEEiedtopsep 2pt plus 1pt minus 1pt + + +% This command is executed within each IED list environment +% at the beginning of the list. You can use this to set the +% parameters for some/all your IED list(s) without disturbing +% global parameters that affect things other than lists. +% i.e., renewcommand{\IEEEiedlistdecl}{\setlength{\labelsep}{5em}} +% will alter the \labelsep for the next list(s) until +% \IEEEiedlistdecl is redefined. +\def\IEEEiedlistdecl{\relax} + +% This command provides an easy way to set \leftmargin based +% on the \labelwidth, \labelsep and the argument \IEEElabelindent +% Usage: \IEEEcalcleftmargin{width-to-indent-the-label} +% output is in the \leftmargin variable, i.e., effectively: +% \leftmargin = argument + \labelwidth + \labelsep +% Note controlled spacing here, shield end of lines with % +\def\IEEEcalcleftmargin#1{\setlength{\leftmargin}{#1}% +\addtolength{\leftmargin}{\labelwidth}% +\addtolength{\leftmargin}{\labelsep}} + +% This command provides an easy way to set \labelwidth to the +% width of the given text. It is the same as +% \settowidth{\labelwidth}{label-text} +% and useful as a shorter alternative. +% Typically used to set \labelwidth to be the width +% of the longest label in the list +\def\IEEEsetlabelwidth#1{\settowidth{\labelwidth}{#1}} + +% When this command is executed, IED lists will use the +% IEEEiedmathlabelsep label separation rather than the normal +% spacing. To have an effect, this command must be executed via +% the \IEEEiedlistdecl or within the option of the IED list +% environments. +\def\IEEEusemathlabelsep{\setlength{\labelsep}{\IEEEiedmathlabelsep}} + +% A flag which controls whether the IED lists automatically +% calculate \leftmargin from \IEEElabelindent, \labelwidth and \labelsep +% Useful if you want to specify your own \leftmargin +% This flag must be set (\IEEEnocalcleftmargintrue or \IEEEnocalcleftmarginfalse) +% via the \IEEEiedlistdecl or within the option of the IED list +% environments to have an effect. +\newif\ifIEEEnocalcleftmargin +\IEEEnocalcleftmarginfalse + +% A flag which controls whether \IEEElabelindent is multiplied by +% the \IEEElabelindentfactor for each list level. +% This flag must be set via the \IEEEiedlistdecl or within the option +% of the IED list environments to have an effect. +\newif\ifIEEEnolabelindentfactor +\IEEEnolabelindentfactorfalse + + +% internal variable to indicate type of IED label +% justification +% 0 - left; 1 - center; 2 - right +\def\@IEEEiedjustify{0} + + +% commands to allow the user to control IED +% label justifications. Use these commands within +% the IED environment option or in the \IEEEiedlistdecl +% Note that changing the normal list justifications +% is nonstandard and the IEEE may not like it if you do so! +% I include these commands as they may be helpful to +% those who are using these enhanced list controls for +% other non-IEEE related LaTeX work. +% itemize and enumerate automatically default to right +% justification, description defaults to left. +\def\IEEEiedlabeljustifyl{\def\@IEEEiedjustify{0}}%left +\def\IEEEiedlabeljustifyc{\def\@IEEEiedjustify{1}}%center +\def\IEEEiedlabeljustifyr{\def\@IEEEiedjustify{2}}%right + + + + +% commands to save to and restore from the list parameter copies +% this allows us to set all the list parameters within +% the list_decl and prevent \list (and its \@list) +% from overriding any of our parameters +% V1.6 use \edefs instead of dimen's to conserve dimen registers +% Note controlled spacing here, shield end of lines with % +\def\@IEEEsavelistparams{\edef\@IEEEiedtopsep{\the\topsep}% +\edef\@IEEEiedlabelwidth{\the\labelwidth}% +\edef\@IEEEiedlabelsep{\the\labelsep}% +\edef\@IEEEiedleftmargin{\the\leftmargin}% +\edef\@IEEEiedpartopsep{\the\partopsep}% +\edef\@IEEEiedparsep{\the\parsep}% +\edef\@IEEEieditemsep{\the\itemsep}% +\edef\@IEEEiedrightmargin{\the\rightmargin}% +\edef\@IEEEiedlistparindent{\the\listparindent}% +\edef\@IEEEieditemindent{\the\itemindent}} + +% Note controlled spacing here +\def\@IEEErestorelistparams{\topsep\@IEEEiedtopsep\relax% +\labelwidth\@IEEEiedlabelwidth\relax% +\labelsep\@IEEEiedlabelsep\relax% +\leftmargin\@IEEEiedleftmargin\relax% +\partopsep\@IEEEiedpartopsep\relax% +\parsep\@IEEEiedparsep\relax% +\itemsep\@IEEEieditemsep\relax% +\rightmargin\@IEEEiedrightmargin\relax% +\listparindent\@IEEEiedlistparindent\relax% +\itemindent\@IEEEieditemindent\relax} + + +% v1.6b provide original LaTeX IED list environments +% note that latex.ltx defines \itemize and \enumerate, but not \description +% which must be created by the base classes +% save original LaTeX itemize and enumerate +\let\LaTeXitemize\itemize +\let\endLaTeXitemize\enditemize +\let\LaTeXenumerate\enumerate +\let\endLaTeXenumerate\endenumerate + +% provide original LaTeX description environment from article.cls +\newenvironment{LaTeXdescription} + {\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\endlist} +\newcommand*\descriptionlabel[1]{\hspace\labelsep + \normalfont\bfseries #1} + + +% override LaTeX's default IED lists +\def\itemize{\@IEEEitemize} +\def\enditemize{\@endIEEEitemize} +\def\enumerate{\@IEEEenumerate} +\def\endenumerate{\@endIEEEenumerate} +\def\description{\@IEEEdescription} +\def\enddescription{\@endIEEEdescription} + +% provide the user with aliases - may help those using packages that +% override itemize, enumerate, or description +\def\IEEEitemize{\@IEEEitemize} +\def\endIEEEitemize{\@endIEEEitemize} +\def\IEEEenumerate{\@IEEEenumerate} +\def\endIEEEenumerate{\@endIEEEenumerate} +\def\IEEEdescription{\@IEEEdescription} +\def\endIEEEdescription{\@endIEEEdescription} + + +% V1.6 we want to keep the IEEEtran IED list definitions as our own internal +% commands so they are protected against redefinition +\def\@IEEEitemize{\@ifnextchar[{\@@IEEEitemize}{\@@IEEEitemize[\relax]}} +\def\@IEEEenumerate{\@ifnextchar[{\@@IEEEenumerate}{\@@IEEEenumerate[\relax]}} +\def\@IEEEdescription{\@ifnextchar[{\@@IEEEdescription}{\@@IEEEdescription[\relax]}} +\def\@endIEEEitemize{\endlist} +\def\@endIEEEenumerate{\endlist} +\def\@endIEEEdescription{\endlist} + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran itemized list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEitemize[#1]{% + \ifnum\@itemdepth>3\relax\@toodeep\else% + \ifnum\@listdepth>5\relax\@toodeep\else% + \advance\@itemdepth\@ne% + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{2}% right justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEilabelindent% + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % calculate the label width + % the user can override this later if + % they specified a \labelwidth + \settowidth{\labelwidth}{\csname labelitem\romannumeral\the\@itemdepth\endcsname}% + \@IEEEsavelistparams% save our list parameters + \list{\csname\@itemitem\endcsname}{% + \@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % IEEElabelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}% + \fi}\fi\fi}% + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran enumerate list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEenumerate[#1]{% + \ifnum\@enumdepth>3\relax\@toodeep\else% + \ifnum\@listdepth>5\relax\@toodeep\else% + \advance\@enumdepth\@ne% + \edef\@enumctr{enum\romannumeral\the\@enumdepth}% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{2}% right justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEelabelindent% + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % calculate the label width + % We'll set it to the width suitable for all labels using + % normalfont 1) to 9) + % The user can override this later + \settowidth{\labelwidth}{9)}% + \@IEEEsavelistparams% save our list parameters + \list{\csname label\@enumctr\endcsname}{\usecounter{\@enumctr}% + \@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % IEEElabelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}% + \fi}\fi\fi}% + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran description list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEdescription[#1]{% + \ifnum\@listdepth>5\relax\@toodeep\else% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{0}% left justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEdlabelindent% + % assume normal labelsep + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % Bogus label width in case the user forgets + % to set it. + % TIP: If you want to see what a variable's width is you + % can use the TeX command \showthe\width-variable to + % display it on the screen during compilation + % (This might be helpful to know when you need to find out + % which label is the widest) + \settowidth{\labelwidth}{Hello}% + \@IEEEsavelistparams% save our list parameters + \list{}{\@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % labelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}\relax% + \fi}\fi} + +% v1.6b we use one makelabel that does justification as needed. +\def\@IEEEiedmakelabel#1{\relax\if\@IEEEiedjustify 0\relax +\makebox[\labelwidth][l]{\normalfont #1}\else +\if\@IEEEiedjustify 1\relax +\makebox[\labelwidth][c]{\normalfont #1}\else +\makebox[\labelwidth][r]{\normalfont #1}\fi\fi} + + +% compsoc uses a larger value for the normal labelsep +% and also extra spacing above and below each list +\ifCLASSOPTIONcompsoc + \IEEEiednormlabelsep 1.2em + \IEEEiedtopsep 6pt plus 3pt minus 3pt +\fi + + +% VERSE and QUOTE +% V1.7 define environments with newenvironment +\newenvironment{verse}{\let\\=\@centercr + \list{}{\itemsep\z@ \itemindent -1.5em \listparindent \itemindent + \rightmargin\leftmargin\advance\leftmargin 1.5em}\item\relax} + {\endlist} +\newenvironment{quotation}{\list{}{\listparindent 1.5em \itemindent\listparindent + \rightmargin\leftmargin \parsep 0pt plus 1pt}\item\relax} + {\endlist} +\newenvironment{quote}{\list{}{\rightmargin\leftmargin}\item\relax} + {\endlist} + + +% \titlepage +% provided only for backward compatibility. \maketitle is the correct +% way to create the title page. +\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \else \newpage \fi \thispagestyle{empty}\c@page\z@} +\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi} + +% standard values from article.cls +\arraycolsep 5pt +\arrayrulewidth .4pt +\doublerulesep 2pt + +\tabcolsep 6pt +\tabbingsep 0.5em + + +%% FOOTNOTES +% +%\skip\footins 10pt plus 4pt minus 2pt +% V1.6 respond to changes in font size +% space added above the footnotes (if present) +\skip\footins 0.9\baselineskip plus 0.4\baselineskip minus 0.2\baselineskip + +% V1.6, we need to make \footnotesep responsive to changes +% in \baselineskip or strange spacings will result when in +% draft mode. Here is a little LaTeX secret - \footnotesep +% determines the height of an invisible strut that is placed +% *above* the baseline of footnotes after the first. Since +% LaTeX considers the space for characters to be 0.7\baselineskip +% above the baseline and 0.3\baselineskip below it, we need to +% use 0.7\baselineskip as a \footnotesep to maintain equal spacing +% between all the lines of the footnotes. The IEEE often uses a tad +% more, so use 0.8\baselineskip. This slightly larger value also helps +% the text to clear the footnote marks. Note that \thanks in IEEEtran +% uses its own value of \footnotesep which is set in \maketitle. +{\footnotesize +\global\footnotesep 0.8\baselineskip} + + +\skip\@mpfootins = \skip\footins +\fboxsep = 3pt +\fboxrule = .4pt +% V1.6 use 1em, then use LaTeX2e's \@makefnmark +% Note that the IEEE normally *left* aligns the footnote marks, so we don't need +% box resizing tricks here. +\long\def\@makefntext#1{\parindent 1em\indent\hbox{\@makefnmark}#1}% V1.6 use 1em +% V1.7 compsoc does not use superscipts for footnote marks +\ifCLASSOPTIONcompsoc +\def\@IEEEcompsocmakefnmark{\hbox{\normalfont\@thefnmark.\ }} +\long\def\@makefntext#1{\parindent 1em\indent\hbox{\@IEEEcompsocmakefnmark}#1} +\fi + +% The IEEE does not use footnote rules +\def\footnoterule{} + +% V1.7 for compsoc, the IEEE uses a footnote rule only for \thanks. We devise a "one-shot" +% system to implement this. +\newif\if@IEEEenableoneshotfootnoterule +\@IEEEenableoneshotfootnoterulefalse +\ifCLASSOPTIONcompsoc +\def\footnoterule{\relax\if@IEEEenableoneshotfootnoterule +\kern-5pt +\hbox to \columnwidth{\hfill\vrule width 0.5\columnwidth height 0.4pt\hfill} +\kern4.6pt +\global\@IEEEenableoneshotfootnoterulefalse +\else +\relax +\fi} +\fi + +% V1.6 do not allow LaTeX to break a footnote across multiple pages +\interfootnotelinepenalty=10000 + +% V1.6 discourage breaks within equations +% Note that amsmath normally sets this to 10000, +% but LaTeX2e normally uses 100. +\interdisplaylinepenalty=2500 + +% default allows section depth up to /paragraph +\setcounter{secnumdepth}{4} + +% technotes do not allow /paragraph +\ifCLASSOPTIONtechnote + \setcounter{secnumdepth}{3} +\fi +% neither do compsoc conferences +\@IEEEcompsocconfonly{\setcounter{secnumdepth}{3}} + + +\newcounter{section} +\newcounter{subsection}[section] +\newcounter{subsubsection}[subsection] +\newcounter{paragraph}[subsubsection] + +% used only by IEEEtran's IEEEeqnarray as other packages may +% have their own, different, implementations +\newcounter{IEEEsubequation}[equation] + +% as shown when called by user from \ref, \label and in table of contents +\def\theequation{\arabic{equation}} % 1 +\def\theIEEEsubequation{\theequation\alph{IEEEsubequation}} % 1a (used only by IEEEtran's IEEEeqnarray) +\ifCLASSOPTIONcompsoc +% compsoc is all arabic +\def\thesection{\arabic{section}} +\def\thesubsection{\thesection.\arabic{subsection}} +\def\thesubsubsection{\thesubsection.\arabic{subsubsection}} +\def\theparagraph{\thesubsubsection.\arabic{paragraph}} +\else +\def\thesection{\Roman{section}} % I +% V1.7, \mbox prevents breaks around - +\def\thesubsection{\mbox{\thesection-\Alph{subsection}}} % I-A +% V1.7 use I-A1 format used by the IEEE rather than I-A.1 +\def\thesubsubsection{\thesubsection\arabic{subsubsection}} % I-A1 +\def\theparagraph{\thesubsubsection\alph{paragraph}} % I-A1a +\fi + +% From Heiko Oberdiek. Because of the \mbox in \thesubsection, we need to +% tell hyperref to disable the \mbox command when making PDF bookmarks. +% This done already with hyperref.sty version 6.74o and later, but +% it will not hurt to do it here again for users of older versions. +\@ifundefined{pdfstringdefPreHook}{\let\pdfstringdefPreHook\@empty}{}% +\g@addto@macro\pdfstringdefPreHook{\let\mbox\relax} + + +% Main text forms (how shown in main text headings) +% V1.6, using \thesection in \thesectiondis allows changes +% in the former to automatically appear in the latter +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONconference% compsoc conference + \def\thesectiondis{\thesection.} + \def\thesubsectiondis{\thesectiondis\arabic{subsection}.} + \def\thesubsubsectiondis{\thesubsectiondis\arabic{subsubsection}.} + \def\theparagraphdis{\thesubsubsectiondis\arabic{paragraph}.} + \else% compsoc not conferencs + \def\thesectiondis{\thesection} + \def\thesubsectiondis{\thesectiondis.\arabic{subsection}} + \def\thesubsubsectiondis{\thesubsectiondis.\arabic{subsubsection}} + \def\theparagraphdis{\thesubsubsectiondis.\arabic{paragraph}} + \fi +\else% not compsoc + \def\thesectiondis{\thesection.} % I. + \def\thesubsectiondis{\Alph{subsection}.} % B. + \def\thesubsubsectiondis{\arabic{subsubsection})} % 3) + \def\theparagraphdis{\alph{paragraph})} % d) +\fi + +% just like LaTeX2e's \@eqnnum +\def\theequationdis{{\normalfont \normalcolor (\theequation)}}% (1) +% IEEEsubequation used only by IEEEtran's IEEEeqnarray +\def\theIEEEsubequationdis{{\normalfont \normalcolor (\theIEEEsubequation)}}% (1a) +% redirect LaTeX2e's equation number display and all that depend on +% it, through IEEEtran's \theequationdis +\def\@eqnnum{\theequationdis} + + + +% V1.7 provide string macros as article.cls does +\def\contentsname{Contents} +\def\listfigurename{List of Figures} +\def\listtablename{List of Tables} +\def\refname{References} +\def\indexname{Index} +\def\figurename{Fig.} +\def\tablename{TABLE} +\@IEEEcompsocconfonly{\def\figurename{Figure}} +\def\partname{Part} +\def\appendixname{Appendix} +\def\abstractname{Abstract} +% IEEE specific names +\def\IEEEkeywordsname{Index Terms} +\def\IEEEproofname{Proof} + + +% LIST OF FIGURES AND TABLES AND TABLE OF CONTENTS +% +\def\@pnumwidth{1.55em} +\def\@tocrmarg{2.55em} +\def\@dotsep{4.5} +\setcounter{tocdepth}{3} + +% adjusted some spacings here so that section numbers will not easily +% collide with the section titles. +% VIII; VIII-A; and VIII-A.1 are usually the worst offenders. +% MDS 1/2001 +\def\tableofcontents{\section*{\contentsname}\@starttoc{toc}} +\def\l@section#1#2{\addpenalty{\@secpenalty}\addvspace{1.0em plus 1pt}% + \@tempdima 2.75em \begingroup \parindent \z@ \rightskip \@pnumwidth% + \parfillskip-\@pnumwidth {\bfseries\leavevmode #1}\hfil\hbox to\@pnumwidth{\hss #2}\par% + \endgroup} +% argument format #1:level, #2:labelindent,#3:labelsep +\def\l@subsection{\@dottedtocline{2}{2.75em}{3.75em}} +\def\l@subsubsection{\@dottedtocline{3}{6.5em}{4.5em}} +% must provide \l@ defs for ALL sublevels EVEN if tocdepth +% is such as they will not appear in the table of contents +% these defs are how TOC knows what level these things are! +\def\l@paragraph{\@dottedtocline{4}{6.5em}{5.5em}} +\def\l@subparagraph{\@dottedtocline{5}{6.5em}{6.5em}} +\def\listoffigures{\section*{\listfigurename}\@starttoc{lof}} +\def\l@figure{\@dottedtocline{1}{0em}{2.75em}} +\def\listoftables{\section*{\listtablename}\@starttoc{lot}} +\let\l@table\l@figure + + +% Definitions for floats +% +% Normal Floats +% V1.8 floatsep et al. revised down by 0.15\baselineskip +% to account for the sideeffects of \topskip compensation +\floatsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip +\textfloatsep 1.55\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip +\@fptop 0pt plus 1fil +\@fpsep 0.75\baselineskip plus 2fil +\@fpbot 0pt plus 1fil +\def\topfraction{0.9} +\def\bottomfraction{0.4} +\def\floatpagefraction{0.8} +% V1.7, let top floats approach 90% of page +\def\textfraction{0.1} + +% Double Column Floats +\dblfloatsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip + +\dbltextfloatsep 1.55\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip +% Note that it would be nice if the rubber here actually worked in LaTeX2e. +% There is a long standing limitation in LaTeX, first discovered (to the best +% of my knowledge) by Alan Jeffrey in 1992. LaTeX ignores the stretchable +% portion of \dbltextfloatsep, and as a result, double column figures can and +% do result in an non-integer number of lines in the main text columns with +% underfull vbox errors as a consequence. A post to comp.text.tex +% by Donald Arseneau confirms that this had not yet been fixed in 1998. +% IEEEtran V1.6 will fix this problem for you in the titles, but it doesn't +% protect you from other double floats. Happy vspace'ing. + +\@dblfptop 0pt plus 1fil +\@dblfpsep 0.75\baselineskip plus 2fil +\@dblfpbot 0pt plus 1fil +\def\dbltopfraction{0.8} +\def\dblfloatpagefraction{0.8} +\setcounter{dbltopnumber}{4} + +\intextsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip +\setcounter{topnumber}{2} +\setcounter{bottomnumber}{2} +\setcounter{totalnumber}{4} + + + +% article class provides these, we should too. +\newlength\abovecaptionskip +\newlength\belowcaptionskip +% but only \abovecaptionskip is used above figure captions and *below* table +% captions +\setlength\abovecaptionskip{0.5\baselineskip} +% compsoc journals are a little more generous +\ifCLASSOPTIONcompsoc\ifCLASSOPTIONjournal + \setlength\abovecaptionskip{0.75\baselineskip} +\fi\fi +\setlength\belowcaptionskip{0pt} +% V1.6 create hooks in case the caption spacing ever needs to be +% overridden by a user +\def\@IEEEfigurecaptionsepspace{\vskip\abovecaptionskip\relax}% +\def\@IEEEtablecaptionsepspace{\vskip\abovecaptionskip\relax}% + + +% 1.6b revise caption system so that \@makecaption uses two arguments +% as with LaTeX2e. Otherwise, there will be problems when using hyperref. +\def\@IEEEtablestring{table} + + +% V1.8 compensate for \topskip so top of top figures align with tops of the first lines of main text +% here we calculate a space equal to the amount \topskip exceeds the main text height +% we hook in at \@floatboxreset +\def\@IEEEfiguretopskipspace{\ifdim\prevdepth=-1000pt\relax +\setlength{\@IEEEtrantmpdimenA}{1\topskip}\relax +\addtolength{\@IEEEtrantmpdimenA}{-0.7\@IEEEnormalsizeunitybaselineskip}\relax +\vspace*{\@IEEEtrantmpdimenA}\fi} +% V1.8 compensate for \topskip at the top of top tables so caption text is on main text baseline +% use a strut set on the caption baseline within \@makecaption +\def\@IEEEtabletopskipstrut{\ifdim\prevdepth=-1000pt\rule{0pt}{\topskip}\fi} +% the \ifdim\prevdepth checks are always expected to be true for IEEE style float caption ordering +% because top of figure content and top of captions in tables is the first thing on the vertical +% list of these floats +% thanks to Donald Arseneau for his 2000/11/11 post "Re: caption hacking" with info on this topic. + + +\ifCLASSOPTIONcompsoc +% V1.7 compsoc \@makecaption +\ifCLASSOPTIONconference% compsoc conference +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\footnotesize {#1.}\nobreakspace\scshape #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\footnotesize \noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, center +\else% +\hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}% +\fi\fi} +% +\else% nonconference compsoc +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\sffamily\footnotesize #1}\\{\normalfont\sffamily\footnotesize #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +\setbox\@tempboxa\hbox{\normalfont\sffamily\footnotesize {#1.}\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\sffamily\footnotesize {#1.}\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\sffamily\footnotesize \noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, left justify +\else% +\hbox to\hsize{\normalfont\sffamily\footnotesize\box\@tempboxa\hfil}% +\fi\fi} +\fi +% +\else% traditional noncompsoc \@makecaption +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\footnotesize #1}\\{\normalfont\footnotesize\scshape #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +% 3/2001 use footnotesize, not small; use two nonbreaking spaces, not one +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\footnotesize\noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, center if conference, left justify otherwise +\else% +\ifCLASSOPTIONconference \hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}% +\else \hbox to\hsize{\normalfont\footnotesize\box\@tempboxa\hfil}% +\fi\fi\fi} +\fi + + + +% V1.7 disable captions class option, do so in a way that retains operation of \label +% within \caption +\ifCLASSOPTIONcaptionsoff +\long\def\@makecaption#1#2{\vspace*{2em}\footnotesize\bgroup\par\addvspace{0.5\baselineskip}\centering{\footnotesize #1}\par\addvspace{0.5\baselineskip}\egroup% +\let\@IEEEtemporiglabeldefsave\label +\let\@IEEEtemplabelargsave\relax +\def\label##1{\gdef\@IEEEtemplabelargsave{##1}}% +\setbox\@tempboxa\hbox{#2}% +\let\label\@IEEEtemporiglabeldefsave +\ifx\@IEEEtemplabelargsave\relax\else\label{\@IEEEtemplabelargsave}\fi} +\fi + + +% V1.7 define end environments with \def not \let so as to work OK with +% preview-latex +\newcounter{figure} +\def\thefigure{\@arabic\c@figure} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename\nobreakspace\thefigure} +% V1.8 within figures add \@IEEEfiguretopskipspace compensation to LaTeX2e's \@floatboxreset +\def\figure{\def\@floatboxreset{\reset@font\normalsize\@setminipage\@IEEEfiguretopskipspace}\@float{figure}} +\def\endfigure{\end@float} +% V1.8 also add \@IEEEfiguretopskipspace compensation to \figure* +\@namedef{figure*}{\def\@floatboxreset{\reset@font\normalsize\@setminipage\@IEEEfiguretopskipspace}\@dblfloat{figure}} +\@namedef{endfigure*}{\end@dblfloat} + +\newcounter{table} +\ifCLASSOPTIONcompsoc +\def\thetable{\arabic{table}} +\else +\def\thetable{\@Roman\c@table} +\fi +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename\nobreakspace\thetable} +% V1.6 The IEEE uses 8pt text for tables +% within tables alter LaTeX2e's \@floatboxreset to use \footnotesize +\def\table{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@float{table}} +\def\endtable{\end@float} +% v1.6b double column tables need to default to footnotesize as well. +\@namedef{table*}{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@dblfloat{table}} +\@namedef{endtable*}{\end@dblfloat} + + + + +%% -- Command Argument Scanning Support Functions -- +%% V1.8a + +% usage: \@IEEEstripouterbraces*{} +% \@IEEEstripouterbraces fully expands its argument (which it then stores +% in \@IEEEstripouterbracesarg) via \edef, then removes any outer enclosing +% braces, and finally stores the result in the macro +% \@IEEEstrippedouterbraces. +% +% For example: +% \@IEEEstripouterbraces{{{{ab}c}}} +% results in: +% +% \@IEEEstripouterbracesarg ==> a macro containing {{{ab}c}} +% \@IEEEstrippedouterbraces ==> a macro containing {ab}c +% +% the *-star form,\@IEEEstripouterbraces*, does not expand the argument +% contents during processing +\def\@IEEEstripouterbraces{\@ifstar{\let\@IEEEstripouterbracesdef=\def\@@IEEEstripouterbraces}{\let\@IEEEstripouterbracesdef=\edef\@@IEEEstripouterbraces}} + +\def\@@IEEEstripouterbraces#1{\@IEEEstripouterbracesdef\@IEEEstripouterbracesarg{#1}\relax +% If the macro is unchanged after being acquired as a single delimited +% argument, we know we have one sequence of tokens without any enclosing +% braces. Loop until this is true. +\loop + \expandafter\@@@IEEEstripouterbraces\@IEEEstripouterbracesarg\@IEEEgeneralsequenceDELIMITER +\ifx\@IEEEstrippedouterbraces\@IEEEstripouterbracesarg +\else + \let\@IEEEstripouterbracesarg\@IEEEstrippedouterbraces +\repeat} + +\def\@@@IEEEstripouterbraces#1\@IEEEgeneralsequenceDELIMITER{\def\@IEEEstrippedouterbraces{#1}} + + + +% usage: \@IEEEextractgroup*{} +% \@IEEEextractgroup fully expands its argument (which it then stores in +% \@IEEEextractgrouparg) via \edef and then assigns the first "brace group" +% of tokens to the macro \@IEEEextractedgroup. +% The remaining groups, if any, are stored in the macro +% \@IEEEextractedgroupremain. If the argument does not contain the requisite +% groups, the respective macros will be defined to be empty. +% There is an asymmetry in that \@IEEEextractedgroup is stripped of its first +% outer grouping while \@IEEEextractedgroupremain retains even the outer +% grouping (if present) that originally identified it as a group. +% +% For example: +% \@IEEEextractgroup{{{ab}}{c{de}}} +% results in: +% +% \@IEEEextractgrouparg ==> a macro containing {{ab}}{c{de}} +% \@IEEEextractedgroup ==> a macro containing {ab} +% \@IEEEextractedgroupremain ==> a macro containing {c{de}} +% +% The *-star form, \@IEEEextractgroup*, does not expand its argument +% contents during processing. +\def\@IEEEextractgroup{\@ifstar{\let\@IEEEextractgroupdef=\def\@@IEEEextractgroup}{\let\@IEEEextractgroupdef=\edef\@@IEEEextractgroup}} + +\def\@@IEEEextractgroup#1{\@IEEEextractgroupdef\@IEEEextractgrouparg{#1}\relax +% trap the case of an empty extracted group as this would cause problems with +% \@IEEEextractgroupremain's argument acquisition +\ifx\@IEEEextractgrouparg\@empty + \def\@IEEEextractedgroup{}\relax + \def\@IEEEextractedgroupremain{}\relax +\else + % We have to use some dirty tricks here. We want to insert {} around + % whatever remains after the first group so that TeX's argument scanner + % will preserve any originally enclosing braces as well as provide an + % empty argument to acquire even if there isn't a second group. + % In this first of two dirty tricks, we put a } at the end of the structure + % we are going to extract from. The \ifnum0=`{\fi keeps TeX happy to allow + % what would otherwise be an unbalanced macro definition for + % \@@IEEEextractgroup to be acceptable to it. + \ifnum0=`{\fi\expandafter\@IEEEextractgroupremain\@IEEEextractgrouparg}\relax +\fi} + +% In the second part of the dirty tricks, we insert a leading { right after +% the first group is acquired, but before the remainder is. Again, the +% \ifnum0=`}\fi keeps TeX happy during definition time, but will disappear +% during run time. +\def\@IEEEextractgroupremain#1{\def\@IEEEextractedgroup{#1}\expandafter\@@IEEEextractgroupremain\expandafter{\ifnum0=`}\fi} + +\def\@@IEEEextractgroupremain#1{\def\@IEEEextractedgroupremain{#1}} + + + +% \@IEEEextracttoken relocated at top because margin setting commands rely on it + + + +% usage: \@IEEEextracttokengroups*{} +% \@IEEEextracttokengroups fully expands its argument (which it then stores +% in \@IEEEextracttokengroupsarg) and then assigns the first "brace group" of +% tokens (with the outermost braces removed) to the macro +% \@IEEEextractedfirstgroup. +% The meaning of the first nonbrace (but including the empty group) token +% within this first group is assigned via \let to \@IEEEextractedfirsttoken +% as well as stored in the macro \@IEEEextractedfirsttokenmacro. If a first +% nonbrace token does not exist (or is an empty group), these will be \relax +% and empty, respectively. Tokens that would otherwise be discarded during +% the acquisition of the first token in the first group are stored in +% \@IEEEextractedfirsttokensdiscarded, however their original relative brace +% nesting depths are not guaranteed to be preserved. +% The first group within this first group is stored in the macro +% \@IEEEextractedfirstfirstgroup. +% Likewise for the next group after the first: \@IEEEextractednextgroup, +% \@IEEEextractednextfirstgroup, \@IEEEextractednextgroupfirsttoken, +% \@IEEEextractednextgroupfirsttokenmacro, and +% \@IEEEextractednextfirsttokensdiscarded. +% All tokens/groups after the first group, including any enclosing braces, +% are stored in the macro \@IEEEextractedafterfirstgroupremain which will +% be empty if none exist. +% +% For example: +% \@IEEEextracttokengroups{{{ab}{cd}}{{ef}g}} +% will result in: +% +% \@IEEEextracttokengroupsarg ==> a macro containing {{ab}{cd}}{{ef}g} +% \@IEEEextractedfirstgroup ==> a macro containing {ab}{cd} +% \@IEEEextractedafterfirstgroupremain ==> a macro containing {{ef}g} +% \@IEEEextractedfirsttoken ==> the letter a +% \@IEEEextractedfirsttokenmacro ==> a macro containing a +% \@IEEEextractedfirsttokensdiscarded ==> a macro containing bcd +% \@IEEEextractedfirstfirstgroup ==> a macro containing ab +% \@IEEEextractednextgroup ==> a macro containing {ef}g +% \@IEEEextractednextfirsttoken ==> the letter e +% \@IEEEextractednextfirsttokenmacro ==> a macro containing e +% \@IEEEextractednextfirsttokensdiscarded ==> a macro containing fg +% \@IEEEextractednextfirstgroup ==> a macro containing ef +% +% If given an empty argument, \@IEEEextractedfirsttoken and +% \@IEEEextractednextfirsttoken will be set to \relax +% and all the macros will be empty. +% the *-star form, \@IEEEextracttokengroups*, does not expand its argument +% contents during processing. +% +% Depends on: \@IEEEextractgroup, \@IEEEextracttoken +\def\@IEEEextracttokengroups{\@ifstar{\let\@IEEEextracttokengroupsdef=\def\@@IEEEextracttokengroups}{\let\@IEEEextracttokengroupsdef=\edef\@@IEEEextracttokengroups}} +\def\@@IEEEextracttokengroups#1{\@IEEEextracttokengroupsdef\@IEEEextracttokengroupsarg{#1}\relax +% begin extraction, these functions are safe with empty arguments +% first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextracttokengroupsarg}\relax +\let\@IEEEextractedfirstgroup\@IEEEextractedgroup +\let\@IEEEextractedafterfirstgroupremain\@IEEEextractedgroupremain +\expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax +\let\@IEEEextractedfirsttoken\@IEEEextractedtoken +\let\@IEEEextractedfirsttokenmacro\@IEEEextractedtokenmacro +\let\@IEEEextractedfirsttokensdiscarded\@IEEEextractedtokensdiscarded +% first first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax +\let\@IEEEextractedfirstfirstgroup\@IEEEextractedgroup +% next group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedafterfirstgroupremain}\relax +\let\@IEEEextractednextgroup\@IEEEextractedgroup +\expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractednextgroup}\relax +\let\@IEEEextractednextfirsttoken\@IEEEextractedtoken +\let\@IEEEextractednextfirsttokenmacro\@IEEEextractedtokenmacro +\let\@IEEEextractednextfirsttokensdiscarded\@IEEEextractedtokensdiscarded +% next first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractednextgroup}\relax +\let\@IEEEextractednextfirstgroup\@IEEEextractedgroup} + + +%% -- End of Command Argument Scanning Support Functions -- + + + + +%% +%% START OF IEEEeqnarray DEFINITIONS +%% +%% Inspired by the concepts, examples, and previous works of LaTeX +%% coders and developers such as Donald Arseneau, Fred Bartlett, +%% David Carlisle, Tony Liu, Frank Mittelbach, Piet van Oostrum, +%% Roland Winkler and Mark Wooding. +%% I don't make the claim that my work here is even near their calibre. ;) + + +\newif\if@IEEEeqnarrayboxnojot% flag to indicate if the environment was called as the star form +\@IEEEeqnarrayboxnojotfalse + +\newif\if@advanceIEEEeqncolcnt% tracks if the environment should advance the col counter +% allows a way to make an \IEEEeqnarraybox that can be used within an \IEEEeqnarray +% used by IEEEeqnarraymulticol so that it can work properly in both +\@advanceIEEEeqncolcnttrue + +\newcount\@IEEEeqnnumcols % tracks how many IEEEeqnarray cols are defined +\newcount\@IEEEeqncolcnt % tracks how many IEEEeqnarray cols the user actually used + + +% The default math style used by the columns +\def\IEEEeqnarraymathstyle{\displaystyle} +% The default text style used by the columns +% default to using the current font +\def\IEEEeqnarraytextstyle{\relax} + +% like the iedlistdecl but for \IEEEeqnarray +\def\IEEEeqnarraydecl{\relax} +\def\IEEEeqnarrayboxdecl{\relax} + + + +% V1.8 flags to indicate that equation numbering is to persist +\newif\if@IEEEeqnumpersist% +\@IEEEeqnumpersistfalse +\newif\if@IEEEsubeqnumpersist% +\@IEEEsubeqnumpersistfalse +% +% V1.8 flags to indicate if (sub)equation number of last line was preadvanced +\newif\if@IEEEeqnumpreadv% +\@IEEEeqnumpreadvfalse +\newif\if@IEEEsubeqnumpreadv% +\@IEEEsubeqnumpreadvfalse + +\newcount\@IEEEsubeqnnumrollback% saves previous value of IEEEsubequation number in case we need to restore it + +% \yesnumber is the opposite of \nonumber +% a novel concept with the same def as the equationarray package +% However, we give IEEE versions too since some LaTeX packages such as +% the MDWtools mathenv.sty redefine \nonumber to something else. +% This command is intended for use in non-IEEEeqnarray math environments +\providecommand{\yesnumber}{\global\@eqnswtrue} + + +% IEEEyes/nonumber +% V1.8 add persistant * forms +% These commands can alter the type of equation an IEEEeqnarray line is. +\def\IEEEyesnumber{\@ifstar{\global\@IEEEeqnumpersisttrue\global\@IEEEsubeqnumpersistfalse\@IEEEyesnumber}{\@IEEEyesnumber}} + +\def\@IEEEyesnumber{\global\@eqnswtrue +\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray +\ifnum\c@IEEEsubequation>0\relax + \stepcounter{equation}\setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label +\fi +% even if we reached this eqn num via a preadv, it is legit now +\global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse +\fi} + +\def\IEEEnonumber{\@ifstar{\global\@IEEEeqnumpersistfalse\global\@IEEEsubeqnumpersistfalse\global\@eqnswfalse}{\global\@eqnswfalse}} + + +\def\IEEEyessubnumber{\@ifstar{\global\@IEEEsubeqnumpersisttrue\@IEEEyessubnumber}{\@IEEEyessubnumber}} +% +\def\@IEEEyessubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray + \ifnum\c@IEEEsubequation>0\relax% if it already is a subequation, we are good to go as-is + \else% if we are a regular equation we have to watch out for two cases + \if@IEEEeqnumpreadv% if this equation is the result of a preadvance, backout and bump the sub eqnnum + \global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\addtocounter{IEEEsubequation}{1}\relax + \else% non-preadvanced equations just need initialization of their sub eqnnum + \setcounter{IEEEsubequation}{1}\relax + \fi + \fi% fi already is subequation + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore + \global\@eqnswtrue +\fi} + + +\def\IEEEnosubnumber{\@ifstar{\global\@IEEEsubeqnumpersistfalse\@IEEEnosubnumber}{\@IEEEnosubnumber}} +% +\def\@IEEEnosubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray + \if@eqnsw % we do nothing unless we know we will display because we play with the counters here + % if it currently is a subequation, bump up to the next equation number and turn off the subequation + \ifnum\c@IEEEsubequation>0\relax\addtocounter{equation}{1}\setcounter{IEEEsubequation}{0}\relax + \fi + \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore + \gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi +\fi} + + + +% allows users to "push away" equations that get too close to the equation numbers +\def\IEEEeqnarraynumspace{\hphantom{\ifnum\c@IEEEsubequation>0\relax\theIEEEsubequationdis\else\theequationdis\fi}} + +% provides a way to span multiple columns within IEEEeqnarray environments +% will consider \if@advanceIEEEeqncolcnt before globally advancing the +% column counter - so as to work within \IEEEeqnarraybox +% usage: \IEEEeqnarraymulticol{number cols. to span}{col type}{cell text} +\long\def\IEEEeqnarraymulticol#1#2#3{\multispan{#1}\relax +% check if column is defined for the precolumn definition +% We have to be careful here because TeX scans for & even within an \iffalse +% where it does not expand macros. So, if we used only one \ifx and a #3 +% appeared in the false branch and the user inserted another alignment +% structure that uses & in the \IEEEeqnarraymulticol{}, TeX will not see that +% there is an inner alignment in the false branch yet still will see any & +% there and will think that they apply to the outer alignment resulting in an +% incomplete \ifx error. +% So, here we use separate checks for the pre and post parts in order to keep +% the #3 outside of all conditionals. +\relax\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax +\csname @IEEEeqnarraycolPRE#2\endcsname +\else% if not, error and use default type +\@IEEEclspkgerror{Invalid column type "#2" in \string\IEEEeqnarraymulticol.\MessageBreak +Using a default centering column instead}% +{You must define IEEEeqnarray column types before use.}% +\csname @IEEEeqnarraycolPRE@IEEEdefault\endcsname +\fi +% The ten \relax are to help prevent misleading error messages in case a user +% accidently inserted a macro that tries to acquire additional arguments. +#3\relax\relax\relax\relax\relax\relax\relax\relax\relax\relax +% check if column is defined for the postcolumn definition +\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax +\csname @IEEEeqnarraycolPOST#2\endcsname +\else% if not, use the default type +\csname @IEEEeqnarraycolPOST@IEEEdefault\endcsname +\fi +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by #1\relax\fi} + +% like \omit, but maintains track of the column counter for \IEEEeqnarray +\def\IEEEeqnarrayomit{\omit\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by 1\relax\fi} + + +% provides a way to define a letter referenced column type +% usage: \IEEEeqnarraydefcol{col. type letter/name}{pre insertion text}{post insertion text} +\def\IEEEeqnarraydefcol#1#2#3{\expandafter\def\csname @IEEEeqnarraycolPRE#1\endcsname{#2}% +\expandafter\def\csname @IEEEeqnarraycolPOST#1\endcsname{#3}% +\expandafter\def\csname @IEEEeqnarraycolDEF#1\endcsname{1}} + + +% provides a way to define a numerically referenced inter-column glue types +% usage: \IEEEeqnarraydefcolsep{col. glue number}{glue definition} +\def\IEEEeqnarraydefcolsep#1#2{\expandafter\def\csname @IEEEeqnarraycolSEP\romannumeral #1\endcsname{#2}% +\expandafter\def\csname @IEEEeqnarraycolSEPDEF\romannumeral #1\endcsname{1}} + + +\def\@IEEEeqnarraycolisdefined{1}% just a macro for 1, used for checking undefined column types + + +% expands and appends the given argument to the \@IEEEtrantmptoksA token list +% used to build up the \halign preamble +\def\@IEEEappendtoksA#1{\edef\@@IEEEappendtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA #1}}% +\@@IEEEappendtoksA} + +% also appends to \@IEEEtrantmptoksA, but does not expand the argument +% uses \toks8 as a scratchpad register +\def\@IEEEappendNOEXPANDtoksA#1{\toks8={#1}% +\edef\@@IEEEappendNOEXPANDtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA\the\toks8}}% +\@@IEEEappendNOEXPANDtoksA} + +% define some common column types for the user +% math +\IEEEeqnarraydefcol{l}{$\IEEEeqnarraymathstyle}{$\hfil} +\IEEEeqnarraydefcol{c}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} +\IEEEeqnarraydefcol{r}{\hfil$\IEEEeqnarraymathstyle}{$} +\IEEEeqnarraydefcol{L}{$\IEEEeqnarraymathstyle{}}{{}$\hfil} +\IEEEeqnarraydefcol{C}{\hfil$\IEEEeqnarraymathstyle{}}{{}$\hfil} +\IEEEeqnarraydefcol{R}{\hfil$\IEEEeqnarraymathstyle{}}{{}$} +% text +\IEEEeqnarraydefcol{s}{\IEEEeqnarraytextstyle}{\hfil} +\IEEEeqnarraydefcol{t}{\hfil\IEEEeqnarraytextstyle}{\hfil} +\IEEEeqnarraydefcol{u}{\hfil\IEEEeqnarraytextstyle}{} + +% vertical rules +\IEEEeqnarraydefcol{v}{}{\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{vv}{\vrule width\arrayrulewidth\hfil}{\hfil\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{V}{}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{VV}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth\hfil}% +{\hfil\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} + +% horizontal rules +\IEEEeqnarraydefcol{h}{}{\leaders\hrule height\arrayrulewidth\hfil} +\IEEEeqnarraydefcol{H}{}{\leaders\vbox{\hrule width\arrayrulewidth\vskip\doublerulesep\hrule width\arrayrulewidth}\hfil} + +% plain +\IEEEeqnarraydefcol{x}{}{} +\IEEEeqnarraydefcol{X}{$}{$} + +% the default column type to use in the event a column type is not defined +\IEEEeqnarraydefcol{@IEEEdefault}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} + + +% a zero tabskip (used for "-" col types) +\def\@IEEEeqnarraycolSEPzero{0pt plus 0pt minus 0pt} +% a centering tabskip (used for "+" col types) +\def\@IEEEeqnarraycolSEPcenter{1000pt plus 0pt minus 1000pt} + +% top level default tabskip glues for the start, end, and inter-column +% may be reset within environments not always at the top level, e.g., \IEEEeqnarraybox +\edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPcenter}% default start glue +\edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPcenter}% default end glue +\edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue + + + +% creates a vertical rule that extends from the bottom to the top a a cell +% Provided in case other packages redefine \vline some other way. +% usage: \IEEEeqnarrayvrule[rule thickness] +% If no argument is provided, \arrayrulewidth will be used for the rule thickness. +\newcommand\IEEEeqnarrayvrule[1][\arrayrulewidth]{\vrule\@width#1\relax} + +% creates a blank separator row +% usage: \IEEEeqnarrayseprow[separation length][font size commands] +% default is \IEEEeqnarrayseprow[0.25\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers +\def\IEEEeqnarrayseprow{\relax\@ifnextchar[{\@IEEEeqnarrayseprow}{\@IEEEeqnarrayseprow[0.25\normalbaselineskip]}} +\def\@IEEEeqnarrayseprow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprow[#1]}{\@@IEEEeqnarrayseprow[#1][\relax]}} +\def\@@IEEEeqnarrayseprow[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% +\ifx\@IEEEeqnarrayseprowARGONE\@empty% +% get the skip value, based on the font commands +% use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 +% assign within a bogus box to confine the font changes +{\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% +\else% +{\setbox0=\hbox{#2\relax\global\skip5=#1}}% +\fi% +\@IEEEeqnarrayhoptolastcolumn\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} + +% creates a blank separator row, but omits all the column templates +% usage: \IEEEeqnarrayseprowcut[separation length][font size commands] +% default is \IEEEeqnarrayseprowcut[0.25\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers +\def\IEEEeqnarrayseprowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarrayseprowcut}{\@IEEEeqnarrayseprowcut[0.25\normalbaselineskip]}} +\def\@IEEEeqnarrayseprowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprowcut[#1]}{\@@IEEEeqnarrayseprowcut[#1][\relax]}} +\def\@@IEEEeqnarrayseprowcut[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% +\ifx\@IEEEeqnarrayseprowARGONE\@empty% +% get the skip value, based on the font commands +% use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 +% assign within a bogus box to confine the font changes +{\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% +\else% +{\setbox0=\hbox{#2\relax\global\skip5=#1}}% +\fi% +\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} + + + +% draws a single rule across all the columns optional +% argument determines the rule width, \arrayrulewidth is the default +% updates column counter as needed and turns off struts +% usage: \IEEEeqnarrayrulerow[rule line thickness] +\def\IEEEeqnarrayrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarrayrulerow}{\@IEEEeqnarrayrulerow[\arrayrulewidth]}} +\def\@IEEEeqnarrayrulerow[#1]{\leaders\hrule height#1\hfil\relax% put in our rule +% turn off any struts +\IEEEeqnarraystrutsize{0pt}{0pt}[\relax]\relax} + + +% draws a double rule by using a single rule row, a separator row, and then +% another single rule row +% first optional argument determines the rule thicknesses, \arrayrulewidth is the default +% second optional argument determines the rule spacing, \doublerulesep is the default +% usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] +\def\IEEEeqnarraydblrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarraydblrulerow}{\@IEEEeqnarraydblrulerow[\arrayrulewidth]}} +\def\@IEEEeqnarraydblrulerow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerow[#1]}% +{\@@IEEEeqnarraydblrulerow[#1][\doublerulesep]}} +\def\@@IEEEeqnarraydblrulerow[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% +% we allow the user to say \IEEEeqnarraydblrulerow[][] +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]\relax% +\fi% +\def\@IEEEeqnarraydblrulerowARG{#2}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\\\IEEEeqnarrayseprow[\doublerulesep][\relax]% +\else% +\\\IEEEeqnarrayseprow[#2][\relax]% +\fi% +\\\multispan{\@IEEEeqnnumcols}% +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\def\@IEEEeqnarraydblrulerowARG{#1}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +} + +% draws a double rule by using a single rule row, a separator (cutting) row, and then +% another single rule row +% first optional argument determines the rule thicknesses, \arrayrulewidth is the default +% second optional argument determines the rule spacing, \doublerulesep is the default +% usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] +\def\IEEEeqnarraydblrulerowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarraydblrulerowcut}{\@IEEEeqnarraydblrulerowcut[\arrayrulewidth]}} +\def\@IEEEeqnarraydblrulerowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerowcut[#1]}% +{\@@IEEEeqnarraydblrulerowcut[#1][\doublerulesep]}} +\def\@@IEEEeqnarraydblrulerowcut[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% +% we allow the user to say \IEEEeqnarraydblrulerow[][] +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +\def\@IEEEeqnarraydblrulerowARG{#2}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\\\IEEEeqnarrayseprowcut[\doublerulesep][\relax]% +\else% +\\\IEEEeqnarrayseprowcut[#2][\relax]% +\fi% +\\\multispan{\@IEEEeqnnumcols}% +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\def\@IEEEeqnarraydblrulerowARG{#1}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +} + + + +% inserts a full row's worth of &'s +% relies on \@IEEEeqnnumcols to provide the correct number of columns +% uses \@IEEEtrantmptoksA, \count0 as scratch registers +\def\@IEEEeqnarrayhoptolastcolumn{\@IEEEtrantmptoksA={}\count0=1\relax% +\loop% add cols if the user did not use them all +\ifnum\count0<\@IEEEeqnnumcols\relax% +\@IEEEappendtoksA{&}% +\advance\count0 by 1\relax% update the col count +\repeat% +\the\@IEEEtrantmptoksA%execute the &'s +} + + + +\newif\if@IEEEeqnarrayISinner % flag to indicate if we are within the lines +\@IEEEeqnarrayISinnerfalse % of an IEEEeqnarray - after the IEEEeqnarraydecl + +\edef\@IEEEeqnarrayTHEstrutheight{0pt} % height and depth of IEEEeqnarray struts +\edef\@IEEEeqnarrayTHEstrutdepth{0pt} + +\edef\@IEEEeqnarrayTHEmasterstrutheight{0pt} % default height and depth of +\edef\@IEEEeqnarrayTHEmasterstrutdepth{0pt} % struts within an IEEEeqnarray + +\edef\@IEEEeqnarrayTHEmasterstrutHSAVE{0pt} % saved master strut height +\edef\@IEEEeqnarrayTHEmasterstrutDSAVE{0pt} % and depth + +\newif\if@IEEEeqnarrayusemasterstrut % flag to indicate that the master strut value +\@IEEEeqnarrayusemasterstruttrue % is to be used + + + +% saves the strut height and depth of the master strut +\def\@IEEEeqnarraymasterstrutsave{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% save values +\edef\@IEEEeqnarrayTHEmasterstrutHSAVE{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutDSAVE{\the\dimen2}} + +% restores the strut height and depth of the master strut +\def\@IEEEeqnarraymasterstrutrestore{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutHSAVE\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutDSAVE\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% restore values +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}} + + +% globally restores the strut height and depth to the +% master values and sets the master strut flag to true +\def\@IEEEeqnarraystrutreset{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% restore values +\xdef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\xdef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\global\@IEEEeqnarrayusemasterstruttrue} + + +% if the master strut is not to be used, make the current +% values of \@IEEEeqnarrayTHEstrutheight, \@IEEEeqnarrayTHEstrutdepth +% and the use master strut flag, global +% this allows user strut commands issued in the last column to be carried +% into the isolation/strut column +\def\@IEEEeqnarrayglobalizestrutstatus{\relax% +\if@IEEEeqnarrayusemasterstrut\else% +\xdef\@IEEEeqnarrayTHEstrutheight{\@IEEEeqnarrayTHEstrutheight}% +\xdef\@IEEEeqnarrayTHEstrutdepth{\@IEEEeqnarrayTHEstrutdepth}% +\global\@IEEEeqnarrayusemasterstrutfalse% +\fi} + + + +% usage: \IEEEeqnarraystrutsize{height}{depth}[font size commands] +% If called outside the lines of an IEEEeqnarray, sets the height +% and depth of both the master and local struts. If called inside +% an IEEEeqnarray line, sets the height and depth of the local strut +% only and sets the flag to indicate the use of the local strut +% values. If the height or depth is left blank, 0.7\normalbaselineskip +% and 0.3\normalbaselineskip will be used, respectively. +% The optional argument can be used to evaluate the lengths under +% a different font size and styles. If none is specified, the current +% font is used. +% uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 +\def\IEEEeqnarraystrutsize#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsize{#1}{#2}}{\@IEEEeqnarraystrutsize{#1}{#2}[\relax]}} +\def\@IEEEeqnarraystrutsize#1#2[#3]{\def\@IEEEeqnarraystrutsizeARG{#1}% +\ifx\@IEEEeqnarraystrutsizeARG\@empty% +{\setbox0=\hbox{#3\relax\global\skip3=0.7\normalbaselineskip}}% +\skip0=\skip3\relax% +\else% arg one present +{\setbox0=\hbox{#3\relax\global\skip3=#1\relax}}% +\skip0=\skip3\relax% +\fi% if null arg +\def\@IEEEeqnarraystrutsizeARG{#2}% +\ifx\@IEEEeqnarraystrutsizeARG\@empty% +{\setbox0=\hbox{#3\relax\global\skip3=0.3\normalbaselineskip}}% +\skip2=\skip3\relax% +\else% arg two present +{\setbox0=\hbox{#3\relax\global\skip3=#2\relax}}% +\skip2=\skip3\relax% +\fi% if null arg +% remove stretchability, just to be safe +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +\if@IEEEeqnarrayISinner% inner does not touch master strut size +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstrutfalse% do not use master +\else% outer, have to set master strut too +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstruttrue% use master strut +\fi} + + +% usage: \IEEEeqnarraystrutsizeadd{added height}{added depth}[font size commands] +% If called outside the lines of an IEEEeqnarray, adds the given height +% and depth to both the master and local struts. +% If called inside an IEEEeqnarray line, adds the given height and depth +% to the local strut only and sets the flag to indicate the use +% of the local strut values. +% In both cases, if a height or depth is left blank, 0pt is used instead. +% The optional argument can be used to evaluate the lengths under +% a different font size and styles. If none is specified, the current +% font is used. +% uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 +\def\IEEEeqnarraystrutsizeadd#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsizeadd{#1}{#2}}{\@IEEEeqnarraystrutsizeadd{#1}{#2}[\relax]}} +\def\@IEEEeqnarraystrutsizeadd#1#2[#3]{\def\@IEEEeqnarraystrutsizearg{#1}% +\ifx\@IEEEeqnarraystrutsizearg\@empty% +\skip0=0pt\relax% +\else% arg one present +{\setbox0=\hbox{#3\relax\global\skip3=#1}}% +\skip0=\skip3\relax% +\fi% if null arg +\def\@IEEEeqnarraystrutsizearg{#2}% +\ifx\@IEEEeqnarraystrutsizearg\@empty% +\skip2=0pt\relax% +\else% arg two present +{\setbox0=\hbox{#3\relax\global\skip3=#2}}% +\skip2=\skip3\relax% +\fi% if null arg +% remove stretchability, just to be safe +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +\if@IEEEeqnarrayISinner% inner does not touch master strut size +% get local strut size +\expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% +% add it to the user supplied values +\advance\dimen0 by \skip0\relax% +\advance\dimen2 by \skip2\relax% +% update the local strut size +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstrutfalse% do not use master +\else% outer, have to set master strut too +% get master strut size +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% add it to the user supplied values +\advance\dimen0 by \skip0\relax% +\advance\dimen2 by \skip2\relax% +% update the local and master strut sizes +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstruttrue% use master strut +\fi} + + +% allow user a way to see the struts +\newif\ifIEEEvisiblestruts +\IEEEvisiblestrutsfalse + +% inserts an invisible strut using the master or local strut values +% uses scratch registers \skip0, \skip2, \dimen0, \dimen2 +\def\@IEEEeqnarrayinsertstrut{\relax% +\if@IEEEeqnarrayusemasterstrut +% get master strut size +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +\else% +% get local strut size +\expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% +\fi% +% remove stretchability, probably not needed +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +% allow user to see struts if desired +\ifIEEEvisiblestruts% +\vrule width0.2pt height\dimen0 depth\dimen2\relax% +\else% +\vrule width0pt height\dimen0 depth\dimen2\relax\fi} + + +% creates an invisible strut, useable even outside \IEEEeqnarray +% if \IEEEvisiblestrutstrue, the strut will be visible and 0.2pt wide. +% usage: \IEEEstrut[height][depth][font size commands] +% default is \IEEEstrut[0.7\normalbaselineskip][0.3\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \dimen0, \dimen2, \skip0, \skip2 +\def\IEEEstrut{\relax\@ifnextchar[{\@IEEEstrut}{\@IEEEstrut[0.7\normalbaselineskip]}} +\def\@IEEEstrut[#1]{\relax\@ifnextchar[{\@@IEEEstrut[#1]}{\@@IEEEstrut[#1][0.3\normalbaselineskip]}} +\def\@@IEEEstrut[#1][#2]{\relax\@ifnextchar[{\@@@IEEEstrut[#1][#2]}{\@@@IEEEstrut[#1][#2][\relax]}} +\def\@@@IEEEstrut[#1][#2][#3]{\mbox{#3\relax% +\def\@IEEEstrutARG{#1}% +\ifx\@IEEEstrutARG\@empty% +\skip0=0.7\normalbaselineskip\relax% +\else% +\skip0=#1\relax% +\fi% +\def\@IEEEstrutARG{#2}% +\ifx\@IEEEstrutARG\@empty% +\skip2=0.3\normalbaselineskip\relax% +\else% +\skip2=#2\relax% +\fi% +% remove stretchability, probably not needed +\dimen0\skip0\relax% +\dimen2\skip2\relax% +\ifIEEEvisiblestruts% +\vrule width0.2pt height\dimen0 depth\dimen2\relax% +\else% +\vrule width0.0pt height\dimen0 depth\dimen2\relax\fi}} + + +% enables strut mode by setting a default strut size and then zeroing the +% \baselineskip, \lineskip, \lineskiplimit and \jot +\def\IEEEeqnarraystrutmode{\IEEEeqnarraystrutsize{0.7\normalbaselineskip}{0.3\normalbaselineskip}[\relax]% +\baselineskip=0pt\lineskip=0pt\lineskiplimit=0pt\jot=0pt} + + +% equation and subequation forms to use to setup hyperref's \@currentHref +\def\@IEEEtheHrefequation{equation.\theHequation} +\def\@IEEEtheHrefsubequation{equation.\theHequation\alph{IEEEsubequation}} + + +\def\IEEEeqnarray{\@IEEEeqnumpersisttrue\@IEEEsubeqnumpersistfalse\@IEEEeqnarray} +\def\endIEEEeqnarray{\end@IEEEeqnarray} + +\@namedef{IEEEeqnarray*}{\@IEEEeqnumpersistfalse\@IEEEsubeqnumpersistfalse\@IEEEeqnarray} +\@namedef{endIEEEeqnarray*}{\end@IEEEeqnarray} + + +% \IEEEeqnarray is an enhanced \eqnarray. +% The star form defaults to not putting equation numbers at the end of each row. +% usage: \IEEEeqnarray[decl]{cols} +\def\@IEEEeqnarray{\relax\@ifnextchar[{\@@IEEEeqnarray}{\@@IEEEeqnarray[\relax]}} +% We have to be careful here to normalize catcodes just before acquiring the +% cols as that specification may contain punctuation which could be subject +% to document catcode changes. +\def\@@IEEEeqnarray[#1]{\begingroup\IEEEnormalcatcodes\@@@IEEEeqnarray[#1]} +\def\@@@IEEEeqnarray[#1]#2{\endgroup + % default to showing the equation number or not based on whether or not + % the star form was involked + \if@IEEEeqnumpersist\global\@eqnswtrue + \else% not the star form + \global\@eqnswfalse + \fi% if star form + % provide a basic hyperref \theHequation if this has not already been setup (hyperref not loaded, or no section counter) + \@ifundefined{theHequation}{\def\theHequation{\arabic{equation}}}{}\relax + % provide dummy hyperref commands in case hyperref is not loaded + \providecommand{\Hy@raisedlink}[1]{}\relax + \providecommand{\hyper@anchorstart}[1]{}\relax + \providecommand{\hyper@anchorend}{}\relax + \providecommand{\@currentHref}{}\relax + \@IEEEeqnumpreadvfalse% reset eqnpreadv flag + \@IEEEsubeqnumpreadvfalse% reset subeqnpreadv flag + \@IEEEeqnarrayISinnerfalse% not yet within the lines of the halign + \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default + \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise + \IEEEvisiblestrutsfalse% diagnostic mode defaults to off + % no extra space unless the user specifically requests it + \lineskip=0pt\relax + \lineskiplimit=0pt\relax + \baselineskip=\normalbaselineskip\relax% + \jot=\IEEEnormaljot\relax% + \mathsurround\z@\relax% no extra spacing around math + \@advanceIEEEeqncolcnttrue% advance the col counter for each col the user uses, + % used in \IEEEeqnarraymulticol and in the preamble build + %V1.8 Here we preadvance to the next equation number. + % If the user later wants a continued subequation, we can roll back. + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation% + \stepcounter{equation}\@IEEEeqnumpreadvtrue% advance equation counter before first line + \setcounter{IEEEsubequation}{0}% no subequation yet + \let\@IEEEcurrentlabelsave\@currentlabel% save current label as we later change it globally + \let\@IEEEcurrentHrefsave\@currentHref% save current href label as we later change it globally + \def\@currentlabel{\p@equation\theequation}% redefine the ref label + \def\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \IEEEeqnarraydecl\relax% allow a way for the user to make global overrides + #1\relax% allow user to override defaults + \let\\\@IEEEeqnarraycr% replace newline with one that can put in eqn. numbers + \global\@IEEEeqncolcnt\z@% col. count = 0 for first line + \@IEEEbuildpreamble{#2}\relax% build the preamble and put it into \@IEEEtrantmptoksA + % put in the column for the equation number + \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first + \toks0={##}% + % advance the \@IEEEeqncolcnt for the isolation col, this helps with error checking + \@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}% + % add the isolation column + \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% + % advance the \@IEEEeqncolcnt for the equation number col, this helps with error checking + \@IEEEappendtoksA{&\global\advance\@IEEEeqncolcnt by 1\relax}% + % add the equation number col to the preamble + \@IEEEappendtoksA{\tabskip\z@skip\hb@xt@\z@\bgroup\hss\the\toks0\egroup}% + % note \@IEEEeqnnumcols does not count the equation col or isolation col + % set the starting tabskip glue as determined by the preamble build + \tabskip=\@IEEEBPstartglue\relax + % begin the display alignment + \@IEEEeqnarrayISinnertrue% commands are now within the lines + $$\everycr{}\halign to\displaywidth\bgroup + % "exspand" the preamble + \span\the\@IEEEtrantmptoksA\cr} + +% enter isolation/strut column (or the next column if the user did not use +% every column), record the strut status, complete the columns, do the strut if needed, +% restore counters (to backout any equation setup for a next line that was never used) +% to their correct values and exit +\def\end@IEEEeqnarray{\@IEEEeqnarrayglobalizestrutstatus&\@@IEEEeqnarraycr\egroup +\if@IEEEsubeqnumpreadv\global\advance\c@IEEEsubequation\m@ne\fi +\if@IEEEeqnumpreadv\global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\fi +\global\let\@currentlabel\@IEEEcurrentlabelsave% restore current label +\global\let\@currentHref\@IEEEcurrentHrefsave% restore current href label +$$\@ignoretrue} + + +% IEEEeqnarray uses a modifed \\ instead of the plain \cr to +% end rows. This allows for things like \\*[vskip amount] +% These "cr" macros are modified versions of those for LaTeX2e's eqnarray +% the {\ifnum0=`} braces must be kept away from the last column to avoid +% altering spacing of its math, so we use & to advance to the next column +% as there is an isolation/strut column after the user's columns +\def\@IEEEeqnarraycr{\@IEEEeqnarrayglobalizestrutstatus&% save strut status and advance to next column + {\ifnum0=`}\fi + \@ifstar{% + \global\@eqpen\@M\@IEEEeqnarrayYCR + }{% + \global\@eqpen\interdisplaylinepenalty \@IEEEeqnarrayYCR + }% +} + +\def\@IEEEeqnarrayYCR{\@testopt\@IEEEeqnarrayXCR\z@skip} + +\def\@IEEEeqnarrayXCR[#1]{% + \ifnum0=`{\fi}% + \@@IEEEeqnarraycr + \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}}% + +\def\@@IEEEeqnarraycr{\@IEEEtrantmptoksA={}% clear token register + \advance\@IEEEeqncolcnt by -1\relax% adjust col count because of the isolation column + \ifnum\@IEEEeqncolcnt>\@IEEEeqnnumcols\relax + \@IEEEclspkgerror{Too many columns within the IEEEeqnarray\MessageBreak + environment}% + {Use fewer \string &'s or put more columns in the IEEEeqnarray column\MessageBreak + specifications.}\relax% + \else + \loop% add cols if the user did not use them all + \ifnum\@IEEEeqncolcnt<\@IEEEeqnnumcols\relax + \@IEEEappendtoksA{&}% + \advance\@IEEEeqncolcnt by 1\relax% update the col count + \repeat + % this number of &'s will take us the the isolation column + \fi + % execute the &'s + \the\@IEEEtrantmptoksA% + % handle the strut/isolation column + \@IEEEeqnarrayinsertstrut% do the strut if needed + \@IEEEeqnarraystrutreset% reset the strut system for next line or IEEEeqnarray + &% and enter the equation number column + \if@eqnsw% only if we display something + \Hy@raisedlink{\hyper@anchorstart{\@currentHref}}% start a hyperref anchor + \global\@IEEEeqnumpreadvfalse\relax% displaying an equation number means + \global\@IEEEsubeqnumpreadvfalse\relax% the equation counters point to valid equations + % V1.8 Here we setup the counters, currentlabel and status for what would be the *next* + % equation line as would be the case under the current settings. However, there are two problems. + % One problem is that there might not ever be a next line. The second problem is that the user + % may later alter the meaning of a line with commands such as \IEEEyessubnumber. So, to handle + % these cases we have to record the current values of the (sub)equation counters and revert back + % to them if the next line is changed or never comes. The \if@IEEEeqnumpreadv, \if@IEEEsubeqnumpreadv + % and \@IEEEsubeqnnumrollback stuff tracks this. + % The logic to handle all this is surprisingly complex, but a nice feature of the approach here is + % that the equation counters and labels remain valid for what the line would be unless a + % \IEEEyessubnumber et al. later changes it. So, any hyperref links are always correct. + \ifnum\c@IEEEsubequation>0\relax% handle subequation + \theIEEEsubequationdis\relax + \if@IEEEsubeqnumpersist% setup for default type of next line + \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \else + % if no subeqnum persist, go ahead and setup for a new equation number + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation + \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax + \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi + \else% display a standard equation number + \theequationdis\relax + \setcounter{IEEEsubequation}{0}\relax% not really needed + \if@IEEEsubeqnumpersist% setup for default type of next line + % subequations that follow plain equations carry the same equation number e.g, 5, 5a rather than 5, 6a + \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \else + % if no subeqnum persist, go ahead and setup for a new equation number + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation + \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax + \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi + \fi% + \Hy@raisedlink{\hyper@anchorend}% end hyperref anchor + \fi% fi only if we display something + % reset the flags to indicate the default preferences of the display of equation numbers + \if@IEEEeqnumpersist\global\@eqnswtrue\else\global\@eqnswfalse\fi + \if@IEEEsubeqnumpersist\global\@eqnswtrue\fi% ditto for the subequation flag + % reset the number of columns the user actually used + \global\@IEEEeqncolcnt\z@\relax + % the real end of the line + \cr} + + + + + +% \IEEEeqnarraybox is like \IEEEeqnarray except the box form puts everything +% inside a vtop, vbox, or vcenter box depending on the letter in the second +% optional argument (t,b,c). Vbox is the default. Unlike \IEEEeqnarray, +% equation numbers are not displayed and \IEEEeqnarraybox can be nested. +% \IEEEeqnarrayboxm is for math mode (like \array) and does not put the vbox +% within an hbox. +% \IEEEeqnarrayboxt is for text mode (like \tabular) and puts the vbox within +% a \hbox{$ $} construct. +% \IEEEeqnarraybox will auto detect whether to use \IEEEeqnarrayboxm or +% \IEEEeqnarrayboxt depending on the math mode. +% The third optional argument specifies the width this box is to be set to - +% natural width is the default. +% The * forms do not add \jot line spacing +% usage: \IEEEeqnarraybox[decl][pos][width]{cols} +\def\IEEEeqnarrayboxm{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} +\def\endIEEEeqnarrayboxm{\end@IEEEeqnarraybox} +\@namedef{IEEEeqnarrayboxm*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarrayboxm*}{\end@IEEEeqnarraybox} + +\def\IEEEeqnarrayboxt{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} +\def\endIEEEeqnarrayboxt{\end@IEEEeqnarraybox} +\@namedef{IEEEeqnarrayboxt*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarrayboxt*}{\end@IEEEeqnarraybox} + +\def\IEEEeqnarraybox{\@IEEEeqnarrayboxnojotfalse\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% +\@IEEEeqnarraybox} +\def\endIEEEeqnarraybox{\end@IEEEeqnarraybox} + +\@namedef{IEEEeqnarraybox*}{\@IEEEeqnarrayboxnojottrue\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% +\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarraybox*}{\end@IEEEeqnarraybox} + +% flag to indicate if the \IEEEeqnarraybox needs to put things into an hbox{$ $} +% for \vcenter in non-math mode +\newif\if@IEEEeqnarrayboxHBOXSW% +\@IEEEeqnarrayboxHBOXSWfalse + +\def\@IEEEeqnarraybox{\relax\@ifnextchar[{\@@IEEEeqnarraybox}{\@@IEEEeqnarraybox[\relax]}} +% We have to be careful here to normalize catcodes just before acquiring the +% cols as that specification may contain punctuation which could be subject +% to document catcode changes. +\def\@@IEEEeqnarraybox[#1]{\relax\begingroup\IEEEnormalcatcodes\@ifnextchar[{\@@@IEEEeqnarraybox[#1]}{\@@@IEEEeqnarraybox[#1][b]}} +\def\@@@IEEEeqnarraybox[#1][#2]{\relax\@ifnextchar[{\@@@@IEEEeqnarraybox[#1][#2]}{\@@@@IEEEeqnarraybox[#1][#2][\relax]}} + +% #1 = decl; #2 = t,b,c; #3 = width, #4 = col specs +\def\@@@@IEEEeqnarraybox[#1][#2][#3]#4{\endgroup\@IEEEeqnarrayISinnerfalse % not yet within the lines of the halign + \@IEEEeqnarraymasterstrutsave% save current master strut values + \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default + \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise + \IEEEvisiblestrutsfalse% diagnostic mode defaults to off + % no extra space unless the user specifically requests it + \lineskip=0pt\relax% + \lineskiplimit=0pt\relax% + \baselineskip=\normalbaselineskip\relax% + \jot=\IEEEnormaljot\relax% + \mathsurround\z@\relax% no extra spacing around math + % the default end glues are zero for an \IEEEeqnarraybox + \edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPzero}% default start glue + \edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPzero}% default end glue + \edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue + \@advanceIEEEeqncolcntfalse% do not advance the col counter for each col the user uses, + % used in \IEEEeqnarraymulticol and in the preamble build + \IEEEeqnarrayboxdecl\relax% allow a way for the user to make global overrides + #1\relax% allow user to override defaults + \let\\\@IEEEeqnarrayboxcr% replace newline with one that allows optional spacing + \@IEEEbuildpreamble{#4}\relax% build the preamble and put it into \@IEEEtrantmptoksA + % add an isolation column to the preamble to stop \\'s {} from getting into the last col + \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first + \toks0={##}% + % add the isolation column to the preamble + \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% + % set the starting tabskip glue as determined by the preamble build + \tabskip=\@IEEEBPstartglue\relax + % begin the alignment + \everycr{}% + % use only the very first token to determine the positioning + \@IEEEextracttoken{#2}\relax + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: IEEEeqnarraybox position specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi + % \@IEEEextractedtoken has the first token, the rest are ignored + % if we need to put things into and hbox and go into math mode, do so now + \if@IEEEeqnarrayboxHBOXSW \leavevmode \hbox \bgroup $\fi% + % use the appropriate vbox type + \if\@IEEEextractedtoken t\relax\vtop\else\if\@IEEEextractedtoken c\relax% + \vcenter\else\vbox\fi\fi\bgroup% + \@IEEEeqnarrayISinnertrue% commands are now within the lines + \ifx#3\relax\halign\else\halign to #3\relax\fi% + \bgroup + % "exspand" the preamble + \span\the\@IEEEtrantmptoksA\cr} + +% carry strut status and enter the isolation/strut column, +% exit from math mode if needed, and exit +\def\end@IEEEeqnarraybox{\@IEEEeqnarrayglobalizestrutstatus% carry strut status +&% enter isolation/strut column +\@IEEEeqnarrayinsertstrut% do strut if needed +\@IEEEeqnarraymasterstrutrestore% restore the previous master strut values +% reset the strut system for next IEEEeqnarray +% (sets local strut values back to previous master strut values) +\@IEEEeqnarraystrutreset% +% ensure last line, exit from halign, close vbox +\crcr\egroup\egroup% +% exit from math mode and close hbox if needed +\if@IEEEeqnarrayboxHBOXSW $\egroup\fi} + + + +% IEEEeqnarraybox uses a modifed \\ instead of the plain \cr to +% end rows. This allows for things like \\[vskip amount] +% This "cr" macros are modified versions those for LaTeX2e's eqnarray +% For IEEEeqnarraybox, \\* is the same as \\ +% the {\ifnum0=`} braces must be kept away from the last column to avoid +% altering spacing of its math, so we use & to advance to the isolation/strut column +% carry strut status into isolation/strut column +\def\@IEEEeqnarrayboxcr{\@IEEEeqnarrayglobalizestrutstatus% carry strut status +&% enter isolation/strut column +\@IEEEeqnarrayinsertstrut% do strut if needed +% reset the strut system for next line or IEEEeqnarray +\@IEEEeqnarraystrutreset% +{\ifnum0=`}\fi% +\@ifstar{\@IEEEeqnarrayboxYCR}{\@IEEEeqnarrayboxYCR}} + +% test and setup the optional argument to \\[] +\def\@IEEEeqnarrayboxYCR{\@testopt\@IEEEeqnarrayboxXCR\z@skip} + +% IEEEeqnarraybox does not automatically increase line spacing by \jot +\def\@IEEEeqnarrayboxXCR[#1]{\ifnum0=`{\fi}% +\cr\noalign{\if@IEEEeqnarrayboxnojot\else\vskip\jot\fi\vskip#1\relax}} + + + +% usage: \@IEEEbuildpreamble{column specifiers} +% starts the halign preamble build +% the assembled preamble is put in \@IEEEtrantmptoksA +\def\@IEEEbuildpreamble#1{\@IEEEtrantmptoksA={}% clear token register +\let\@IEEEBPcurtype=u%current column type is not yet known +\let\@IEEEBPprevtype=s%the previous column type was the start +\let\@IEEEBPnexttype=u%next column type is not yet known +% ensure these are valid +\def\@IEEEBPcurglue={0pt plus 0pt minus 0pt}% +\def\@IEEEBPcurcolname{@IEEEdefault}% name of current column definition +% currently acquired numerically referenced glue +% use a name that is easier to remember +\let\@IEEEBPcurnum=\@IEEEtrantmpcountA% +\@IEEEBPcurnum=0% +% tracks number of columns in the preamble +\@IEEEeqnnumcols=0% +% record the default end glues +\edef\@IEEEBPstartglue{\@IEEEeqnarraycolSEPdefaultstart}% +\edef\@IEEEBPendglue{\@IEEEeqnarraycolSEPdefaultend}% +\edef\@IEEEedefMACRO{#1}\relax% fully expand the preamble to support macro containers +% now parse the user's column specifications +% \ignorespaces is used as a delimiter, need at least one trailing \relax because +% \@@IEEEbuildpreamble looks into the future +\expandafter\@@IEEEbuildpreamble\@IEEEedefMACRO\ignorespaces\relax\relax} + + +% usage: \@@IEEEbuildpreamble{current column}{next column} +% parses and builds the halign preamble +\def\@@IEEEbuildpreamble#1#2{\let\@@nextIEEEbuildpreamble=\@@IEEEbuildpreamble% +% use only the very first token to check the end +\@IEEEextracttokengroups{#1}\relax +\ifx\@IEEEextractedfirsttoken\ignorespaces\let\@@nextIEEEbuildpreamble=\@@IEEEfinishpreamble\else% +% identify current and next token type +\@IEEEgetcoltype{#1}{\@IEEEBPcurtype}{1}% current, error on invalid +\@IEEEgetcoltype{#2}{\@IEEEBPnexttype}{0}% next, no error on invalid next +% if curtype is a glue, get the glue def +\if\@IEEEBPcurtype g\@IEEEgetcurglue{#1}{\@IEEEBPcurglue}\fi% +% if curtype is a column, get the column def and set the current column name +\if\@IEEEBPcurtype c\@IEEEgetcurcol{#1}\fi% +% if curtype is a numeral, acquire the user defined glue +\if\@IEEEBPcurtype n\@IEEEprocessNcol{#1}\fi% +% process the acquired glue +\if\@IEEEBPcurtype g\@IEEEprocessGcol\fi% +% process the acquired col +\if\@IEEEBPcurtype c\@IEEEprocessCcol\fi% +% ready prevtype for next col spec. +\let\@IEEEBPprevtype=\@IEEEBPcurtype% +% be sure and put back the future token(s) as a group +\fi\@@nextIEEEbuildpreamble{#2}} + + +% usage: \@@IEEEfinishpreamble{discarded} +% executed just after preamble build is completed +% warn about zero cols, and if prevtype type = u, put in end tabskip glue +% argument is not used +\def\@@IEEEfinishpreamble#1{\ifnum\@IEEEeqnnumcols<1\relax +\@IEEEclspkgerror{No column specifiers declared for IEEEeqnarray}% +{At least one column type must be declared for each IEEEeqnarray.}% +\fi%num cols less than 1 +%if last type undefined, set default end tabskip glue +\if\@IEEEBPprevtype u\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue}\fi} + + +% usage: \@IEEEgetcoltype{col specifier}{\output}{error more} +% Identify and return the column specifier's type code in the given +% \output macro: +% n = number +% g = glue (any other char in catagory 12) +% c = letter +% e = \ignorespaces (end of sequence) +% u = undefined +% error mode: 0 = no error message, 1 = error on invalid char +\def\@IEEEgetcoltype#1#2#3{% +% use only the very first token to determine the type +\@IEEEextracttoken{#1}\relax +% \@IEEEextractedtoken has the first token, the rest are discarded +\let#2=u\relax% assume invalid until know otherwise +\ifx\@IEEEextractedtoken\ignorespaces\let#2=e\else +\ifcat\@IEEEextractedtoken\relax\else% screen out control sequences +\if0\@IEEEextractedtoken\let#2=n\else +\if1\@IEEEextractedtoken\let#2=n\else +\if2\@IEEEextractedtoken\let#2=n\else +\if3\@IEEEextractedtoken\let#2=n\else +\if4\@IEEEextractedtoken\let#2=n\else +\if5\@IEEEextractedtoken\let#2=n\else +\if6\@IEEEextractedtoken\let#2=n\else +\if7\@IEEEextractedtoken\let#2=n\else +\if8\@IEEEextractedtoken\let#2=n\else +\if9\@IEEEextractedtoken\let#2=n\else +\ifcat,\@IEEEextractedtoken\let#2=g\relax +\else\ifcat a\@IEEEextractedtoken\let#2=c\relax\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi +\if#2u\relax +\if0\noexpand#3\relax\else\@IEEEclspkgerror{Invalid character in column specifications}% +{Only letters, numerals and certain other symbols are allowed \MessageBreak +as IEEEeqnarray column specifiers.}\fi\fi} + + +% usage: \@IEEEgetcurcol{col specifier} +% verify the letter referenced column exists +% and return its name in \@IEEEBPcurcolname +% if column specifier is invalid, use the default column @IEEEdefault +\def\@IEEEgetcurcol#1{\expandafter\ifx\csname @IEEEeqnarraycolDEF#1\endcsname\@IEEEeqnarraycolisdefined% +\def\@IEEEBPcurcolname{#1}\else% invalid column name +\@IEEEclspkgerror{Invalid column type "#1" in column specifications.\MessageBreak +Using a default centering column instead}% +{You must define IEEEeqnarray column types before use.}% +\def\@IEEEBPcurcolname{@IEEEdefault}\fi} + + +% usage: \@IEEEgetcurglue{glue specifier}{\output} +% identify the predefined (punctuation) glue value +% and return it in the given output macro +\def\@IEEEgetcurglue#1#2{% +% ! = \! (neg small) -0.16667em (-3/18 em) +% , = \, (small) 0.16667em ( 3/18 em) +% : = \: (med) 0.22222em ( 4/18 em) +% ; = \; (large) 0.27778em ( 5/18 em) +% ' = \quad 1em +% " = \qquad 2em +% . = 0.5\arraycolsep +% / = \arraycolsep +% ? = 2\arraycolsep +% * = 1fil +% + = \@IEEEeqnarraycolSEPcenter +% - = \@IEEEeqnarraycolSEPzero +% Note that all em values are referenced to the math font (textfont2) fontdimen6 +% value for 1em. +% +% use only the very first token to determine the type +\@IEEEextracttoken{#1}\relax +\ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: IEEEeqnarray predefined inter-column glue type specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax +\fi +% get the math font 1em value +% LaTeX2e's NFSS2 does not preload the fonts, but \IEEEeqnarray needs +% to gain access to the math (\textfont2) font's spacing parameters. +% So we create a bogus box here that uses the math font to ensure +% that \textfont2 is loaded and ready. If this is not done, +% the \textfont2 stuff here may not work. +% Thanks to Bernd Raichle for his 1997 post on this topic. +{\setbox0=\hbox{$\displaystyle\relax$}}% +% fontdimen6 has the width of 1em (a quad). +\@IEEEtrantmpdimenA=\fontdimen6\textfont2\relax% +% identify the glue value based on the first token +% we discard anything after the first +\if!\@IEEEextractedtoken\@IEEEtrantmpdimenA=-0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if,\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if:\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.22222\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if;\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.27778\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if'\@IEEEextractedtoken\@IEEEtrantmpdimenA=1\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if"\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if.\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.5\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else +\if/\@IEEEextractedtoken\edef#2{\the\arraycolsep}\else +\if?\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else +\if *\@IEEEextractedtoken\edef#2{0pt plus 1fil minus 0pt}\else +\if+\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPcenter}\else +\if-\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPzero}\else +\edef#2{\@IEEEeqnarraycolSEPzero}% +\@IEEEclspkgerror{Invalid predefined inter-column glue type "#1" in\MessageBreak +column specifications. Using a default value of\MessageBreak +0pt instead}% +{Only !,:;'"./?*+ and - are valid predefined glue types in the\MessageBreak +IEEEeqnarray column specifications.}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + + +% usage: \@IEEEprocessNcol{digit} +% process a numerical digit from the column specification +% and look up the corresponding user defined glue value +% can transform current type from n to g or a as the user defined glue is acquired +\def\@IEEEprocessNcol#1{\if\@IEEEBPprevtype g% +\@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak +specifications. Ignoring consecutive glue specifiers\MessageBreak +after the first}% +{You cannot have two or more glue types next to each other\MessageBreak +in the IEEEeqnarray column specifications.}% +\let\@IEEEBPcurtype=a% abort this glue, future digits will be discarded +\@IEEEBPcurnum=0\relax% +\else% if we previously aborted a glue +\if\@IEEEBPprevtype a\@IEEEBPcurnum=0\let\@IEEEBPcurtype=a%maintain digit abortion +\else%acquire this number +% save the previous type before the numerical digits started +\if\@IEEEBPprevtype n\else\let\@IEEEBPprevsavedtype=\@IEEEBPprevtype\fi% +\multiply\@IEEEBPcurnum by 10\relax% +\advance\@IEEEBPcurnum by #1\relax% add in number, \relax is needed to stop TeX's number scan +\if\@IEEEBPnexttype n\else%close acquisition +\expandafter\ifx\csname @IEEEeqnarraycolSEPDEF\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname\@IEEEeqnarraycolisdefined% +\edef\@IEEEBPcurglue{\csname @IEEEeqnarraycolSEP\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname}% +\else%user glue not defined +\@IEEEclspkgerror{Invalid user defined inter-column glue type "\number\@IEEEBPcurnum" in\MessageBreak +column specifications. Using a default value of\MessageBreak +0pt instead}% +{You must define all IEEEeqnarray numerical inter-column glue types via\MessageBreak +\string\IEEEeqnarraydefcolsep \space before they are used in column specifications.}% +\edef\@IEEEBPcurglue{\@IEEEeqnarraycolSEPzero}% +\fi% glue defined or not +\let\@IEEEBPcurtype=g% change the type to reflect the acquired glue +\let\@IEEEBPprevtype=\@IEEEBPprevsavedtype% restore the prev type before this number glue +\@IEEEBPcurnum=0\relax%ready for next acquisition +\fi%close acquisition, get glue +\fi%discard or acquire number +\fi%prevtype glue or not +} + + +% process an acquired glue +% add any acquired column/glue pair to the preamble +\def\@IEEEprocessGcol{\if\@IEEEBPprevtype a\let\@IEEEBPcurtype=a%maintain previous glue abortions +\else +% if this is the start glue, save it, but do nothing else +% as this is not used in the preamble, but before +\if\@IEEEBPprevtype s\edef\@IEEEBPstartglue{\@IEEEBPcurglue}% +\else%not the start glue +\if\@IEEEBPprevtype g%ignore if back to back glues +\@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak +specifications. Ignoring consecutive glue specifiers\MessageBreak +after the first}% +{You cannot have two or more glue types next to each other\MessageBreak +in the IEEEeqnarray column specifications.}% +\let\@IEEEBPcurtype=a% abort this glue +\else% not a back to back glue +\if\@IEEEBPprevtype c\relax% if the previoustype was a col, add column/glue pair to preamble +\ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi +\toks0={##}% +% make preamble advance col counter if this environment needs this +\if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi +% insert the column defintion into the preamble, being careful not to expand +% the column definition +\@IEEEappendtoksA{\tabskip=\@IEEEBPcurglue}% +\@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname}% +\@IEEEappendtoksA{\the\toks0}% +\@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\endgroup}% +\advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble +\else% error: non-start glue with no pending column +\@IEEEclspkgerror{Inter-column glue specifier without a prior column\MessageBreak +type in the column specifications. Ignoring this glue\MessageBreak +specifier}% +{Except for the first and last positions, glue can be placed only\MessageBreak +between column types.}% +\let\@IEEEBPcurtype=a% abort this glue +\fi% previous was a column +\fi% back-to-back glues +\fi% is start column glue +\fi% prev type not a +} + + +% process an acquired letter referenced column and, if necessary, add it to the preamble +\def\@IEEEprocessCcol{\if\@IEEEBPnexttype g\else +\if\@IEEEBPnexttype n\else +% we have a column followed by something other than a glue (or numeral glue) +% so we must add this column to the preamble now +\ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi%col separator for those after the first +\if\@IEEEBPnexttype e\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue\relax}\else%put in end glue +\@IEEEappendtoksA{\tabskip=\@IEEEeqnarraycolSEPdefaultmid\relax}\fi% or default mid glue +\toks0={##}% +% make preamble advance col counter if this environment needs this +\if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi +% insert the column definition into the preamble, being careful not to expand +% the column definition +\@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname}% +\@IEEEappendtoksA{\the\toks0}% +\@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\endgroup}% +\advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble +\fi%next type not numeral +\fi%next type not glue +} + + +%% +%% END OF IEEEeqnarray DEFINITIONS +%% + + + + + +% set up the running headers and footers +% +% header and footer font and size specifications +\def\@IEEEheaderstyle{\normalfont\scriptsize} +\def\@IEEEfooterstyle{\normalfont\scriptsize} +% +% compsoc uses sans-serif headers and footers +\ifCLASSOPTIONcompsoc + \def\@IEEEheaderstyle{\normalfont\sffamily\scriptsize} + \def\@IEEEfooterstyle{\normalfont\sffamily\scriptsize} +\fi + + +% standard page style, ps@headings +\def\ps@headings{% default to standard twoside headers, no footers +% will change later if the mode requires otherwise +\def\@oddhead{\hbox{}\@IEEEheaderstyle\rightmark\hfil\thepage}\relax +\def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\let\@oddfoot\@empty +\let\@evenfoot\@empty +\ifCLASSOPTIONtechnote + % technote twoside + \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax + \def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\fi +\ifCLASSOPTIONdraftcls + % draft footers + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax +\fi +% oneside +\if@twoside\else + % standard one side headers + \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax + \let\@evenhead\@empty + \ifCLASSOPTIONdraftcls + % oneside draft footers + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \let\@evenfoot\@empty + \fi +\fi +% turn off headers for conferences +\ifCLASSOPTIONconference + \let\@oddhead\@empty + \let\@evenhead\@empty +\fi +% turn off footers for draftclsnofoot +\ifCLASSOPTIONdraftclsnofoot + \let\@oddfoot\@empty + \let\@evenfoot\@empty +\fi} + + +% title page style, ps@IEEEtitlepagestyle +\def\ps@IEEEtitlepagestyle{% default title page headers, no footers +\def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax +\def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\let\@oddfoot\@empty +\let\@evenfoot\@empty +% will change later if the mode requires otherwise +\ifCLASSOPTIONdraftcls + % draft footers + \ifCLASSOPTIONdraftclsnofoot\else + % but only if not draftclsnofoot + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax + \fi +\else + % all nondraft mode footers + \if@IEEEusingpubid + % for title pages that are using a pubid + % do not repeat pubid on the title page if using a peer review cover page + \ifCLASSOPTIONpeerreview\else + % for noncompsoc papers, the pubid uses footnotesize and + % is at the same vertical position as where the last baseline would normally be + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \ifCLASSOPTIONcompsoc + % for compsoc papers, the pubid is at the same vertical position as the normal footer + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \fi + \fi + \fi +\fi +% turn off headers for conferences +\ifCLASSOPTIONconference + \let\@oddhead\@empty + \let\@evenhead\@empty +\fi} + + +% peer review cover page style, ps@IEEEpeerreviewcoverpagestyle +\def\ps@IEEEpeerreviewcoverpagestyle{% default peer review cover no headers, no footers +\let\@oddhead\@empty +\let\@evenhead\@empty +\let\@oddfoot\@empty +\let\@evenfoot\@empty +% will change later if the mode requires otherwise +\ifCLASSOPTIONdraftcls + % draft footers + \ifCLASSOPTIONdraftclsnofoot\else + % but only if not draftclsnofoot + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax + \fi +\else + % all nondraft mode footers + \if@IEEEusingpubid + % for peer review cover pages that are using a pubid + % for noncompsoc papers, the pubid uses footnotesize and + % is at the same vertical position as where the last baseline would normally be + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \ifCLASSOPTIONcompsoc + % for compsoc papers, the pubid is at the same vertical position as the normal footer + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \fi + \fi +\fi} + + + +%% Defines the command for putting the header. +%% Note that all the text is forced into uppercase, if you have some text +%% that needs to be in lower case, for instance et. al., then either manually +%% set \leftmark and \rightmark or use \MakeLowercase{et. al.} within the +%% arguments to \markboth. +%% V1.7b add \protect to work with Babel +\def\markboth#1#2{\def\leftmark{\MakeUppercase{\protect#1}}% +\def\rightmark{\MakeUppercase{\protect#2}}} + +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} + + + + +%% CITATION AND BIBLIOGRAPHY COMMANDS +%% +%% V1.6 no longer supports the older, nonstandard \shortcite and \citename setup stuff +% +% +% Modify Latex2e \@citex to separate citations with "], [" +\def\@citex[#1]#2{% + \let\@citea\@empty + \@cite{\@for\@citeb:=#2\do + {\@citea\def\@citea{], [}% + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi + \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}% + \G@refundefinedtrue + \@latex@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {\hbox{\csname b@\@citeb\endcsname}}}}{#1}} + +% V1.6 we create hooks for the optional use of Donald Arseneau's +% cite.sty package. cite.sty is "smart" and will notice that the +% following format controls are already defined and will not +% redefine them. The result will be the proper sorting of the +% citation numbers and auto detection of 3 or more entry "ranges" - +% all in IEEE style: [1], [2], [5]--[7], [12] +% This also allows for an optional note, i.e., \cite[mynote]{..}. +% If the \cite with note has more than one reference, the note will +% be applied to the last of the listed references. It is generally +% desired that if a note is given, only one reference is listed in +% that \cite. +% Thanks to Mr. Arseneau for providing the required format arguments +% to produce the IEEE style. +\def\citepunct{], [} +\def\citedash{]--[} + +% V1.7 default to using same font for urls made by url.sty +\AtBeginDocument{\csname url@samestyle\endcsname} + +% V1.6 class files should always provide these +\def\newblock{\hskip .11em\@plus.33em\@minus.07em} +\let\@openbib@code\@empty +% V1.8b article.cls is now providing these too +% we do not use \@mkboth, nor alter the page style +\newenvironment{theindex} + {\if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi + \twocolumn[\section*{\indexname}]% + \parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \columnseprule \z@ + \columnsep 35\p@ + \let\item\@idxitem} + {\if@restonecol\onecolumn\else\clearpage\fi} +\newcommand\@idxitem{\par\hangindent 40\p@} +\newcommand\subitem{\@idxitem \hspace*{20\p@}} +\newcommand\subsubitem{\@idxitem \hspace*{30\p@}} +\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} + + + +% Provide support for the control entries of IEEEtran.bst V1.00 and later. +% V1.7 optional argument allows for a different aux file to be specified in +% order to handle multiple bibliographies. For example, with multibib.sty: +% \newcites{sec}{Secondary Literature} +% \bstctlcite[@auxoutsec]{BSTcontrolhak} +\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}} +\def\@bstctlcite[#1]#2{\@bsphack + \@for\@citeb:=#2\do{% + \edef\@citeb{\expandafter\@firstofone\@citeb}% + \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}% + \@esphack} + +% \IEEEnoauxwrite{} allows for citations that do not add to or affect +% the order of the existing citation list. Can be useful for \cite +% within \thanks{}. +\DeclareRobustCommand{\IEEEnoauxwrite}[1]{\relax +\if@filesw +\@fileswfalse +#1\relax\relax\relax\relax\relax +\@fileswtrue +\else +#1\relax\relax\relax\relax\relax +\fi} + +% V1.6 provide a way for a user to execute a command just before +% a given reference number - used to insert a \newpage to balance +% the columns on the last page +\edef\@IEEEtriggerrefnum{0} % the default of zero means that + % the command is not executed +\def\@IEEEtriggercmd{\newpage} + +% allow the user to alter the triggered command +\long\def\IEEEtriggercmd#1{\long\def\@IEEEtriggercmd{#1}} + +% allow user a way to specify the reference number just before the +% command is executed +\def\IEEEtriggeratref#1{\@IEEEtrantmpcountA=#1% +\edef\@IEEEtriggerrefnum{\the\@IEEEtrantmpcountA}}% + +% trigger command at the given reference +\def\@IEEEbibitemprefix{\@IEEEtrantmpcountA=\@IEEEtriggerrefnum\relax% +\advance\@IEEEtrantmpcountA by -1\relax% +\ifnum\c@enumiv=\@IEEEtrantmpcountA\relax\@IEEEtriggercmd\relax\fi} + + +\def\@biblabel#1{[#1]} + +% compsoc journals and conferences left align the reference numbers +\@IEEEcompsoconly{\def\@biblabel#1{[#1]\hfill}} + +% controls bib item spacing +\def\IEEEbibitemsep{0pt plus .5pt} + +\@IEEEcompsocconfonly{\def\IEEEbibitemsep{0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}} + + +\def\thebibliography#1{\section*{\refname}% + \addcontentsline{toc}{section}{\refname}% + % V1.6 add some rubber space here and provide a command trigger + \footnotesize\vskip 0.3\baselineskip plus 0.1\baselineskip minus 0.1\baselineskip% + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep\relax + \itemsep \IEEEbibitemsep\relax + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \let\@IEEElatexbibitem\bibitem% + \def\bibitem{\@IEEEbibitemprefix\@IEEElatexbibitem}% +\def\newblock{\hskip .11em plus .33em minus .07em}% +% originally: +% \sloppy\clubpenalty4000\widowpenalty4000% +% by adding the \interlinepenalty here, we make it more +% difficult, but not impossible, for LaTeX to break within a reference. +% The IEEE almost never breaks a reference (but they do it more often with +% technotes). You may get an underfull vbox warning around the bibliography, +% but the final result will be much more like what the IEEE will publish. +% MDS 11/2000 +\ifCLASSOPTIONtechnote\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty100% +\else\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty500\fi% + \sfcode`\.=1000\relax} +\let\endthebibliography=\endlist + + + + +% TITLE PAGE COMMANDS +% +% +% \IEEEmembership is used to produce the sublargesize italic font used to indicate author +% IEEE membership. compsoc uses a large size sans slant font +\def\IEEEmembership#1{{\@IEEEnotcompsoconly{\sublargesize}\normalfont\@IEEEcompsoconly{\sffamily}\textit{#1}}} + + +% \IEEEauthorrefmark{} produces a footnote type symbol to indicate author affiliation. +% When given an argument of 1 to 9, \IEEEauthorrefmark{} follows the standard LaTeX footnote +% symbol sequence convention. However, for arguments 10 and above, \IEEEauthorrefmark{} +% reverts to using lower case roman numerals, so it cannot overflow. Do note that you +% cannot use \footnotemark[] in place of \IEEEauthorrefmark{} within \author as the footnote +% symbols will have been turned off to prevent \thanks from creating footnote marks. +% \IEEEauthorrefmark{} produces a symbol that appears to LaTeX as having zero vertical +% height - this allows for a more compact line packing, but the user must ensure that +% the interline spacing is large enough to prevent \IEEEauthorrefmark{} from colliding +% with the text above. +% V1.7 make this a robust command +% V1.8 transmag uses an arabic author affiliation symbol +\ifCLASSOPTIONtransmag +\DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize #1}}} +\else +\DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or% + \mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger% + \or \ddagger\ddagger \else\textsuperscript{\expandafter\romannumeral#1}\fi}}}} +\fi + + +% FONT CONTROLS AND SPACINGS FOR CONFERENCE MODE AUTHOR NAME AND AFFILIATION BLOCKS +% +% The default font styles for the author name and affiliation blocks (confmode) +\def\@IEEEauthorblockNstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize} +\def\@IEEEauthorblockAstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\@IEEEcompsocconfonly{\itshape}\normalsize} +% The default if the user does not use an author block +\def\@IEEEauthordefaulttextstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize} + +% adjustment spacing from title (or special paper notice) to author name blocks (confmode) +% can be negative +\def\@IEEEauthorblockconfadjspace{-0.25em} +% compsoc conferences need more space here +\@IEEEcompsocconfonly{\def\@IEEEauthorblockconfadjspace{0.75\@IEEEnormalsizeunitybaselineskip}} + +% spacing between name and affiliation blocks (confmode) +% This can be negative. +% The IEEE doesn't want any added spacing here, but I will leave these +% controls in place in case they ever change their mind. +% Personally, I like 0.75ex. +%\def\@IEEEauthorblockNtopspace{0.75ex} +%\def\@IEEEauthorblockAtopspace{0.75ex} +\def\@IEEEauthorblockNtopspace{0.0ex} +\def\@IEEEauthorblockAtopspace{0.0ex} +\ifCLASSOPTIONtransmag +% transmag uses one line of space above first affiliation block +\def\@IEEEauthorblockAtopspace{1\@IEEEnormalsizeunitybaselineskip} +\fi + +% baseline spacing within name and affiliation blocks (confmode) +% must be positive, spacings below certain values will make +% the position of line of text sensitive to the contents of the +% line above it i.e., whether or not the prior line has descenders, +% subscripts, etc. For this reason it is a good idea to keep +% these above 2.6ex +\def\@IEEEauthorblockNinterlinespace{2.6ex} +\def\@IEEEauthorblockAinterlinespace{2.75ex} + +% This tracks the required strut size. +% See the \@IEEEauthorhalign command for the actual default value used. +\def\@IEEEauthorblockXinterlinespace{2.7ex} + +% variables to retain font size and style across groups +% values given here have no effect as they will be overwritten later +\gdef\@IEEESAVESTATEfontsize{10} +\gdef\@IEEESAVESTATEfontbaselineskip{12} +\gdef\@IEEESAVESTATEfontencoding{OT1} +\gdef\@IEEESAVESTATEfontfamily{ptm} +\gdef\@IEEESAVESTATEfontseries{m} +\gdef\@IEEESAVESTATEfontshape{n} + +% saves the current font attributes +\def\@IEEEcurfontSAVE{\global\let\@IEEESAVESTATEfontsize\f@size% +\global\let\@IEEESAVESTATEfontbaselineskip\f@baselineskip% +\global\let\@IEEESAVESTATEfontencoding\f@encoding% +\global\let\@IEEESAVESTATEfontfamily\f@family% +\global\let\@IEEESAVESTATEfontseries\f@series% +\global\let\@IEEESAVESTATEfontshape\f@shape} + +% restores the saved font attributes +\def\@IEEEcurfontRESTORE{\fontsize{\@IEEESAVESTATEfontsize}{\@IEEESAVESTATEfontbaselineskip}% +\fontencoding{\@IEEESAVESTATEfontencoding}% +\fontfamily{\@IEEESAVESTATEfontfamily}% +\fontseries{\@IEEESAVESTATEfontseries}% +\fontshape{\@IEEESAVESTATEfontshape}% +\selectfont} + + +% variable to indicate if the current block is the first block in the column +\newif\if@IEEEprevauthorblockincol \@IEEEprevauthorblockincolfalse + + +% the command places a strut with height and depth = \@IEEEauthorblockXinterlinespace +% we use this technique to have complete manual control over the spacing of the lines +% within the halign environment. +% We set the below baseline portion at 30%, the above +% baseline portion at 70% of the total length. +% Responds to changes in the document's \baselinestretch +\def\@IEEEauthorstrutrule{\@IEEEtrantmpdimenA\@IEEEauthorblockXinterlinespace% +\@IEEEtrantmpdimenA=\baselinestretch\@IEEEtrantmpdimenA% +\rule[-0.3\@IEEEtrantmpdimenA]{0pt}{\@IEEEtrantmpdimenA}} + + +% blocks to hold the authors' names and affilations. +% Makes formatting easy for conferences +% +% use real definitions in conference mode +% name block +\def\IEEEauthorblockN#1{\relax\@IEEEauthorblockNstyle% set the default text style +\gdef\@IEEEauthorblockXinterlinespace{0pt}% disable strut for spacer row +% the \expandafter hides the \cr in conditional tex, see the array.sty docs +% for details, probably not needed here as the \cr is in a macro +% do a spacer row if needed +\if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockNtopspaceline\fi +\global\@IEEEprevauthorblockincoltrue% we now have a block in this column +%restore the correct strut value +\gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockNinterlinespace}% +% input the author names +#1% +% end the row if the user did not already +\crcr} +% spacer row for names +\def\@IEEEauthorblockNtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockNtopspace}} +% +% affiliation block +\def\IEEEauthorblockA#1{\relax\@IEEEauthorblockAstyle% set the default text style +\gdef\@IEEEauthorblockXinterlinespace{0pt}%disable strut for spacer row +% the \expandafter hides the \cr in conditional tex, see the array.sty docs +% for details, probably not needed here as the \cr is in a macro +% do a spacer row if needed +\if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockAtopspaceline\fi +\global\@IEEEprevauthorblockincoltrue% we now have a block in this column +%restore the correct strut value +\gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockAinterlinespace}% +% input the author affiliations +#1% +% end the row if the user did not already +\crcr +% V1.8 transmag does not use any additional affiliation spacing after the first author +\ifCLASSOPTIONtransmag\gdef\@IEEEauthorblockAtopspace{0pt}\fi} + +% spacer row for affiliations +\def\@IEEEauthorblockAtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockAtopspace}} + + +% allow papers to compile even if author blocks are used in modes other +% than conference or peerreviewca. For such cases, we provide dummy blocks. +\ifCLASSOPTIONconference +\else + \ifCLASSOPTIONpeerreviewca\else + % not conference, peerreviewca or transmag mode + \ifCLASSOPTIONtransmag\else + \def\IEEEauthorblockN#1{#1}% + \def\IEEEauthorblockA#1{#1}% + \fi + \fi +\fi + + + +% we provide our own halign so as not to have to depend on tabular +\def\@IEEEauthorhalign{\@IEEEauthordefaulttextstyle% default text style + \lineskip=0pt\relax% disable line spacing + \lineskiplimit=0pt\relax% + \baselineskip=0pt\relax% + \@IEEEcurfontSAVE% save the current font + \mathsurround\z@\relax% no extra spacing around math + \let\\\@IEEEauthorhaligncr% replace newline with halign friendly one + \tabskip=0pt\relax% no column spacing + \everycr{}% ensure no problems here + \@IEEEprevauthorblockincolfalse% no author blocks yet + \def\@IEEEauthorblockXinterlinespace{2.7ex}% default interline space + \vtop\bgroup%vtop box + \halign\bgroup&\relax\hfil\@IEEEcurfontRESTORE\relax ##\relax + \hfil\@IEEEcurfontSAVE\@IEEEauthorstrutrule\cr} + +% ensure last line, exit from halign, close vbox +\def\end@IEEEauthorhalign{\crcr\egroup\egroup} + +% handle bogus star form +\def\@IEEEauthorhaligncr{{\ifnum0=`}\fi\@ifstar{\@@IEEEauthorhaligncr}{\@@IEEEauthorhaligncr}} + +% test and setup the optional argument to \\[] +\def\@@IEEEauthorhaligncr{\@testopt\@@@IEEEauthorhaligncr\z@skip} + +% end the line and do the optional spacer +\def\@@@IEEEauthorhaligncr[#1]{\ifnum0=`{\fi}\cr\noalign{\vskip#1\relax}} + + + +% flag to prevent multiple \and warning messages +\newif\if@IEEEWARNand +\@IEEEWARNandtrue + +% if in conference or peerreviewca modes, we support the use of \and as \author is a +% tabular environment, otherwise we warn the user that \and is invalid +% outside of conference or peerreviewca modes. +\def\and{\relax} % provide a bogus \and that we will then override + +\renewcommand{\and}[1][\relax]{\if@IEEEWARNand\typeout{** WARNING: \noexpand\and is valid only + when in conference or peerreviewca}\typeout{modes (line \the\inputlineno).}\fi\global\@IEEEWARNandfalse} + +\ifCLASSOPTIONconference% +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi +\ifCLASSOPTIONpeerreviewca +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi +% V1.8 transmag uses conference author format +\ifCLASSOPTIONtransmag +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi + +% page clearing command +% based on LaTeX2e's \cleardoublepage, but allows different page styles +% for the inserted blank pages +\def\@IEEEcleardoublepage#1{\clearpage\if@twoside\ifodd\c@page\else +\hbox{}\thispagestyle{#1}\newpage\if@twocolumn\hbox{}\thispagestyle{#1}\newpage\fi\fi\fi} + +% V1.8b hooks to allow adjustment of space above title +\def\IEEEtitletopspace{0.5\baselineskip} +% an added extra amount to allow for adjustment/offset +\def\IEEEtitletopspaceextra{0pt} + +% user command to invoke the title page +\def\maketitle{\par% + \begingroup% + \normalfont% + \def\thefootnote{}% the \thanks{} mark type is empty + \def\footnotemark{}% and kill space from \thanks within author + \let\@makefnmark\relax% V1.7, must *really* kill footnotemark to remove all \textsuperscript spacing as well. + \footnotesize% equal spacing between thanks lines + \footnotesep 0.7\baselineskip%see global setting of \footnotesep for more info + % V1.7 disable \thanks note indention for compsoc + \@IEEEcompsoconly{\long\def\@makefntext##1{\parindent 1em\noindent\hbox{\@makefnmark}##1}}% + \normalsize% + \ifCLASSOPTIONpeerreview + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \thispagestyle{IEEEpeerreviewcoverpagestyle}\@thanks% + \else + \if@twocolumn% + \ifCLASSOPTIONtechnote% + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \else + \twocolumn[{\IEEEquantizevspace{\@maketitle}[\IEEEquantizedisabletitlecmds]{0pt}[-\topskip]{\baselineskip}{\@IEEENORMtitlevspace}{\@IEEEMINtitlevspace}\@IEEEaftertitletext}]% + \fi + \else + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \fi + \thispagestyle{IEEEtitlepagestyle}\@thanks% + \fi + % pullup page for pubid if used. + \if@IEEEusingpubid + \enlargethispage{-\@IEEEpubidpullup}% + \fi + \endgroup + \setcounter{footnote}{0}\let\maketitle\relax\let\@maketitle\relax + \gdef\@thanks{}% + % v1.6b do not clear these as we will need the title again for peer review papers + % \gdef\@author{}\gdef\@title{}% + \let\thanks\relax} + + +% V1.8 parbox to format \@IEEEtitleabstractindextext +\long\def\@IEEEtitleabstractindextextbox#1{\parbox{1\textwidth}{#1}} +% V1.8 compsoc is partial width +\ifCLASSOPTIONcompsoc +% comparison with proofs suggests it's in the range of 92.1-92.3% +\long\def\@IEEEtitleabstractindextextbox#1{\parbox{0.922\textwidth}{\@IEEEcompsocnotconfonly{\rightskip\@flushglue\leftskip\z@skip}#1}} +\fi + +% formats the Title, authors names, affiliations and special paper notice +% THIS IS A CONTROLLED SPACING COMMAND! Do not allow blank lines or unintentional +% spaces to enter the definition - use % at the end of each line +\def\@maketitle{\newpage +\bgroup\par\vskip\IEEEtitletopspace\vskip\IEEEtitletopspaceextra\centering% +\ifCLASSOPTIONtechnote% technotes, V1.8a abstract and index terms are not treated differently for compsoc technotes + {\bfseries\large\@IEEEcompsoconly{\Large\sffamily}\@title\par}\vskip 1.3em{\lineskip .5em\@IEEEcompsoconly{\large\sffamily}\@author + \@IEEEspecialpapernotice\par}\relax +\else% not a technote + \vskip0.2em{\Huge\ifCLASSOPTIONtransmag\bfseries\LARGE\fi\@IEEEcompsoconly{\sffamily}\@IEEEcompsocconfonly{\normalfont\normalsize\vskip 2\@IEEEnormalsizeunitybaselineskip + \bfseries\Large}\@IEEEcompsocnotconfonly{\vskip 0.75\@IEEEnormalsizeunitybaselineskip}\@title\par}\relax + \@IEEEcompsocnotconfonly{\vskip 0.5\@IEEEnormalsizeunitybaselineskip}\vskip1.0em\par% + % V1.6 handle \author differently if in conference mode + \ifCLASSOPTIONconference% + {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par}\relax + \else% peerreviewca, peerreview or journal + \ifCLASSOPTIONpeerreviewca + % peerreviewca handles author names just like conference mode + {\@IEEEcompsoconly{\sffamily}\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par + {\@IEEEcompsoconly{\vskip 1.5em\relax + \@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\par\noindent\hfill + \IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax + \else% journal, peerreview or transmag + \ifCLASSOPTIONtransmag + % transmag also handles author names just like conference mode + % it also uses \@IEEEtitleabstractindextex, but with one line less + % space above, and one more below + {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par + {\vspace{0.5\baselineskip}\relax\@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\vspace{-1\baselineskip}\par}}\relax + \else% journal or peerreview + {\lineskip.5em\@IEEEcompsoconly{\sffamily}\sublargesize\@author\@IEEEspecialpapernotice\par + {\@IEEEcompsoconly{\vskip 1.5em\relax + \@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\par\noindent\hfill + \IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax + \fi + \fi + \fi +\fi\par\addvspace{0.5\baselineskip}\egroup} + + +% V1.7 Computer Society "diamond line" which follows index terms for nonconference papers +% V1.8a full width diamond line for single column use +\def\@IEEEcompsocdiamondlinei{\vrule depth 0pt height 0.5pt width 4cm\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\vrule depth 0pt height 0.5pt width 4cm\relax} +% V1.8a narrower width diamond line for double column use +\def\@IEEEcompsocdiamondlineii{\vrule depth 0pt height 0.5pt width 2.5cm\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\vrule depth 0pt height 0.5pt width 2.5cm\relax} +% V1.8a bare core without rules to base a last resort on for very narrow linewidths +\def\@IEEEcompsocdiamondlineiii{\mbox{}\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\mbox{}\relax} + +% V1.8a allow \IEEEcompsocdiamondline to adjust for different linewidths. +% Use \@IEEEcompsocdiamondlinei if its width is less than 0.66\linewidth (0.487 nominal for single column) +% if not, fall back to \@IEEEcompsocdiamondlineii if its width is less than 0.75\linewidth (0.659 nominal for double column) +% if all else fails, try to make a custom diamondline based on the abnormally narrow linewidth +\def\IEEEcompsocdiamondline{\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlinei}\relax +\ifdim\@IEEEtrantmpdimenA<0.66\linewidth\relax\@IEEEcompsocdiamondlinei\relax +\else +\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlineii}\relax +\ifdim\@IEEEtrantmpdimenA<0.75\linewidth\relax\@IEEEcompsocdiamondlineii\relax +\else +\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlineiii}\relax +\@IEEEtrantmpdimenB=\linewidth\relax +\addtolength{\@IEEEtrantmpdimenB}{-1\@IEEEtrantmpdimenA}\relax +\vrule depth 0pt height 0.5pt width 0.33\@IEEEtrantmpdimenB\@IEEEcompsocdiamondlineiii\vrule depth 0pt height 0.5pt width 0.33\@IEEEtrantmpdimenB\relax +\fi\fi} + + +% V1.7 standard LateX2e \thanks, but with \itshape under compsoc. Also make it a \long\def +% We also need to trigger the one-shot footnote rule +\def\@IEEEtriggeroneshotfootnoterule{\global\@IEEEenableoneshotfootnoteruletrue} + + +\long\def\thanks#1{\footnotemark + \protected@xdef\@thanks{\@thanks + \protect\footnotetext[\the\c@footnote]{\@IEEEcompsoconly{\itshape + \protect\@IEEEtriggeroneshotfootnoterule\relax}\ignorespaces#1}}} +\let\@thanks\@empty + + +% V1.7 allow \author to contain \par's. This is needed to allow \thanks to contain \par. +\long\def\author#1{\gdef\@author{#1}} + + +% in addition to setting up IEEEitemize, we need to remove a baselineskip space above and +% below it because \list's \pars introduce blank lines because of the footnote struts. +\def\@IEEEsetupcompsocitemizelist{\def\labelitemi{$\bullet$}% +\setlength{\IEEElabelindent}{0pt}\setlength{\labelsep}{1.2em}\setlength{\parskip}{0pt}% +\setlength{\partopsep}{0pt}\setlength{\topsep}{0.5\baselineskip}\vspace{-1\baselineskip}\relax} + + +% flag for fake non-compsoc \IEEEcompsocthanksitem - prevents line break on very first item +\newif\if@IEEEbreakcompsocthanksitem \@IEEEbreakcompsocthanksitemfalse + +\ifCLASSOPTIONcompsoc +% V1.7 compsoc bullet item \thanks +% also, we need to redefine this to destroy the argument in \IEEEquantizevspace +\long\def\IEEEcompsocitemizethanks#1{\relax\@IEEEbreakcompsocthanksitemfalse\footnotemark + \protected@xdef\@thanks{\@thanks + \protect\footnotetext[\the\c@footnote]{\itshape\protect\@IEEEtriggeroneshotfootnoterule + {\let\IEEEiedlistdecl\relax\protect\begin{IEEEitemize}[\protect\@IEEEsetupcompsocitemizelist]\ignorespaces#1\relax + \protect\end{IEEEitemize}}\protect\vspace{-1\baselineskip}}}} +\DeclareRobustCommand*{\IEEEcompsocthanksitem}{\item} +\else +% non-compsoc, allow for dual compilation via rerouting to normal \thanks +\long\def\IEEEcompsocitemizethanks#1{\thanks{#1}} +% redirect to "pseudo-par" \hfil\break\indent after swallowing [] from \IEEEcompsocthanksitem[] +\DeclareRobustCommand{\IEEEcompsocthanksitem}{\@ifnextchar [{\@IEEEthanksswallowoptionalarg}% +{\@IEEEthanksswallowoptionalarg[\relax]}} +% be sure and break only after first item, be sure and ignore spaces after optional argument +\def\@IEEEthanksswallowoptionalarg[#1]{\relax\if@IEEEbreakcompsocthanksitem\hfil\break +\indent\fi\@IEEEbreakcompsocthanksitemtrue\ignorespaces} +\fi + + +% V1.6b define the \IEEEpeerreviewmaketitle as needed +\ifCLASSOPTIONpeerreview +\def\IEEEpeerreviewmaketitle{\@IEEEcleardoublepage{empty}% +\ifCLASSOPTIONtwocolumn +\twocolumn[{\IEEEquantizevspace{\@IEEEpeerreviewmaketitle}[\IEEEquantizedisabletitlecmds]{0pt}[-\topskip]{\baselineskip}{\@IEEENORMtitlevspace}{\@IEEEMINtitlevspace}}] +\else +\newpage\@IEEEpeerreviewmaketitle\@IEEEstatictitlevskip +\fi +\thispagestyle{IEEEtitlepagestyle}} +\else +% \IEEEpeerreviewmaketitle does nothing if peer review option has not been selected +\def\IEEEpeerreviewmaketitle{\relax} +\fi + +% peerreview formats the repeated title like the title in journal papers. +\def\@IEEEpeerreviewmaketitle{\bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEcompsoconly{\sffamily}% +\normalfont\normalsize\vskip0.2em{\Huge\@title\par}\vskip1.0em\par +\par\addvspace{0.5\baselineskip}\egroup} + + + +% V1.6 +% this is a static rubber spacer between the title/authors and the main text +% used for single column text, or when the title appears in the first column +% of two column text (technotes). +\def\@IEEEstatictitlevskip{{\normalfont\normalsize +% adjust spacing to next text +% v1.6b handle peer review papers +\ifCLASSOPTIONpeerreview +% for peer review papers, the same value is used for both title pages +% regardless of the other paper modes + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip +\else + \ifCLASSOPTIONconference% conference + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip% + \else% + \ifCLASSOPTIONtechnote% technote + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip% + \else% journal uses more space + \vskip 2.5\baselineskip plus 0.75\baselineskip minus 0.375\baselineskip% + \fi + \fi +\fi}} + + +% set the nominal and minimum values for the quantized title spacer +% the quantization algorithm will not allow the spacer size to +% become less than \@IEEEMINtitlevspace - instead it will be lengthened +% default to journal values +\def\@IEEENORMtitlevspace{2.5\baselineskip} +\def\@IEEEMINtitlevspace{2\baselineskip} +% conferences and technotes need tighter spacing +\ifCLASSOPTIONconference% conference + \def\@IEEENORMtitlevspace{1\baselineskip} + \def\@IEEEMINtitlevspace{0.75\baselineskip} +\fi +\ifCLASSOPTIONtechnote% technote + \def\@IEEENORMtitlevspace{1\baselineskip} + \def\@IEEEMINtitlevspace{0.75\baselineskip} +\fi + + +% V1.8a +\def\IEEEquantizevspace{\begingroup\@ifstar{\@IEEEquantizevspacestarformtrue\@IEEEquantizevspace}{\@IEEEquantizevspacestarformfalse\@IEEEquantizevspace}} +% \IEEEquantizevspace[output dimen register]{object}[object decl] +% {top baselineskip} +% [offset][prevdepth][lineskip limit][lineskip] +% {unit height}{nominal vspace}{minimum vspace} +% +% Calculates and creates the vspace needed to make the combined height with +% the given object an integer multiple of the given unit height. This command +% is more general than the older \@IEEEdynamictitlevspace it replaces. +% +% The star form has no effect at present, but is reserved for future use. +% +% If the optional argument [output dimen register] is given, the calculated +% vspace height is stored in the given output dimen (or skip) register +% and no other action is taken, otherwise the object followed by a vspace* +% of the appropriate height is evaluated/output. +% +% The optional object decl (declarations) is code that is evaluated just +% before the object's height is evaluated. Its intented purpose is to allow +% for the alteration or disabling of code within the object during internal +% height evaluation (e.g., \long\def\thanks#1{\relax} ). +% This special code is not invoked if/when the object is rendered at the end. +% +% The nominal vspace is the target value of the added vspace and the minimum +% vspace is the lower allowed limit. The vspacer will be the value that achieves +% integral overall height, in terms of the given unit height, that is closest +% to the nominal vspace and that is not less than the specified minimum vspace. +% +% The line spacing algorithm of TeX is somewhat involved and requires special +% care with regard to the first line of a vertical list (which is indicated +% when \prevdepth is -1000pt or less). top baselineskip specifies the +% baselineskip or topskip used prior to the object. If the height of the +% first line of the object is greater than the given top baselineskip, then +% the top baselineskip is subtracted from the height of the first line and +% that difference is considered along with the rest of the object height +% (because the object will be shifted down by an amount = +% top line height - top baselineskip). Otherwise, the height of the first line +% of the object is ignored as far as the calculations are concerned. +% This algorithm is adequate for objects that appear at the top of a page +% (e.g., titles) where \topskip spacing is used. +% +% However, as explained on page 78 of the TeXbook, interline spacing is more +% complex when \baselineskip is being used (indicated by \prevdepth > +% -1000pt). The four optional parameters offset, prevdepth, lineskip limit and +% lineskip are assumed to be equal to be 0pt, \prevdepth, \lineskiplimit and +% \lineskip, respectively, if they are omitted. +% +% The prevdepth is the depth of the line before the object, the lineskip limit +% specifies how close the top of the object can come to the bottom of the +% previous line before \baselineskip is ignored and \lineskip is inserted +% between the object and the line above it. Lineskip does not come into +% play unless the first line of the object is high enough to "get too close" +% (as specified by lineskiplimit) to the line before it. The the prevdepth, +% lineskip limit, and lineskip optional parameters are not needed for the +% first object/line on a page (i.e., prevdepth <= -1000pt) where the simplier +% \topskip spacing rules are in effect. +% +% Offset is a manual adjustment that is added to the height calculations of +% object irrespective of the value of \prevdepth. It is useful when the top +% baselineskip will result in a noninteger unit height object placement even +% if the object itself has integral height. e.g., a footnotesize baselineskip +% is used before the object, thus an offset of, say -3pt, can be given as a +% correction. + +% Common combinations of these parameters include: +% +% top baselineskip: (and default values for offset, prevdepth, etc.) +% \topskip % for objects that appear at the top of a page +% \maxdimen % always ignore the height of the top line +% 0pt % always consider any positive height of the top line +% +% for objects to appear inline in normal text: +% top baselineskip = \baselineskip +% +% set prevdepth = -1000pt and top baselineskip = 0pt to consider the +% overall height of the object without any other external skip +% consideration + +\newif\if@IEEEquantizevspacestarform % flag to indicate star form +\newif\if@IEEEquantizevspaceuseoutdimenreg % flag to indicate output dimen register is to be used +% Use our own private registers because the object could contain a +% structure that uses the existing tmp scratch pad registers +\newdimen\@IEEEquantizeheightA +\newdimen\@IEEEquantizeheightB +\newdimen\@IEEEquantizeheightC +\newdimen\@IEEEquantizeprevdepth % need to save this early as can change +\newcount\@IEEEquantizemultiple +\newbox\@IEEEquantizeboxA + + +\def\@IEEEquantizevspace{\@ifnextchar [{\@IEEEquantizevspaceuseoutdimenregtrue\@@IEEEquantizevspace}{\@IEEEquantizevspaceuseoutdimenregfalse\@@IEEEquantizevspace[]}} + + +\long\def\@@IEEEquantizevspace[#1]#2{\relax +% acquire and store +% #1 optional output dimen register +% #2 object +\edef\@IEEEquantizeoutdimenreg{#1}\relax +% allow for object specifications that contain parameters +\@IEEEtrantmptoksA={#2}\relax +\long\edef\@IEEEquantizeobject{\the\@IEEEtrantmptoksA}\relax +\@ifnextchar [{\@@@IEEEquantizevspace}{\@@@IEEEquantizevspace[\relax]}} + +\long\def\@@@IEEEquantizevspace[#1]#2{\relax +% acquire and store +% [#1] optional object decl, is \relax if not given by user +% #2 top baselineskip +% allow for object decl specifications that have parameters +\@IEEEtrantmptoksA={#1}\relax +\long\edef\@IEEEquantizeobjectdecl{\the\@IEEEtrantmptoksA}\relax +\edef\@IEEEquantizetopbaselineskip{#2}\ivIEEEquantizevspace} + +% acquire optional argument set and store +% [offset][prevdepth][lineskip limit][lineskip] +\def\ivIEEEquantizevspace{\@ifnextchar [{\@vIEEEquantizevspace}{\@vIEEEquantizevspace[0pt]}} +\def\@vIEEEquantizevspace[#1]{\edef\@IEEEquantizeoffset{#1}\@ifnextchar [{\@viIEEEquantizevspace}{\@viIEEEquantizevspace[\prevdepth]}} +\def\@viIEEEquantizevspace[#1]{\@IEEEquantizeprevdepth=#1\relax\@ifnextchar [{\@viiIEEEquantizevspace}{\@viiIEEEquantizevspace[\lineskiplimit]}} +\def\@viiIEEEquantizevspace[#1]{\edef\@IEEEquantizelineskiplimit{#1}\@ifnextchar [{\@viiiIEEEquantizevspace}{\@viiiIEEEquantizevspace[\lineskip]}} +\def\@viiiIEEEquantizevspace[#1]{\edef\@IEEEquantizelineskip{#1}\@ixIEEEquantizevspace} + +% main routine +\def\@ixIEEEquantizevspace#1#2#3{\relax +\edef\@IEEEquantizeunitheight{#1}\relax +\edef\@IEEEquantizenomvspace{#2}\relax +\edef\@IEEEquantizeminvspace{#3}\relax +% \@IEEEquantizeoutdimenreg +% \@IEEEquantizeobject +% \@IEEEquantizeobjectdecl +% \@IEEEquantizetopbaselineskip +% \@IEEEquantizeoffset +% \@IEEEquantizeprevdepth +% \@IEEEquantizelineskiplimit +% \@IEEEquantizelineskip +% \@IEEEquantizeunitheight +% \@IEEEquantizenomvspace +% \@IEEEquantizeminvspace +% get overall height of object +\setbox\@IEEEquantizeboxA\vbox{\begingroup\@IEEEquantizeobjectdecl\@IEEEquantizeobject\relax\endgroup}\relax +\@IEEEquantizeheightA\ht\@IEEEquantizeboxA\relax +% get height of first line of object +\setbox\@IEEEquantizeboxA\vtop{\begingroup\@IEEEquantizeobjectdecl\@IEEEquantizeobject\relax\endgroup}\relax +\@IEEEquantizeheightB\ht\@IEEEquantizeboxA\relax +\ifdim\@IEEEquantizeprevdepth>-1000pt\relax % prevdepth > -1000pf means full baselineskip\lineskip rules in effect +% lineskip spacing rule takes effect if height of top line > baselineskip - prevdepth - lineskiplimit, +% otherwise the baselineskip rule is in effect and the height of the first line does not matter at all. +\@IEEEquantizeheightC=\@IEEEquantizetopbaselineskip\relax +\advance\@IEEEquantizeheightC-\@IEEEquantizeprevdepth\relax +\advance\@IEEEquantizeheightC-\@IEEEquantizelineskiplimit\relax % this works even though \@IEEEquantizelineskiplimit is a macro because TeX allows --10pt notation +\ifdim\@IEEEquantizeheightB>\@IEEEquantizeheightC\relax +% lineskip spacing rule is in effect i.e., the object is going to be shifted down relative to the +% baselineskip set position by its top line height (already a part of the total height) + prevdepth + lineskip - baselineskip +\advance\@IEEEquantizeheightA\@IEEEquantizeprevdepth\relax +\advance\@IEEEquantizeheightA\@IEEEquantizelineskip\relax +\advance\@IEEEquantizeheightA-\@IEEEquantizetopbaselineskip\relax +\else +% height of first line <= \@IEEEquantizetopbaselineskip - \@IEEEquantizeprevdepth - \@IEEEquantizelineskiplimit +% standard baselineskip rules are in effect, so don't consider height of first line +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightB\relax +\fi +% +\else % prevdepth <= -1000pt, simplier \topskip type rules in effect +\ifdim\@IEEEquantizeheightB>\@IEEEquantizetopbaselineskip +% height of top line (already included in the total height) in excess of +% baselineskip is the amount it will be downshifted +\advance\@IEEEquantizeheightA-\@IEEEquantizetopbaselineskip\relax +\else +% height of first line is irrelevant, remove it +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightB\relax +\fi +\fi % prevdepth <= -1000pt +% +% adjust height for any manual offset +\advance\@IEEEquantizeheightA\@IEEEquantizeoffset\relax +% add in nominal spacer +\advance\@IEEEquantizeheightA\@IEEEquantizenomvspace\relax +% check for nonzero unitheight +\@IEEEquantizeheightB=\@IEEEquantizeunitheight\relax +\ifnum\@IEEEquantizeheightB=0\relax +\@IEEEclspkgerror{IEEEquantizevspace unit height cannot be zero. Assuming 10pt.}% +{Division by zero is not allowed.} +\@IEEEquantizeheightB=10pt\relax +\fi +% get integer number of lines +\@IEEEquantizemultiple=\@IEEEquantizeheightA\relax +\divide\@IEEEquantizemultiple\@IEEEquantizeheightB\relax +% set A to contain the excess height over the \@IEEEquantizemultiple of lines +% A = height - multiple*unitheight +\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\multiply\@IEEEquantizeheightC\@IEEEquantizemultiple\relax +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightC\relax +% set B to contain the height short of \@IEEEquantizemultiple+1 of lines +% B = unitheight - A +\advance\@IEEEquantizeheightB-\@IEEEquantizeheightA\relax +% choose A or B based on which is closer +\@IEEEquantizeheightC\@IEEEquantizenomvspace\relax +\ifdim\@IEEEquantizeheightA<\@IEEEquantizeheightB\relax +% C = nomvspace - A, go with lower +\advance\@IEEEquantizeheightC-\@IEEEquantizeheightA\relax +\else +% C = nomvspace + B, go with upper +\advance\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\fi +% if violate lower bound, use next integer bound +\ifdim\@IEEEquantizeheightC<\@IEEEquantizeminvspace\relax +% A + B = unitheight +\advance\@IEEEquantizeheightC\@IEEEquantizeheightA\relax +\advance\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\fi +% export object and spacer outside of group +\global\let\@IEEEquantizeobjectout\@IEEEquantizeobject\relax +\global\@IEEEquantizeheightC\@IEEEquantizeheightC\relax +\endgroup +\if@IEEEquantizevspaceuseoutdimenreg +\@IEEEquantizeoutdimenreg=\@IEEEquantizeheightC\relax +\else +\@IEEEquantizeobjectout\relax +\vskip\@IEEEquantizeheightC\relax +\fi} + + +% user command to disable all global assignments, possible use within object decl +\def\IEEEquantizedisableglobal{\let\global\relax +\let\gdef\def +\let\xdef\edef} +% user command to allow for the disabling of \thanks and other commands, possible use within object decl +\def\IEEEquantizedisabletitlecmds{\long\def\thanks##1{\relax}\relax +\long\def\IEEEcompsocitemizethanks##1{\relax}\def\newpage{\relax}} + + + + + +% V1.6 +% we allow the user access to the last part of the title area +% useful in emergencies such as when a different spacing is needed +% This text is NOT compensated for in the dynamic sizer. +\let\@IEEEaftertitletext=\relax +\long\def\IEEEaftertitletext#1{\def\@IEEEaftertitletext{#1}} + + +% V1.7 provide a way for users to enter abstract and keywords +% into the onecolumn title are. This text is compensated for +% in the dynamic sizer. +\let\@IEEEtitleabstractindextext=\relax +\long\def\IEEEtitleabstractindextext#1{\def\@IEEEtitleabstractindextext{#1}} + +% V1.7 provide a way for users to get the \@IEEEtitleabstractindextext if +% not in compsoc or transmag journal mode - this way abstract and keywords +% can still be placed in their conventional position if not in those modes. +\def\IEEEdisplaynontitleabstractindextext{% +% display for all conference formats +\ifCLASSOPTIONconference\@IEEEtitleabstractindextext\relax +\else% non-conferences + % V1.8a display for all technotes + \ifCLASSOPTIONtechnote\@IEEEtitleabstractindextext\relax + % V1.8a add diamond line after abstract and index terms for compsoc technotes + \@IEEEcompsoconly{\noindent\hfill\IEEEcompsocdiamondline\hfill\hbox{}\par}\relax + \else % non-conferences and non-technotes + \ifCLASSOPTIONcompsoc% display if not compsoc and not transmag + \else + \ifCLASSOPTIONtransmag + \else% not compsoc journal nor transmag journal + \@IEEEtitleabstractindextext\relax + \fi + \fi + \fi +\fi} + + +% command to allow alteration of baselinestretch, but only if the current +% baselineskip is unity. Used to tweak the compsoc abstract and keywords line spacing. +\def\@IEEEtweakunitybaselinestretch#1{{\def\baselinestretch{1}\selectfont +\global\@tempskipa\baselineskip}\ifnum\@tempskipa=\baselineskip% +\def\baselinestretch{#1}\selectfont\fi\relax} + + +% abstract and keywords are in \small, except +% for 9pt docs in which they are in \footnotesize +% Because 9pt docs use an 8pt footnotesize, \small +% becomes a rather awkward 8.5pt +\def\@IEEEabskeysecsize{\small} +\ifx\CLASSOPTIONpt\@IEEEptsizenine + \def\@IEEEabskeysecsize{\footnotesize} +\fi + +% compsoc journals use \footnotesize, compsoc conferences use normalsize +\@IEEEcompsoconly{\def\@IEEEabskeysecsize{\footnotesize}} +\@IEEEcompsocconfonly{\def\@IEEEabskeysecsize{\small}} + + +% V1.6 have abstract and keywords strip leading spaces, pars and newlines +% so that spacing is more tightly controlled. +\def\abstract{\normalfont + \if@twocolumn + \@IEEEabskeysecsize\bfseries\textit{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +% V1.6 The IEEE wants only 1 pica from end of abstract to introduction heading when in +% conference mode (the heading already has this much above it) +\def\endabstract{\relax\ifCLASSOPTIONconference\vspace{0ex}\else\vspace{1.34ex}\fi\par\if@twocolumn\else\endquotation\fi + \normalfont\normalsize} + +\def\IEEEkeywords{\normalfont + \if@twocolumn + \@IEEEabskeysecsize\bfseries\textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +\def\endIEEEkeywords{\relax\ifCLASSOPTIONtechnote\vspace{1.34ex}\else\vspace{0.67ex}\fi + \par\if@twocolumn\else\endquotation\fi% + \normalfont\normalsize} + +% V1.7 compsoc keywords index terms +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONconference% compsoc conference +\def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\bfseries + \if@twocolumn + \@IEEEabskeysecsize\noindent\textit{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} +\def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\bfseries + \if@twocolumn + \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent + \textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} + \else% compsoc not conference +\def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily + \if@twocolumn + \@IEEEabskeysecsize\noindent\textbf{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} +\def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily + \if@twocolumn + \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent + \textbf{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} + \fi +\fi + +% V1.8 transmag keywords index terms +% no abstract name, use indentation +\ifCLASSOPTIONtransmag +\def\abstract{\normalfont\parindent 1em\relax + \if@twocolumn + \@IEEEabskeysecsize\bfseries\indent + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize + \textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} + +\def\IEEEkeywords{\normalfont\parindent 1em\relax + \if@twocolumn + \@IEEEabskeysecsize\vspace{1\baselineskip}\bfseries\indent\textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\vspace{1\baselineskip}\centering\@IEEEabskeysecsize + \textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +\fi + + + +% gobbles all leading \, \\ and \par, upon finding first token that +% is not a \ , \\ or a \par, it ceases and returns that token +% +% used to strip leading \, \\ and \par from the input +% so that such things in the beginning of an environment will not +% affect the formatting of the text +\long\def\@IEEEgobbleleadPARNLSP#1{\let\@IEEEswallowthistoken=0% +\let\@IEEEgobbleleadPARNLSPtoken#1% +\let\@IEEEgobbleleadPARtoken=\par% +\let\@IEEEgobbleleadNLtoken=\\% +\let\@IEEEgobbleleadSPtoken=\ % +\def\@IEEEgobbleleadSPMACRO{\ }% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadPARtoken% +\let\@IEEEswallowthistoken=1% +\fi% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadNLtoken% +\let\@IEEEswallowthistoken=1% +\fi% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPtoken% +\let\@IEEEswallowthistoken=1% +\fi% +% a control space will come in as a macro +% when it is the last one on a line +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPMACRO% +\let\@IEEEswallowthistoken=1% +\fi% +% if we have to swallow this token, do so and taste the next one +% else spit it out and stop gobbling +\ifx\@IEEEswallowthistoken 1\let\@IEEEnextgobbleleadPARNLSP=\@IEEEgobbleleadPARNLSP\else% +\let\@IEEEnextgobbleleadPARNLSP=#1\fi% +\@IEEEnextgobbleleadPARNLSP}% + + + + +% TITLING OF SECTIONS +\def\@IEEEsectpunct{:\ \,} % Punctuation after run-in section heading (headings which are + % part of the paragraphs), need little bit more than a single space + % spacing from section number to title +% compsoc conferences use regular period/space punctuation +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference +\def\@IEEEsectpunct{.\ } +\fi\fi + + +\def\@seccntformat#1{\csname the#1dis\endcsname\hskip 0.5em\relax} + +\ifCLASSOPTIONcompsoc +% compsoc journals need extra spacing +\ifCLASSOPTIONconference\else +\def\@seccntformat#1{\csname the#1dis\endcsname\hskip 1em\relax} +\fi\fi + +%v1.7 put {} after #6 to allow for some types of user font control +%and use \@@par rather than \par +\def\@sect#1#2#3#4#5#6[#7]#8{% + \ifnum #2>\c@secnumdepth + \let\@svsec\@empty + \else + \refstepcounter{#1}% + % load section label and spacer into \@svsec + \protected@edef\@svsec{\@seccntformat{#1}\relax}% + \fi% + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@% tempskipa determines whether is treated as a high + \begingroup #6{\relax% or low level heading + \noindent % subsections are NOT indented + % print top level headings. \@svsec is label, #8 is heading title + % The IEEE does not block indent the section title text, it flows like normal + {\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\@@par}}% + \endgroup + \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else + \protect\numberline{\csname the#1\endcsname}\fi#7}% + \else % printout low level headings + % svsechd seems to swallow the trailing space, protect it with \mbox{} + % got rid of sectionmark stuff + \def\@svsechd{#6{\hskip #3\relax\@svsec #8\@IEEEsectpunct\mbox{}}% + \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else + \protect\numberline{\csname the#1\endcsname}\fi#7}}% + \fi%skip down + \@xsect{#5}} + + +% section* handler +%v1.7 put {} after #4 to allow for some types of user font control +%and use \@@par rather than \par +\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax + \ifdim \@tempskipa>\z@ + %\begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup + % The IEEE does not block indent the section title text, it flows like normal + \begingroup \noindent #4{\relax{\hskip #1}{\interlinepenalty \@M #5\@@par}}\endgroup + % svsechd swallows the trailing space, protect it with \mbox{} + \else \def\@svsechd{#4{\hskip #1\relax #5\@IEEEsectpunct\mbox{}}}\fi + \@xsect{#3}} + + +%% SECTION heading spacing and font +%% +% arguments are: #1 - sectiontype name +% (for \@sect) #2 - section level +% #3 - section heading indent +% #4 - top separation (absolute value used, neg indicates not to indent main text) +% If negative, make stretch parts negative too! +% #5 - (absolute value used) positive: bottom separation after heading, +% negative: amount to indent main text after heading +% Both #4 and #5 negative means to indent main text and use negative top separation +% #6 - font control +% You've got to have \normalfont\normalsize in the font specs below to prevent +% trouble when you do something like: +% \section{Note}{\ttfamily TT-TEXT} is known to ... +% The IEEE sometimes REALLY stretches the area before a section +% heading by up to about 0.5in. However, it may not be a good +% idea to let LaTeX have quite this much rubber. +\ifCLASSOPTIONconference% +% The IEEE wants section heading spacing to decrease for conference mode +\def\section{\@startsection{section}{1}{\z@}{1.5ex plus 1.5ex minus 0.5ex}% +{0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{1.5ex plus 1.5ex minus 0.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\else % for journals +\def\section{\@startsection{section}{1}{\z@}{3.0ex plus 1.5ex minus 1.5ex}% V1.6 3.0ex from 3.5ex +{0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{3.5ex plus 1.5ex minus 1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\fi + +% for both journals and conferences +% decided to put in a little rubber above the section, might help somebody +\def\subsubsection{\@startsection{subsubsection}{3}{\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize\itshape}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize\itshape}}% + + +% compsoc +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference +% compsoc conference +\def\section{\@startsection{section}{1}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\large\bfseries}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\sublargesize\bfseries}}% +\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{0ex}{\normalfont\normalsize\bfseries}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize}}% +\else% compsoc journals +% use negative top separation as compsoc journals do not indent paragraphs after section titles +\def\section{\@startsection{section}{1}{\z@}{-3.5ex plus -2ex minus -1.5ex}% +{0.7ex plus 1ex minus 0ex}{\normalfont\sublargesize\sffamily\bfseries\scshape}}% +% Note that subsection and smaller may not be correct for the Computer Society, +% I have to look up an example. +\def\subsection{\@startsection{subsection}{2}{\z@}{-3.5ex plus -1.5ex minus -1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\sffamily\bfseries}}% +\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex plus -1ex minus -1ex}% +{0.5ex plus 0.5ex minus 0ex}{\normalfont\normalsize\sffamily\itshape}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{-0ex plus -0.1ex minus -0.1ex}% +{0ex}{\normalfont\normalsize}}% +\fi\fi + +% transmag +\ifCLASSOPTIONtransmag +\def\subsection{\@startsection{subsection}{2}{0.75\parindent}{3.5ex plus 1.5ex minus 1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\def\subsubsection{\@startsection{subsubsection}{3}{1.25\parindent}{0.1ex plus 0.1ex minus 0.1ex}% +{0.1ex}{\normalfont\normalsize\itshape}}% +\fi + + +% V1.8a provide for a raised line Introduction section for use with Computer +% Society papers. We have to remove any spacing glue after the section +% heading and then remove the blank line for the new paragraph after it. +% LaTeX's section handler alters \everypar and we need to propogate those +% changes outside of the \parbox lest there be spacing problems at the top +% of the next section. +\def\IEEEraisesectionheading#1{\noindent\raisebox{1.5\baselineskip}[0pt][0pt]{\parbox[b]{\columnwidth}{#1\unskip\global\everypar=\everypar}}\vspace{-1\baselineskip}\vspace{-\parskip}\par} + + + +%% ENVIRONMENTS +% "box" symbols at end of proofs +\def\IEEEQEDclosed{\mbox{\rule[0pt]{1.3ex}{1.3ex}}} % for a filled box +% V1.6 some journals use an open box instead that will just fit around a closed one +\def\IEEEQEDopen{{\setlength{\fboxsep}{0pt}\setlength{\fboxrule}{0.2pt}\fbox{\rule[0pt]{0pt}{1.3ex}\rule[0pt]{1.3ex}{0pt}}}} +\ifCLASSOPTIONcompsoc +\def\IEEEQED{\IEEEQEDopen} % default to open for compsoc +\else +\def\IEEEQED{\IEEEQEDclosed} % otherwise default to closed +\fi + +%V1.8 flag to indicate if QED symbol is to be shown +\newif\if@IEEEQEDshow \@IEEEQEDshowtrue +\def\IEEEproofindentspace{2\parindent}% V1.8 allow user to change indentation amount if desired +% v1.7 name change to avoid namespace collision with amsthm. Also add support +% for an optional argument. +\def\IEEEproof{\@ifnextchar[{\@IEEEproof}{\@IEEEproof[\IEEEproofname]}} +\def\@IEEEproof[#1]{\@IEEEQEDshowtrue\par\noindent\hspace{\IEEEproofindentspace}{\itshape #1: }} +\def\endIEEEproof{\if@IEEEQEDshow\hspace*{\fill}\nobreakspace\IEEEQED\fi\par} +% qedhere for equation environments, similar to AMS \qedhere +\def\IEEEQEDhereeqn{\global\@IEEEQEDshowfalse\eqno\let\eqno\relax\let\leqno\relax + \let\veqno\relax\hbox{\IEEEQED}} +% IEEE style qedhere for IEEEeqnarray and other environments +\def\IEEEQEDhere{\global\@IEEEQEDshowfalse\IEEEQED} +% command to disable QED at end of IEEEproof +\def\IEEEQEDoff{\global\@IEEEQEDshowfalse} + + +%\itemindent is set to \z@ by list, so define new temporary variable +\newdimen\@IEEEtmpitemindent + +\ifCLASSOPTIONcompsoc +% V1.8a compsoc uses bold theorem titles, a period instead of a colon, vertical spacing, and hanging indentation +% V1.8 allow long theorem names to break across lines. +% Thanks to Miquel Payaro for reporting this. +\def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\relax + \topsep 0.2\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip + \rmfamily\trivlist\hangindent\parindent% + \item[]\textit{\bfseries\noindent #1\ #2.} \itemindent\@IEEEtmpitemindent\relax} +\def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\relax +\topsep 0.2\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip +\rmfamily\trivlist\hangindent\parindent% +% V1.6 The IEEE is back to using () around theorem names which are also in italics +% Thanks to Christian Peel for reporting this. + \item[]\textit{\bfseries\noindent #1\ #2\ (#3).} \itemindent\@IEEEtmpitemindent\relax} +% V1.7 remove bogus \unskip that caused equations in theorems to collide with +% lines below. +\def\@endtheorem{\endtrivlist\vskip 0.25\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip} +\else +% +% noncompsoc +% +% V1.8 allow long theorem names to break across lines. +% Thanks to Miquel Payaro for reporting this. +\def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\relax\topsep 0pt\rmfamily\trivlist% + \item[]\textit{\indent #1\ #2:} \itemindent\@IEEEtmpitemindent\relax} +\def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\relax\topsep 0pt\rmfamily \trivlist% +% V1.6 The IEEE is back to using () around theorem names which are also in italics +% Thanks to Christian Peel for reporting this. + \item[]\textit{\indent #1\ #2\ (#3):} \itemindent\@IEEEtmpitemindent\relax} +% V1.7 remove bogus \unskip that caused equations in theorems to collide with +% lines below. +\def\@endtheorem{\endtrivlist} +\fi + + + +% V1.6 +% display command for the section the theorem is in - so that \thesection +% is not used as this will be in Roman numerals when we want arabic. +% LaTeX2e uses \def\@thmcounter#1{\noexpand\arabic{#1}} for the theorem number +% (second part) display and \def\@thmcountersep{.} as a separator. +% V1.7 intercept calls to the section counter and reroute to \@IEEEthmcounterinsection +% to allow \appendix(ices} to override as needed. +% +% special handler for sections, allows appendix(ices) to override +\gdef\@IEEEthmcounterinsection#1{\arabic{#1}} +% string macro +\edef\@IEEEstringsection{section} + +% redefine the #1#2[#3] form of newtheorem to use a hook to \@IEEEthmcounterinsection +% if section in_counter is used +\def\@xnthm#1#2[#3]{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@newctr{#1}[#3]% + \edef\@IEEEstringtmp{#3} + \ifx\@IEEEstringtmp\@IEEEstringsection + \expandafter\xdef\csname the#1\endcsname{% + \noexpand\@IEEEthmcounterinsection{#3}\@thmcountersep + \@thmcounter{#1}}% + \else + \expandafter\xdef\csname the#1\endcsname{% + \expandafter\noexpand\csname the#3\endcsname \@thmcountersep + \@thmcounter{#1}}% + \fi + \global\@namedef{#1}{\@thm{#1}{#2}}% + \global\@namedef{end#1}{\@endtheorem}}} + + + +%% SET UP THE DEFAULT PAGESTYLE +\pagestyle{headings} +\pagenumbering{arabic} + +% normally the page counter starts at 1 +\setcounter{page}{1} +% however, for peerreview the cover sheet is page 0 or page -1 +% (for duplex printing) +\ifCLASSOPTIONpeerreview + \if@twoside + \setcounter{page}{-1} + \else + \setcounter{page}{0} + \fi +\fi + +% standard book class behavior - let bottom line float up and down as +% needed when single sided +\ifCLASSOPTIONtwoside\else\raggedbottom\fi +% if two column - turn on twocolumn, allow word spacings to stretch more and +% enforce a rigid position for the last lines +\ifCLASSOPTIONtwocolumn +% the peer review option delays invoking twocolumn + \ifCLASSOPTIONpeerreview\else + \twocolumn + \fi +\sloppy +\flushbottom +\fi + + + + +% \APPENDIX and \APPENDICES definitions + +% This is the \@ifmtarg command from the LaTeX ifmtarg package +% by Peter Wilson (CUA) and Donald Arseneau +% \@ifmtarg is used to determine if an argument to a command +% is present or not. +% For instance: +% \@ifmtarg{#1}{\typeout{empty}}{\typeout{has something}} +% \@ifmtarg is used with our redefined \section command if +% \appendices is invoked. +% The command \section will behave slightly differently depending +% on whether the user specifies a title: +% \section{My appendix title} +% or not: +% \section{} +% This way, we can eliminate the blank lines where the title +% would be, and the unneeded : after Appendix in the table of +% contents +\begingroup +\catcode`\Q=3 +\long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil} +\long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4} +\endgroup +% end of \@ifmtarg defs + + +% V1.7 +% command that allows the one time saving of the original definition +% of section to \@IEEEappendixsavesection for \appendix or \appendices +% we don't save \section here as it may be redefined later by other +% packages (hyperref.sty, etc.) +\def\@IEEEsaveoriginalsectiononce{\let\@IEEEappendixsavesection\section +\let\@IEEEsaveoriginalsectiononce\relax} + +% neat trick to grab and process the argument from \section{argument} +% we process differently if the user invoked \section{} with no +% argument (title) +% note we reroute the call to the old \section* +\def\@IEEEprocessthesectionargument#1{% +\@ifmtarg{#1}{% +\@IEEEappendixsavesection*{\appendixname\nobreakspace\thesectiondis}% +\addcontentsline{toc}{section}{\appendixname\nobreakspace\thesection}}{% +\@IEEEappendixsavesection*{\appendixname\nobreakspace\thesectiondis\\* #1}% +\addcontentsline{toc}{section}{\appendixname\nobreakspace\thesection: #1}}} + +% we use this if the user calls \section{} after +% \appendix-- which has no meaning. So, we ignore the +% command and its argument. Then, warn the user. +\def\@IEEEdestroythesectionargument#1{\typeout{** WARNING: Ignoring useless +\protect\section\space in Appendix (line \the\inputlineno).}} + + +% remember \thesection forms will be displayed in \ref calls +% and in the Table of Contents. +% The \sectiondis form is used in the actual heading itself + +% appendix command for one single appendix +% normally has no heading. However, if you want a +% heading, you can do so via the optional argument: +% \appendix[Optional Heading] +\def\appendix{\relax} +\renewcommand{\appendix}[1][]{\@IEEEsaveoriginalsectiononce\par + % v1.6 keep hyperref's identifiers unique + \gdef\theHsection{Appendix.A}% + % v1.6 adjust hyperref's string name for the section + \xdef\Hy@chapapp{appendix}% + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{subsubsection}{0}% + \setcounter{paragraph}{0}% + \gdef\thesection{A}% + \gdef\thesectiondis{}% + \gdef\thesubsection{\Alph{subsection}}% + \gdef\@IEEEthmcounterinsection##1{A} + \refstepcounter{section}% update the \ref counter + \@ifmtarg{#1}{\@IEEEappendixsavesection*{\appendixname}% + \addcontentsline{toc}{section}{\appendixname}}{% + \@IEEEappendixsavesection*{\appendixname\nobreakspace\\* #1}% + \addcontentsline{toc}{section}{\appendixname: #1}}% + % redefine \section command for appendix + % leave \section* as is + \def\section{\@ifstar{\@IEEEappendixsavesection*}{% + \@IEEEdestroythesectionargument}}% throw out the argument + % of the normal form +} + + + +% appendices command for multiple appendices +% user then calls \section with an argument (possibly empty) to +% declare the individual appendices +\def\appendices{\@IEEEsaveoriginalsectiononce\par + % v1.6 keep hyperref's identifiers unique + \gdef\theHsection{Appendix.\Alph{section}}% + % v1.6 adjust hyperref's string name for the section + \xdef\Hy@chapapp{appendix}% + \setcounter{section}{-1}% we want \refstepcounter to use section 0 + \setcounter{subsection}{0}% + \setcounter{subsubsection}{0}% + \setcounter{paragraph}{0}% + \ifCLASSOPTIONromanappendices% + \gdef\thesection{\Roman{section}}% + \gdef\thesectiondis{\Roman{section}}% + \@IEEEcompsocconfonly{\gdef\thesectiondis{\Roman{section}.}}% + \gdef\@IEEEthmcounterinsection##1{A\arabic{##1}} + \else% + \gdef\thesection{\Alph{section}}% + \gdef\thesectiondis{\Alph{section}}% + \@IEEEcompsocconfonly{\gdef\thesectiondis{\Alph{section}.}}% + \gdef\@IEEEthmcounterinsection##1{\Alph{##1}} + \fi% + \refstepcounter{section}% update the \ref counter + \setcounter{section}{0}% NEXT \section will be the FIRST appendix + % redefine \section command for appendices + % leave \section* as is + \def\section{\@ifstar{\@IEEEappendixsavesection*}{% process the *-form + \refstepcounter{section}% or is a new section so, + \@IEEEprocessthesectionargument}}% process the argument + % of the normal form +} + + + +% V1.7 compoc uses nonbold drop cap and small caps word style +\ifCLASSOPTIONcompsoc + \def\IEEEPARstartFONTSTYLE{\mdseries} + \def\IEEEPARstartWORDFONTSTYLE{\scshape} + \def\IEEEPARstartWORDCAPSTYLE{\relax} +\fi +% +% +% \IEEEPARstart +% Definition for the big two line drop cap letter at the beginning of the +% first paragraph of journal papers. The first argument is the first letter +% of the first word, the second argument is the remaining letters of the +% first word which will be rendered in upper case. +% In V1.6 this has been completely rewritten to: +% +% 1. no longer have problems when the user begins an environment +% within the paragraph that uses \IEEEPARstart. +% 2. auto-detect and use the current font family +% 3. revise handling of the space at the end of the first word so that +% interword glue will now work as normal. +% 4. produce correctly aligned edges for the (two) indented lines. +% +% We generalize things via control macros - playing with these is fun too. +% +% V1.7 added more control macros to make it easy for IEEEtrantools.sty users +% to change the font style. +% +% the number of lines that are indented to clear it +% may need to increase if using decenders +\providecommand{\IEEEPARstartDROPLINES}{2} +% minimum number of lines left on a page to allow a \@IEEEPARstart +% Does not take into consideration rubber shrink, so it tends to +% be overly cautious +\providecommand{\IEEEPARstartMINPAGELINES}{2} +% V1.7 the height of the drop cap is adjusted to match the height of this text +% in the current font (when \IEEEPARstart is called). +\providecommand{\IEEEPARstartHEIGHTTEXT}{T} +% the depth the letter is lowered below the baseline +% the height (and size) of the letter is determined by the sum +% of this value and the height of the \IEEEPARstartHEIGHTTEXT in the current +% font. It is a good idea to set this value in terms of the baselineskip +% so that it can respond to changes therein. +\providecommand{\IEEEPARstartDROPDEPTH}{1.1\baselineskip} +% V1.7 the font the drop cap will be rendered in, +% can take zero or one argument. +\providecommand{\IEEEPARstartFONTSTYLE}{\bfseries} +% V1.7 any additional, non-font related commands needed to modify +% the drop cap letter, can take zero or one argument. +\providecommand{\IEEEPARstartCAPSTYLE}{\MakeUppercase} +% V1.7 the font that will be used to render the rest of the word, +% can take zero or one argument. +\providecommand{\IEEEPARstartWORDFONTSTYLE}{\relax} +% V1.7 any additional, non-font related commands needed to modify +% the rest of the word, can take zero or one argument. +\providecommand{\IEEEPARstartWORDCAPSTYLE}{\MakeUppercase} +% This is the horizontal separation distance from the drop letter to the main text. +% Lengths that depend on the font (e.g., ex, em, etc.) will be referenced +% to the font that is active when \IEEEPARstart is called. +\providecommand{\IEEEPARstartSEP}{0.15em} +% V1.7 horizontal offset applied to the left of the drop cap. +\providecommand{\IEEEPARstartHOFFSET}{0em} +% V1.7 Italic correction command applied at the end of the drop cap. +\providecommand{\IEEEPARstartITLCORRECT}{\/} + +% width of the letter output, set globally. Can be used in \IEEEPARstartSEP +% or \IEEEPARstartHOFFSET, but not the height lengths. +\newdimen\IEEEPARstartletwidth +\IEEEPARstartletwidth 0pt\relax + +% definition of \IEEEPARstart +% THIS IS A CONTROLLED SPACING AREA, DO NOT ALLOW SPACES WITHIN THESE LINES +% +% The token \@IEEEPARstartfont will be globally defined after the first use +% of \IEEEPARstart and will be a font command which creates the big letter +% The first argument is the first letter of the first word and the second +% argument is the rest of the first word(s). +\def\IEEEPARstart#1#2{\par{% +% if this page does not have enough space, break it and lets start +% on a new one +\@IEEEtranneedspace{\IEEEPARstartMINPAGELINES\baselineskip}{\relax}% +% V1.7 move this up here in case user uses \textbf for \IEEEPARstartFONTSTYLE +% which uses command \leavevmode which causes an unwanted \indent to be issued +\noindent +% calculate the desired height of the big letter +% it extends from the top of \IEEEPARstartHEIGHTTEXT in the current font +% down to \IEEEPARstartDROPDEPTH below the current baseline +\settoheight{\@IEEEtrantmpdimenA}{\IEEEPARstartHEIGHTTEXT}% +\addtolength{\@IEEEtrantmpdimenA}{\IEEEPARstartDROPDEPTH}% +% extract the name of the current font in bold +% and place it in \@IEEEPARstartFONTNAME +\def\@IEEEPARstartGETFIRSTWORD##1 ##2\relax{##1}% +{\IEEEPARstartFONTSTYLE{\selectfont\edef\@IEEEPARstartFONTNAMESPACE{\fontname\font\space}% +\xdef\@IEEEPARstartFONTNAME{\expandafter\@IEEEPARstartGETFIRSTWORD\@IEEEPARstartFONTNAMESPACE\relax}}}% +% define a font based on this name with a point size equal to the desired +% height of the drop letter +\font\@IEEEPARstartsubfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenA\relax% +% save this value as a counter (integer) value (sp points) +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenA% +% now get the height of the actual letter produced by this font size +\settoheight{\@IEEEtrantmpdimenB}{\@IEEEPARstartsubfont\IEEEPARstartCAPSTYLE{#1}}% +% If something bogus happens like the first argument is empty or the +% current font is strange, do not allow a zero height. +\ifdim\@IEEEtrantmpdimenB=0pt\relax% +\typeout{** WARNING: IEEEPARstart drop letter has zero height! (line \the\inputlineno)}% +\typeout{ Forcing the drop letter font size to 10pt.}% +\@IEEEtrantmpdimenB=10pt% +\fi% +% and store it as a counter +\@IEEEtrantmpcountB=\@IEEEtrantmpdimenB% +% Since a font size doesn't exactly correspond to the height of the capital +% letters in that font, the actual height of the letter, \@IEEEtrantmpcountB, +% will be less than that desired, \@IEEEtrantmpcountA +% we need to raise the font size, \@IEEEtrantmpdimenA +% by \@IEEEtrantmpcountA / \@IEEEtrantmpcountB +% But, TeX doesn't have floating point division, so we have to use integer +% division. Hence the use of the counters. +% We need to reduce the denominator so that the loss of the remainder will +% have minimal affect on the accuracy of the result +\divide\@IEEEtrantmpcountB by 200% +\divide\@IEEEtrantmpcountA by \@IEEEtrantmpcountB% +% Then reequalize things when we use TeX's ability to multiply by +% floating point values +\@IEEEtrantmpdimenB=0.005\@IEEEtrantmpdimenA% +\multiply\@IEEEtrantmpdimenB by \@IEEEtrantmpcountA% +% \@IEEEPARstartfont is globaly set to the calculated font of the big letter +% We need to carry this out of the local calculation area to to create the +% big letter. +\global\font\@IEEEPARstartfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenB% +% Now set \@IEEEtrantmpdimenA to the width of the big letter +% We need to carry this out of the local calculation area to set the +% hanging indent +\settowidth{\global\@IEEEtrantmpdimenA}{\@IEEEPARstartfont +\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}}}% +% end of the isolated calculation environment +\global\IEEEPARstartletwidth\@IEEEtrantmpdimenA\relax% +% add in the extra clearance we want +\advance\@IEEEtrantmpdimenA by \IEEEPARstartSEP\relax% +% add in the optional offset +\advance\@IEEEtrantmpdimenA by \IEEEPARstartHOFFSET\relax% +% V1.7 don't allow negative offsets to produce negative hanging indents +\@IEEEtrantmpdimenB\@IEEEtrantmpdimenA +\ifnum\@IEEEtrantmpdimenB < 0 \@IEEEtrantmpdimenB 0pt\fi +% \@IEEEtrantmpdimenA has the width of the big letter plus the +% separation space and \@IEEEPARstartfont is the font we need to use +% Now, we make the letter and issue the hanging indent command +% The letter is placed in a box of zero width and height so that other +% text won't be displaced by it. +\hangindent\@IEEEtrantmpdimenB\hangafter=-\IEEEPARstartDROPLINES% +\makebox[0pt][l]{\hspace{-\@IEEEtrantmpdimenA}% +\raisebox{-\IEEEPARstartDROPDEPTH}[0pt][0pt]{\hspace{\IEEEPARstartHOFFSET}% +\@IEEEPARstartfont\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}% +\hspace{\IEEEPARstartSEP}}}% +{\IEEEPARstartWORDFONTSTYLE{\IEEEPARstartWORDCAPSTYLE{\selectfont#2}}}} + + + + +% determines if the space remaining on a given page is equal to or greater +% than the specified space of argument one +% if not, execute argument two (only if the remaining space is greater than zero) +% and issue a \newpage +% +% example: \@IEEEtranneedspace{2in}{\vfill} +% +% Does not take into consideration rubber shrinkage, so it tends to +% be overly cautious +% Based on an example posted by Donald Arseneau +% Note this macro uses \@IEEEtrantmpdimenB internally for calculations, +% so DO NOT PASS \@IEEEtrantmpdimenB to this routine +% if you need a dimen register, import with \@IEEEtrantmpdimenA instead +\def\@IEEEtranneedspace#1#2{\penalty-100\begingroup%shield temp variable +\@IEEEtrantmpdimenB\pagegoal\advance\@IEEEtrantmpdimenB-\pagetotal% space left +\ifdim #1>\@IEEEtrantmpdimenB\relax% not enough space left +\ifdim\@IEEEtrantmpdimenB>\z@\relax #2\fi% +\newpage% +\fi\endgroup} + + + +% IEEEbiography ENVIRONMENT +% Allows user to enter biography leaving place for picture (adapts to font size) +% As of V1.5, a new optional argument allows you to have a real graphic! +% V1.5 and later also fixes the "colliding biographies" which could happen when a +% biography's text was shorter than the space for the photo. +% MDS 7/2001 +% V1.6 prevent multiple biographies from making multiple TOC entries +\newif\if@IEEEbiographyTOCentrynotmade +\global\@IEEEbiographyTOCentrynotmadetrue + +% biography counter so hyperref can jump directly to the biographies +% and not just the previous section +\newcounter{IEEEbiography} +\setcounter{IEEEbiography}{0} + +% photo area size +\def\@IEEEBIOphotowidth{1.0in} % width of the biography photo area +\def\@IEEEBIOphotodepth{1.25in} % depth (height) of the biography photo area +% area cleared for photo +\def\@IEEEBIOhangwidth{1.14in} % width cleared for the biography photo area +\def\@IEEEBIOhangdepth{1.25in} % depth cleared for the biography photo area + % actual depth will be a multiple of + % \baselineskip, rounded up +\def\@IEEEBIOskipN{4\baselineskip}% nominal value of the vskip above the biography + +\newenvironment{IEEEbiography}[2][]{\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize% +\unitlength 1in\parskip=0pt\par\parindent 1em\interlinepenalty500% +% we need enough space to support the hanging indent +% the nominal value of the spacer +% and one extra line for good measure +\@IEEEtrantmpdimenA=\@IEEEBIOhangdepth% +\advance\@IEEEtrantmpdimenA by \@IEEEBIOskipN% +\advance\@IEEEtrantmpdimenA by 1\baselineskip% +% if this page does not have enough space, break it and lets start +% with a new one +\@IEEEtranneedspace{\@IEEEtrantmpdimenA}{\relax}% +% nominal spacer can strech, not shrink use 1fil so user can out stretch with \vfill +\vskip \@IEEEBIOskipN plus 1fil minus 0\baselineskip% +% the default box for where the photo goes +\def\@IEEEtempbiographybox{{\setlength{\fboxsep}{0pt}\framebox{% +\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}\centering PLACE\\ PHOTO\\ HERE \end{minipage}}}}% +% +% detect if the optional argument was supplied, this requires the +% \@ifmtarg command as defined in the appendix section above +% and if so, override the default box with what they want +\@ifmtarg{#1}{\relax}{\def\@IEEEtempbiographybox{\mbox{\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}% +\centering% +#1% +\end{minipage}}}}% end if optional argument supplied +% Make an entry into the table of contents only if we have not done so before +\if@IEEEbiographyTOCentrynotmade% +% link labels to the biography counter so hyperref will jump +% to the biography, not the previous section +\setcounter{IEEEbiography}{-1}% +\refstepcounter{IEEEbiography}% +\addcontentsline{toc}{section}{Biographies}% +\global\@IEEEbiographyTOCentrynotmadefalse% +\fi% +% one more biography +\refstepcounter{IEEEbiography}% +% Make an entry for this name into the table of contents +\addcontentsline{toc}{subsection}{#2}% +% V1.6 properly handle if a new paragraph should occur while the +% hanging indent is still active. Do this by redefining \par so +% that it will not start a new paragraph. (But it will appear to the +% user as if it did.) Also, strip any leading pars, newlines, or spaces. +\let\@IEEEBIOORGparCMD=\par% save the original \par command +\edef\par{\hfil\break\indent}% the new \par will not be a "real" \par +\settoheight{\@IEEEtrantmpdimenA}{\@IEEEtempbiographybox}% get height of biography box +\@IEEEtrantmpdimenB=\@IEEEBIOhangdepth% +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenB% countA has the hang depth +\divide\@IEEEtrantmpcountA by \baselineskip% calculates lines needed to produce the hang depth +\advance\@IEEEtrantmpcountA by 1% ensure we overestimate +% set the hanging indent +\hangindent\@IEEEBIOhangwidth% +\hangafter-\@IEEEtrantmpcountA% +% reference the top of the photo area to the top of a capital T +\settoheight{\@IEEEtrantmpdimenB}{\mbox{T}}% +% set the photo box, give it zero width and height so as not to disturb anything +\noindent\makebox[0pt][l]{\hspace{-\@IEEEBIOhangwidth}\raisebox{\@IEEEtrantmpdimenB}[0pt][0pt]{% +\raisebox{-\@IEEEBIOphotodepth}[0pt][0pt]{\@IEEEtempbiographybox}}}% +% now place the author name and begin the bio text +\noindent\textbf{#2\ }\@IEEEgobbleleadPARNLSP}{\relax\let\par=\@IEEEBIOORGparCMD\par% +% 7/2001 V1.5 detect when the biography text is shorter than the photo area +% and pad the unused area - preventing a collision from the next biography entry +% MDS +\ifnum \prevgraf <\@IEEEtrantmpcountA\relax% detect when the biography text is shorter than the photo + \advance\@IEEEtrantmpcountA by -\prevgraf% calculate how many lines we need to pad + \advance\@IEEEtrantmpcountA by -1\relax% we compensate for the fact that we indented an extra line + \@IEEEtrantmpdimenA=\baselineskip% calculate the length of the padding + \multiply\@IEEEtrantmpdimenA by \@IEEEtrantmpcountA% + \noindent\rule{0pt}{\@IEEEtrantmpdimenA}% insert an invisible support strut +\fi% +\par\normalfont} + + + +% V1.6 +% added biography without a photo environment +\newenvironment{IEEEbiographynophoto}[1]{% +% Make an entry into the table of contents only if we have not done so before +\if@IEEEbiographyTOCentrynotmade% +% link labels to the biography counter so hyperref will jump +% to the biography, not the previous section +\setcounter{IEEEbiography}{-1}% +\refstepcounter{IEEEbiography}% +\addcontentsline{toc}{section}{Biographies}% +\global\@IEEEbiographyTOCentrynotmadefalse% +\fi% +% one more biography +\refstepcounter{IEEEbiography}% +% Make an entry for this name into the table of contents +\addcontentsline{toc}{subsection}{#1}% +\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize\interlinepenalty500% +\vskip 4\baselineskip plus 1fil minus 0\baselineskip% +\parskip=0pt\par% +\noindent\textbf{#1\ }\@IEEEgobbleleadPARNLSP}{\relax\par\normalfont} + + +% provide the user with some old font commands +% got this from article.cls +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} +\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} + + +% SPECIAL PAPER NOTICE COMMANDS +% +% holds the special notice text +\def\@IEEEspecialpapernotice{\relax} + +% for special papers, like invited papers, the user can do: +% \IEEEspecialpapernotice{(Invited Paper)} before \maketitle +\def\IEEEspecialpapernotice#1{\ifCLASSOPTIONconference% +\def\@IEEEspecialpapernotice{{\sublargesize\textit{#1}\vspace*{1em}}}% +\else% +\def\@IEEEspecialpapernotice{{\\*[1.5ex]\sublargesize\textit{#1}}\vspace*{-2ex}}% +\fi} + + + + +% PUBLISHER ID COMMANDS +% to insert a publisher's ID footer +% V1.6 \IEEEpubid has been changed so that the change in page size and style +% occurs in \maketitle. \IEEEpubid must now be issued prior to \maketitle +% use \IEEEpubidadjcol as before - in the second column of the title page +% These changes allow \maketitle to take the reduced page height into +% consideration when dynamically setting the space between the author +% names and the maintext. +% +% the amount the main text is pulled up to make room for the +% publisher's ID footer +% The IEEE uses about 1.3\baselineskip for journals, +% dynamic title spacing will clean up the fraction +\def\@IEEEpubidpullup{1.3\baselineskip} +\ifCLASSOPTIONtechnote +% for technotes it must be an integer of baselineskip as there can be no +% dynamic title spacing for two column mode technotes (the title is in the +% in first column) and we should maintain an integer number of lines in the +% second column +% There are some examples (such as older issues of "Transactions on +% Information Theory") in which the IEEE really pulls the text off the ID for +% technotes - about 0.55in (or 4\baselineskip). We'll use 2\baselineskip +% and call it even. +\def\@IEEEpubidpullup{2\baselineskip} +\fi + +% V1.7 compsoc does not use a pullup +\ifCLASSOPTIONcompsoc +\def\@IEEEpubidpullup{0pt} +\fi + +% holds the ID text +\def\@IEEEpubid{\relax} + +% flag so \maketitle can tell if \IEEEpubid was called +\newif\if@IEEEusingpubid +\global\@IEEEusingpubidfalse +% issue this command in the page to have the ID at the bottom +% V1.6 use before \maketitle +\def\IEEEpubid#1{\def\@IEEEpubid{#1}\global\@IEEEusingpubidtrue} + + +% command which will pull up (shorten) the column it is executed in +% to make room for the publisher ID. Place in the second column of +% the title page when using \IEEEpubid +% Is smart enough not to do anything when in single column text or +% if the user hasn't called \IEEEpubid +% currently needed in for the second column of a page with the +% publisher ID. If not needed in future releases, please provide this +% command and define it as \relax for backward compatibility +% v1.6b do not allow command to operate if the peer review option has been +% selected because \IEEEpubidadjcol will not be on the cover page. +% V1.7 do nothing if compsoc +\def\IEEEpubidadjcol{\ifCLASSOPTIONcompsoc\else\ifCLASSOPTIONpeerreview\else +\if@twocolumn\if@IEEEusingpubid\enlargethispage{-\@IEEEpubidpullup}\fi\fi\fi\fi} + +% Special thanks to Peter Wilson, Daniel Luecking, and the other +% gurus at comp.text.tex, for helping me to understand how best to +% implement the IEEEpubid command in LaTeX. + + + +%% Lockout some commands under various conditions + +% general purpose bit bucket +\newsavebox{\@IEEEtranrubishbin} + +% flags to prevent multiple warning messages +\newif\if@IEEEWARNthanks +\newif\if@IEEEWARNIEEEPARstart +\newif\if@IEEEWARNIEEEbiography +\newif\if@IEEEWARNIEEEbiographynophoto +\newif\if@IEEEWARNIEEEpubid +\newif\if@IEEEWARNIEEEpubidadjcol +\newif\if@IEEEWARNIEEEmembership +\newif\if@IEEEWARNIEEEaftertitletext +\@IEEEWARNthankstrue +\@IEEEWARNIEEEPARstarttrue +\@IEEEWARNIEEEbiographytrue +\@IEEEWARNIEEEbiographynophototrue +\@IEEEWARNIEEEpubidtrue +\@IEEEWARNIEEEpubidadjcoltrue +\@IEEEWARNIEEEmembershiptrue +\@IEEEWARNIEEEaftertitletexttrue + + +%% Lockout some commands when in various modes, but allow them to be restored if needed +%% +% save commands which might be locked out +% so that the user can later restore them if needed +\let\@IEEESAVECMDthanks\thanks +\let\@IEEESAVECMDIEEEPARstart\IEEEPARstart +\let\@IEEESAVECMDIEEEbiography\IEEEbiography +\let\@IEEESAVECMDendIEEEbiography\endIEEEbiography +\let\@IEEESAVECMDIEEEbiographynophoto\IEEEbiographynophoto +\let\@IEEESAVECMDendIEEEbiographynophoto\endIEEEbiographynophoto +\let\@IEEESAVECMDIEEEpubid\IEEEpubid +\let\@IEEESAVECMDIEEEpubidadjcol\IEEEpubidadjcol +\let\@IEEESAVECMDIEEEmembership\IEEEmembership +\let\@IEEESAVECMDIEEEaftertitletext\IEEEaftertitletext + + +% disable \IEEEPARstart when in draft mode +% This may have originally been done because the pre-V1.6 drop letter +% algorithm had problems with a non-unity baselinestretch +% At any rate, it seems too formal to have a drop letter in a draft +% paper. +\ifCLASSOPTIONdraftcls +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** ATTENTION: \noexpand\IEEEPARstart + is disabled in draft mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} +\fi +% and for technotes +\ifCLASSOPTIONtechnote +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart + is locked out for technotes (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} +\fi + + +% lockout unneeded commands when in conference mode +\ifCLASSOPTIONconference +% when locked out, \thanks, \IEEEbiography, \IEEEbiographynophoto, \IEEEpubid, +% \IEEEmembership and \IEEEaftertitletext will all swallow their given text. +% \IEEEPARstart will output a normal character instead +% warn the user about these commands only once to prevent the console screen +% from filling up with redundant messages +\def\thanks#1{\if@IEEEWARNthanks\typeout{** WARNING: \noexpand\thanks + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNthanksfalse} +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} + + +% LaTeX treats environments and commands with optional arguments differently. +% the actual ("internal") command is stored as \\commandname +% (accessed via \csname\string\commandname\endcsname ) +% the "external" command \commandname is a macro with code to determine +% whether or not the optional argument is presented and to provide the +% default if it is absent. So, in order to save and restore such a command +% we would have to save and restore \\commandname as well. But, if LaTeX +% ever changes the way it names the internal names, the trick would break. +% Instead let us just define a new environment so that the internal +% name can be left undisturbed. +\newenvironment{@IEEEbogusbiography}[2][]{\if@IEEEWARNIEEEbiography\typeout{** WARNING: \noexpand\IEEEbiography + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographyfalse% +\setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax} +% and make biography point to our bogus biography +\let\IEEEbiography=\@IEEEbogusbiography +\let\endIEEEbiography=\end@IEEEbogusbiography + +\renewenvironment{IEEEbiographynophoto}[1]{\if@IEEEWARNIEEEbiographynophoto\typeout{** WARNING: \noexpand\IEEEbiographynophoto + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographynophotofalse% +\setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax} + +\def\IEEEpubid#1{\if@IEEEWARNIEEEpubid\typeout{** WARNING: \noexpand\IEEEpubid + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidfalse} +\def\IEEEpubidadjcol{\if@IEEEWARNIEEEpubidadjcol\typeout{** WARNING: \noexpand\IEEEpubidadjcol + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidadjcolfalse} +\def\IEEEmembership#1{\if@IEEEWARNIEEEmembership\typeout{** WARNING: \noexpand\IEEEmembership + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEmembershipfalse} +\def\IEEEaftertitletext#1{\if@IEEEWARNIEEEaftertitletext\typeout{** WARNING: \noexpand\IEEEaftertitletext + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEaftertitletextfalse} +\fi + + +% provide a way to restore the commands that are locked out +\def\IEEEoverridecommandlockouts{% +\typeout{** ATTENTION: Overriding command lockouts (line \the\inputlineno).}% +\let\thanks\@IEEESAVECMDthanks% +\let\IEEEPARstart\@IEEESAVECMDIEEEPARstart% +\let\IEEEbiography\@IEEESAVECMDIEEEbiography% +\let\endIEEEbiography\@IEEESAVECMDendIEEEbiography% +\let\IEEEbiographynophoto\@IEEESAVECMDIEEEbiographynophoto% +\let\endIEEEbiographynophoto\@IEEESAVECMDendIEEEbiographynophoto% +\let\IEEEpubid\@IEEESAVECMDIEEEpubid% +\let\IEEEpubidadjcol\@IEEESAVECMDIEEEpubidadjcol% +\let\IEEEmembership\@IEEESAVECMDIEEEmembership% +\let\IEEEaftertitletext\@IEEESAVECMDIEEEaftertitletext} + + + +% need a backslash character for typeout output +{\catcode`\|=0 \catcode`\\=12 +|xdef|@IEEEbackslash{\}} + + +% hook to allow easy disabling of all legacy warnings +\def\@IEEElegacywarn#1#2{\typeout{** ATTENTION: \@IEEEbackslash #1 is deprecated (line \the\inputlineno). +Use \@IEEEbackslash #2 instead.}} + + +% provide some legacy IEEEtran commands +\def\IEEEcompsoctitleabstractindextext{\@IEEElegacywarn{IEEEcompsoctitleabstractindextext}{IEEEtitleabstractindextext}\IEEEtitleabstractindextext} +\def\IEEEdisplaynotcompsoctitleabstractindextext{\@IEEElegacywarn{IEEEdisplaynotcompsoctitleabstractindextext}{IEEEdisplaynontitleabstractindextext}\IEEEdisplaynontitleabstractindextext} +% provide some legacy IEEEtran environments + + +% V1.8a no more support for these legacy commands +%\def\authorblockA{\@IEEElegacywarn{authorblockA}{IEEEauthorblockA}\IEEEauthorblockA} +%\def\authorblockN{\@IEEElegacywarn{authorblockN}{IEEEauthorblockN}\IEEEauthorblockN} +%\def\authorrefmark{\@IEEElegacywarn{authorrefmark}{IEEEauthorrefmark}\IEEEauthorrefmark} +%\def\PARstart{\@IEEElegacywarn{PARstart}{IEEEPARstart}\IEEEPARstart} +%\def\pubid{\@IEEElegacywarn{pubid}{IEEEpubid}\IEEEpubid} +%\def\pubidadjcol{\@IEEElegacywarn{pubidadjcol}{IEEEpubidadjcol}\IEEEpubidadjcol} +%\def\specialpapernotice{\@IEEElegacywarn{specialpapernotice}{IEEEspecialpapernotice}\IEEEspecialpapernotice} +% and environments +%\def\keywords{\@IEEElegacywarn{keywords}{IEEEkeywords}\IEEEkeywords} +%\def\endkeywords{\endIEEEkeywords} +% V1.8 no more support for legacy IED list commands +%\let\labelindent\IEEElabelindent +%\def\calcleftmargin{\@IEEElegacywarn{calcleftmargin}{IEEEcalcleftmargin}\IEEEcalcleftmargin} +%\def\setlabelwidth{\@IEEElegacywarn{setlabelwidth}{IEEEsetlabelwidth}\IEEEsetlabelwidth} +%\def\usemathlabelsep{\@IEEElegacywarn{usemathlabelsep}{IEEEusemathlabelsep}\IEEEusemathlabelsep} +%\def\iedlabeljustifyc{\@IEEElegacywarn{iedlabeljustifyc}{IEEEiedlabeljustifyc}\IEEEiedlabeljustifyc} +%\def\iedlabeljustifyl{\@IEEElegacywarn{iedlabeljustifyl}{IEEEiedlabeljustifyl}\IEEEiedlabeljustifyl} +%\def\iedlabeljustifyr{\@IEEElegacywarn{iedlabeljustifyr}{IEEEiedlabeljustifyr}\IEEEiedlabeljustifyr} +% V1.8 no more support for QED and proof stuff +%\def\QED{\@IEEElegacywarn{QED}{IEEEQED}\IEEEQED} +%\def\QEDclosed{\@IEEElegacywarn{QEDclosed}{IEEEQEDclosed}\IEEEQEDclosed} +%\def\QEDopen{\@IEEElegacywarn{QEDopen}{IEEEQEDopen}\IEEEQEDopen} +%\AtBeginDocument{\def\proof{\@IEEElegacywarn{proof}{IEEEproof}\IEEEproof}\def\endproof{\endIEEEproof}} +% V1.8 no longer support biography or biographynophoto +%\def\biography{\@IEEElegacywarn{biography}{IEEEbiography}\IEEEbiography} +%\def\biographynophoto{\@IEEElegacywarn{biographynophoto}{IEEEbiographynophoto}\IEEEbiographynophoto} +%\def\endbiography{\endIEEEbiography} +%\def\endbiographynophoto{\endIEEEbiographynophoto} +% V1.7 and later no longer supports \overrideIEEEmargins +%\def\overrideIEEEmargins{% +%\typeout{** WARNING: \string\overrideIEEEmargins \space no longer supported (line \the\inputlineno).}% +%\typeout{** Use the \string\CLASSINPUTinnersidemargin, \string\CLASSINPUToutersidemargin \space controls instead.}} + +\endinput + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of IEEEtran.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%% +% That's all folks! + diff --git a/synthetic/template/Conference-LaTeX-template_10-17-19/IEEEtran_HOWTO.pdf b/synthetic/template/Conference-LaTeX-template_10-17-19/IEEEtran_HOWTO.pdf new file mode 100644 index 0000000..c8e41da Binary files /dev/null and b/synthetic/template/Conference-LaTeX-template_10-17-19/IEEEtran_HOWTO.pdf differ diff --git a/synthetic/template/Conference-LaTeX-template_10-17-19/conference_101719.pdf b/synthetic/template/Conference-LaTeX-template_10-17-19/conference_101719.pdf new file mode 100644 index 0000000..7bc7647 Binary files /dev/null and b/synthetic/template/Conference-LaTeX-template_10-17-19/conference_101719.pdf differ diff --git a/synthetic/template/Conference-LaTeX-template_10-17-19/conference_101719.tex b/synthetic/template/Conference-LaTeX-template_10-17-19/conference_101719.tex new file mode 100644 index 0000000..09d7398 --- /dev/null +++ b/synthetic/template/Conference-LaTeX-template_10-17-19/conference_101719.tex @@ -0,0 +1,288 @@ +\documentclass[conference]{IEEEtran} +\IEEEoverridecommandlockouts +% The preceding line is only needed to identify funding in the first footnote. If that is unneeded, please comment it out. +\usepackage{cite} +\usepackage{amsmath,amssymb,amsfonts} +\usepackage{algorithmic} +\usepackage{graphicx} +\usepackage{textcomp} +\usepackage{xcolor} +\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em + T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}} +\begin{document} + +\title{Conference Paper Title*\\ +{\footnotesize \textsuperscript{*}Note: Sub-titles are not captured in Xplore and +should not be used} +\thanks{Identify applicable funding agency here. If none, delete this.} +} + +\author{\IEEEauthorblockN{1\textsuperscript{st} Given Name Surname} +\IEEEauthorblockA{\textit{dept. name of organization (of Aff.)} \\ +\textit{name of organization (of Aff.)}\\ +City, Country \\ +email address or ORCID} +\and +\IEEEauthorblockN{2\textsuperscript{nd} Given Name Surname} +\IEEEauthorblockA{\textit{dept. name of organization (of Aff.)} \\ +\textit{name of organization (of Aff.)}\\ +City, Country \\ +email address or ORCID} +\and +\IEEEauthorblockN{3\textsuperscript{rd} Given Name Surname} +\IEEEauthorblockA{\textit{dept. name of organization (of Aff.)} \\ +\textit{name of organization (of Aff.)}\\ +City, Country \\ +email address or ORCID} +\and +\IEEEauthorblockN{4\textsuperscript{th} Given Name Surname} +\IEEEauthorblockA{\textit{dept. name of organization (of Aff.)} \\ +\textit{name of organization (of Aff.)}\\ +City, Country \\ +email address or ORCID} +\and +\IEEEauthorblockN{5\textsuperscript{th} Given Name Surname} +\IEEEauthorblockA{\textit{dept. name of organization (of Aff.)} \\ +\textit{name of organization (of Aff.)}\\ +City, Country \\ +email address or ORCID} +\and +\IEEEauthorblockN{6\textsuperscript{th} Given Name Surname} +\IEEEauthorblockA{\textit{dept. name of organization (of Aff.)} \\ +\textit{name of organization (of Aff.)}\\ +City, Country \\ +email address or ORCID} +} + +\maketitle + +\begin{abstract} +This document is a model and instructions for \LaTeX. +This and the IEEEtran.cls file define the components of your paper [title, text, heads, etc.]. *CRITICAL: Do Not Use Symbols, Special Characters, Footnotes, +or Math in Paper Title or Abstract. +\end{abstract} + +\begin{IEEEkeywords} +component, formatting, style, styling, insert +\end{IEEEkeywords} + +\section{Introduction} +This document is a model and instructions for \LaTeX. +Please observe the conference page limits. + +\section{Ease of Use} + +\subsection{Maintaining the Integrity of the Specifications} + +The IEEEtran class file is used to format your paper and style the text. All margins, +column widths, line spaces, and text fonts are prescribed; please do not +alter them. You may note peculiarities. For example, the head margin +measures proportionately more than is customary. This measurement +and others are deliberate, using specifications that anticipate your paper +as one part of the entire proceedings, and not as an independent document. +Please do not revise any of the current designations. + +\section{Prepare Your Paper Before Styling} +Before you begin to format your paper, first write and save the content as a +separate text file. Complete all content and organizational editing before +formatting. Please note sections \ref{AA}--\ref{SCM} below for more information on +proofreading, spelling and grammar. + +Keep your text and graphic files separate until after the text has been +formatted and styled. Do not number text heads---{\LaTeX} will do that +for you. + +\subsection{Abbreviations and Acronyms}\label{AA} +Define abbreviations and acronyms the first time they are used in the text, +even after they have been defined in the abstract. Abbreviations such as +IEEE, SI, MKS, CGS, ac, dc, and rms do not have to be defined. Do not use +abbreviations in the title or heads unless they are unavoidable. + +\subsection{Units} +\begin{itemize} +\item Use either SI (MKS) or CGS as primary units. (SI units are encouraged.) English units may be used as secondary units (in parentheses). An exception would be the use of English units as identifiers in trade, such as ``3.5-inch disk drive''. +\item Avoid combining SI and CGS units, such as current in amperes and magnetic field in oersteds. This often leads to confusion because equations do not balance dimensionally. If you must use mixed units, clearly state the units for each quantity that you use in an equation. +\item Do not mix complete spellings and abbreviations of units: ``Wb/m\textsuperscript{2}'' or ``webers per square meter'', not ``webers/m\textsuperscript{2}''. Spell out units when they appear in text: ``. . . a few henries'', not ``. . . a few H''. +\item Use a zero before decimal points: ``0.25'', not ``.25''. Use ``cm\textsuperscript{3}'', not ``cc''.) +\end{itemize} + +\subsection{Equations} +Number equations consecutively. To make your +equations more compact, you may use the solidus (~/~), the exp function, or +appropriate exponents. Italicize Roman symbols for quantities and variables, +but not Greek symbols. Use a long dash rather than a hyphen for a minus +sign. Punctuate equations with commas or periods when they are part of a +sentence, as in: +\begin{equation} +a+b=\gamma\label{eq} +\end{equation} + +Be sure that the +symbols in your equation have been defined before or immediately following +the equation. Use ``\eqref{eq}'', not ``Eq.~\eqref{eq}'' or ``equation \eqref{eq}'', except at +the beginning of a sentence: ``Equation \eqref{eq} is . . .'' + +\subsection{\LaTeX-Specific Advice} + +Please use ``soft'' (e.g., \verb|\eqref{Eq}|) cross references instead +of ``hard'' references (e.g., \verb|(1)|). That will make it possible +to combine sections, add equations, or change the order of figures or +citations without having to go through the file line by line. + +Please don't use the \verb|{eqnarray}| equation environment. Use +\verb|{align}| or \verb|{IEEEeqnarray}| instead. The \verb|{eqnarray}| +environment leaves unsightly spaces around relation symbols. + +Please note that the \verb|{subequations}| environment in {\LaTeX} +will increment the main equation counter even when there are no +equation numbers displayed. If you forget that, you might write an +article in which the equation numbers skip from (17) to (20), causing +the copy editors to wonder if you've discovered a new method of +counting. + +{\BibTeX} does not work by magic. It doesn't get the bibliographic +data from thin air but from .bib files. If you use {\BibTeX} to produce a +bibliography you must send the .bib files. + +{\LaTeX} can't read your mind. If you assign the same label to a +subsubsection and a table, you might find that Table I has been cross +referenced as Table IV-B3. + +{\LaTeX} does not have precognitive abilities. If you put a +\verb|\label| command before the command that updates the counter it's +supposed to be using, the label will pick up the last counter to be +cross referenced instead. In particular, a \verb|\label| command +should not go before the caption of a figure or a table. + +Do not use \verb|\nonumber| inside the \verb|{array}| environment. It +will not stop equation numbers inside \verb|{array}| (there won't be +any anyway) and it might stop a wanted equation number in the +surrounding equation. + +\subsection{Some Common Mistakes}\label{SCM} +\begin{itemize} +\item The word ``data'' is plural, not singular. +\item The subscript for the permeability of vacuum $\mu_{0}$, and other common scientific constants, is zero with subscript formatting, not a lowercase letter ``o''. +\item In American English, commas, semicolons, periods, question and exclamation marks are located within quotation marks only when a complete thought or name is cited, such as a title or full quotation. When quotation marks are used, instead of a bold or italic typeface, to highlight a word or phrase, punctuation should appear outside of the quotation marks. A parenthetical phrase or statement at the end of a sentence is punctuated outside of the closing parenthesis (like this). (A parenthetical sentence is punctuated within the parentheses.) +\item A graph within a graph is an ``inset'', not an ``insert''. The word alternatively is preferred to the word ``alternately'' (unless you really mean something that alternates). +\item Do not use the word ``essentially'' to mean ``approximately'' or ``effectively''. +\item In your paper title, if the words ``that uses'' can accurately replace the word ``using'', capitalize the ``u''; if not, keep using lower-cased. +\item Be aware of the different meanings of the homophones ``affect'' and ``effect'', ``complement'' and ``compliment'', ``discreet'' and ``discrete'', ``principal'' and ``principle''. +\item Do not confuse ``imply'' and ``infer''. +\item The prefix ``non'' is not a word; it should be joined to the word it modifies, usually without a hyphen. +\item There is no period after the ``et'' in the Latin abbreviation ``et al.''. +\item The abbreviation ``i.e.'' means ``that is'', and the abbreviation ``e.g.'' means ``for example''. +\end{itemize} +An excellent style manual for science writers is \cite{b7}. + +\subsection{Authors and Affiliations} +\textbf{The class file is designed for, but not limited to, six authors.} A +minimum of one author is required for all conference articles. Author names +should be listed starting from left to right and then moving down to the +next line. This is the author sequence that will be used in future citations +and by indexing services. Names should not be listed in columns nor group by +affiliation. Please keep your affiliations as succinct as possible (for +example, do not differentiate among departments of the same organization). + +\subsection{Identify the Headings} +Headings, or heads, are organizational devices that guide the reader through +your paper. There are two types: component heads and text heads. + +Component heads identify the different components of your paper and are not +topically subordinate to each other. Examples include Acknowledgments and +References and, for these, the correct style to use is ``Heading 5''. Use +``figure caption'' for your Figure captions, and ``table head'' for your +table title. Run-in heads, such as ``Abstract'', will require you to apply a +style (in this case, italic) in addition to the style provided by the drop +down menu to differentiate the head from the text. + +Text heads organize the topics on a relational, hierarchical basis. For +example, the paper title is the primary text head because all subsequent +material relates and elaborates on this one topic. If there are two or more +sub-topics, the next level head (uppercase Roman numerals) should be used +and, conversely, if there are not at least two sub-topics, then no subheads +should be introduced. + +\subsection{Figures and Tables} +\paragraph{Positioning Figures and Tables} Place figures and tables at the top and +bottom of columns. Avoid placing them in the middle of columns. Large +figures and tables may span across both columns. Figure captions should be +below the figures; table heads should appear above the tables. Insert +figures and tables after they are cited in the text. Use the abbreviation +``Fig.~\ref{fig}'', even at the beginning of a sentence. + +\begin{table}[htbp] +\caption{Table Type Styles} +\begin{center} +\begin{tabular}{|c|c|c|c|} +\hline +\textbf{Table}&\multicolumn{3}{|c|}{\textbf{Table Column Head}} \\ +\cline{2-4} +\textbf{Head} & \textbf{\textit{Table column subhead}}& \textbf{\textit{Subhead}}& \textbf{\textit{Subhead}} \\ +\hline +copy& More table copy$^{\mathrm{a}}$& & \\ +\hline +\multicolumn{4}{l}{$^{\mathrm{a}}$Sample of a Table footnote.} +\end{tabular} +\label{tab1} +\end{center} +\end{table} + +\begin{figure}[htbp] +\centerline{\includegraphics{fig1.png}} +\caption{Example of a figure caption.} +\label{fig} +\end{figure} + +Figure Labels: Use 8 point Times New Roman for Figure labels. Use words +rather than symbols or abbreviations when writing Figure axis labels to +avoid confusing the reader. As an example, write the quantity +``Magnetization'', or ``Magnetization, M'', not just ``M''. If including +units in the label, present them within parentheses. Do not label axes only +with units. In the example, write ``Magnetization (A/m)'' or ``Magnetization +\{A[m(1)]\}'', not just ``A/m''. Do not label axes with a ratio of +quantities and units. For example, write ``Temperature (K)'', not +``Temperature/K''. + +\section*{Acknowledgment} + +The preferred spelling of the word ``acknowledgment'' in America is without +an ``e'' after the ``g''. Avoid the stilted expression ``one of us (R. B. +G.) thanks $\ldots$''. Instead, try ``R. B. G. thanks$\ldots$''. Put sponsor +acknowledgments in the unnumbered footnote on the first page. + +\section*{References} + +Please number citations consecutively within brackets \cite{b1}. The +sentence punctuation follows the bracket \cite{b2}. Refer simply to the reference +number, as in \cite{b3}---do not use ``Ref. \cite{b3}'' or ``reference \cite{b3}'' except at +the beginning of a sentence: ``Reference \cite{b3} was the first $\ldots$'' + +Number footnotes separately in superscripts. Place the actual footnote at +the bottom of the column in which it was cited. Do not put footnotes in the +abstract or reference list. Use letters for table footnotes. + +Unless there are six authors or more give all authors' names; do not use +``et al.''. Papers that have not been published, even if they have been +submitted for publication, should be cited as ``unpublished'' \cite{b4}. Papers +that have been accepted for publication should be cited as ``in press'' \cite{b5}. +Capitalize only the first word in a paper title, except for proper nouns and +element symbols. + +For papers published in translation journals, please give the English +citation first, followed by the original foreign-language citation \cite{b6}. + +\begin{thebibliography}{00} +\bibitem{b1} G. Eason, B. Noble, and I. N. Sneddon, ``On certain integrals of Lipschitz-Hankel type involving products of Bessel functions,'' Phil. Trans. Roy. Soc. London, vol. A247, pp. 529--551, April 1955. +\bibitem{b2} J. Clerk Maxwell, A Treatise on Electricity and Magnetism, 3rd ed., vol. 2. Oxford: Clarendon, 1892, pp.68--73. +\bibitem{b3} I. S. Jacobs and C. P. Bean, ``Fine particles, thin films and exchange anisotropy,'' in Magnetism, vol. III, G. T. Rado and H. Suhl, Eds. New York: Academic, 1963, pp. 271--350. +\bibitem{b4} K. Elissa, ``Title of paper if known,'' unpublished. +\bibitem{b5} R. Nicole, ``Title of paper with only first word capitalized,'' J. Name Stand. Abbrev., in press. +\bibitem{b6} Y. Yorozu, M. Hirano, K. Oka, and Y. Tagawa, ``Electron spectroscopy studies on magneto-optical media and plastic substrate interface,'' IEEE Transl. J. Magn. Japan, vol. 2, pp. 740--741, August 1987 [Digests 9th Annual Conf. Magnetics Japan, p. 301, 1982]. +\bibitem{b7} M. Young, The Technical Writer's Handbook. Mill Valley, CA: University Science, 1989. +\end{thebibliography} +\vspace{12pt} +\color{red} +IEEE conference templates contain guidance text for composing and formatting conference papers. Please ensure that all template text is removed from your conference paper prior to submission to the conference. Failure to remove the template text from your paper may result in your paper not being published. + +\end{document} diff --git a/synthetic/template/Conference-LaTeX-template_10-17-19/fig1.png b/synthetic/template/Conference-LaTeX-template_10-17-19/fig1.png new file mode 100644 index 0000000..c45bb5f Binary files /dev/null and b/synthetic/template/Conference-LaTeX-template_10-17-19/fig1.png differ diff --git a/synthetic/template/conference-latex-template_10-17-19.zip b/synthetic/template/conference-latex-template_10-17-19.zip new file mode 100644 index 0000000..6446f17 Binary files /dev/null and b/synthetic/template/conference-latex-template_10-17-19.zip differ diff --git a/synthetic/todo.txt b/synthetic/todo.txt new file mode 100644 index 0000000..ffbb273 --- /dev/null +++ b/synthetic/todo.txt @@ -0,0 +1,32 @@ +15/07: +- ROC +- focus 5% données à risque (plus riches / plus pauvres) +- Alabama adult (Thomas) +X utilisation compte Privatics +- plusieurs critères d'utilité pour les images + +- generation de données synthétiques images ++ ne pas essayer d'inférer le label de l'image ++ + +- 1 générateur par critère + + +------------------------ + +données réelles +utility +MIA (outliers + all) +AIA (outliers + all) + + +données synthétiques +utility +MIA (outliers + all) +AIA (outliers + all) + + + + + + diff --git a/template_these_INSA_cotut.pdf b/template_these_INSA_cotut.pdf new file mode 100644 index 0000000..5273483 Binary files /dev/null and b/template_these_INSA_cotut.pdf differ diff --git a/template_these_INSA_cotut.tex b/template_these_INSA_cotut.tex new file mode 100644 index 0000000..dc1d568 --- /dev/null +++ b/template_these_INSA_cotut.tex @@ -0,0 +1,138 @@ +\documentclass[a4paper,titlepage,12pt,french,twoside,openright]{report} + +\usepackage{graphicx} +\usepackage{xcolor} +\usepackage[paper=a4paper,margin=2.5cm]{geometry}% http://ctan.org/pkg/geometry +\usepackage[pdftex,colorlinks=false]{hyperref} +\usepackage[french]{babel} +\usepackage[T1]{fontenc} +\usepackage[scaled]{helvet} +\renewcommand*{\familydefault}{\sfdefault} +\usepackage{colortbl} +\usepackage{ulem} +\usepackage{lipsum} +\usepackage{upgreek} +\usepackage{amsmath} +\usepackage{amsthm} +\usepackage{amsfonts} +\usepackage{csquotes} +\usepackage{algpseudocode} +\usepackage{algorithm} +\usepackage{subcaption} +\usepackage{setspace} +\usepackage{tikz} +\usepackage{cite} +\usepackage{hyperref} +\usepackage{listings} +\usepackage{multirow} +\usepackage{placeins} +\usepackage{mathabx} +\lstset{ +basicstyle=\small\ttfamily, +columns=flexible, +breaklines=true +} + +\usetikzlibrary {shapes.geometric} +\usetikzlibrary {shapes.symbols} +\usetikzlibrary{decorations.pathreplacing} + + +\definecolor{tabED}{rgb}{0.90, 0.87, 0.93} +\definecolor{txtED}{rgb}{0.60, 0.28, 0.02} +\definecolor{siteED}{rgb}{0.04, 0.27, 0.47} + +\usetikzlibrary {shapes.geometric} +\usetikzlibrary {shapes.symbols} +\usetikzlibrary{decorations.pathreplacing} + +\input{macros} +\input{theorem} + +\input{tikz_assets/data} +\input{tikz_assets/param} + + +\begin{document} + +\hypersetup{ +pdftitle={Titre de la thèse}, %informations dans le titre +pdfauthor={Auteur}, %dans les informations du document +pdfsubject={Th\`ese} %sous Acrobat. +} + +\include{garde} + +\newgeometry{top=2.5cm,bottom=2.5cm,right=2.5cm,left=2.5cm} + + +\include{ED} + +\normalsize +\normalfont +\rmfamily + +\tableofcontents +\newpage + +\chapter*{Remerciements} +\input{remerciements} +\chapter*{Avertissement} +\input{avertissement} +\chapter{Introduction} + \section{Qu'est-ce que l'Intelligence Artificielle ?} + \label{sec:contexte-ckoi} + \input{contexte/ckoi} + \section{Philosophie de l'IA} + \label{sec:contexte-phi} + \input{contexte/philo} + \section{Les stratégies IA} + \input{contexte/strat} + \section{Enjeux} + \label{sec:contexte-enjeu} + \input{contexte/enjeux} + \section{Bases legales} + \input{contexte/legal} + \label{sec:contexte-legal} + +\chapter{Background} + \input{background/main} + +\chapter{Classification finie} + \label{sec:fini} + \input{classification_finie/main} + +\chapter{Attaque d'inférence d'attribut sensible} +\label{sec:aia}. +\input{aia/main} + + \section{Regression} + \subsection{Equitée et regression} + \subsubsection{Une bien-heureuse conséquence de l'\textit{adversarial debiasing}} + + +\chapter{Données synthétiques} +\label{sec:synth} +\input{synthetic/main} + +\chapter{Conclusion} +\input{conclusion} + +\bibliographystyle{plain} +\bibliography{biblio} + +\appendix +\chapter{Mot clé pour la recherche projets IA} +\input{annexe/ai_words} + +\newpage +\chapter*{Liste des figures} + +\newpage +\chapter*{Liste des tableaux} + +\newpage +\sffamily +\include{folio} + +\end{document} -- cgit v1.2.3 From 7fc151d6a198d13dc9e1374522ec396d72905d3f Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Wed, 11 Sep 2024 11:08:02 +0200 Subject: Ajout notations --- background/proba.tex | 16 ++++++++ background/set.tex | 52 ++++++++++++++++++++++++-- classification_finie/ba.tex | 89 ++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 153 insertions(+), 4 deletions(-) diff --git a/background/proba.tex b/background/proba.tex index 2cb0098..5bce111 100644 --- a/background/proba.tex +++ b/background/proba.tex @@ -13,6 +13,20 @@ Soit maintenant $A\subset\mathcal{P}(A)$, nous appellons $\sigma(A)$ la plus pet Nous appelons mesure, une fonction $d$ :$\mathcal{A}$ $\rightarrow$ $[0,+\infty]$ telle que $d(\emptyset) = 0$ et $d\left(\bigcup_{i\in \mathbb{N}} A_i\right) = \sum_{i\in \mathbb{N}}d(A_i)$ pour tout $(A_1, A_2, \cdots) \in \mathcal{A}^\mathbb{N} $ avec $\forall (i,j) A_i\cap A_j = \emptyset$. Nous disons alors que $(A, \mathcal{A}, d)$ est un espace mesuré. +Pour un espace mesurable $(A,\mathcal{P}(A))$, la mesure de dirac est la mesure telle que pour $a\in A$ +\begin{equation*} + \delta_a : \left\{ + \begin{matrix} + \mathcal{P}(A)\rightarrow \{0,1\}\\ + B\mapsto\left\{ + \begin{matrix} + 1&\text{si}&a\in B\\ + 0&\text{sinon}& + \end{matrix} + \right. + \end{matrix} + \right. +\end{equation*} Soit $(A, \mathcal{A}, d)$ et $(B, \mathcal{B}, e)$ deux espaces mesurés. Nous définissons alors @@ -47,6 +61,8 @@ Dans le cas particulier où $d(A) = 1$, nous appelons $d$ une mesure de probabil Le loi de probabilité d'une variable aléatoire $f$ sur $(X,\mathcal{X})$ est la mesure image de $f$ sur $d$. Nous dirons que deux variables aléatoire $f$ et $g$ sont indépendantes si et seulement si la loi de la variables aléatoire $h:\omega\mapsto (f(\omega),g(\omega))$ est la mesur produit de la loi de $f$ et $g$. +De plus, dans le cas des variables aléatoires, il est courant de d'écrir $\{f\in A\}$ pour $f^{-1}(A)$ et $\{f=a\}$ pour $f^{-1}(\{a\})$. + %Having introduced probability theory, we explicit the relation with the ML theory described previously. %Let $I$ a finite set, $\mathcal{X}$, $\mathcal{S}$ and $\mathcal{Y}$ the sets of features, sensitive attribute and label. diff --git a/background/set.tex b/background/set.tex index b45e302..e011510 100644 --- a/background/set.tex +++ b/background/set.tex @@ -42,6 +42,17 @@ Pour tout ensemble $A$ il existe un ensemble $\mathcal{P}(A)$ qui est l'ensemble Pour toute formule $F$ (au sens du clacul des prédicats et du vocabulaire $\in$, $=$) qui ne pédend pas de $B$ et tout ensemble A, il existe un ensemble $B = \{a\in A | F\}$ qui est tel que $\forall b\in B (b\in A \wedge F)$ +\begin{definition}[Intersection] + Pour des ensembles $A$ et $B$, + \begin{equation*} + A\cap B=\{a\in A\mid a\in B\} + \end{equation*} + et + \begin{equation*} + A\backslash B=\{a\in A\mid \neg(a\in B)\} + \end{equation*} +\end{definition} + \begin{definition}[Fonctions] \textbf{2-uplet.} @@ -75,21 +86,43 @@ $\forall b\in B (b\in A \wedge F)$ \right. \end{equation} Où la notation $x\mapsto f(x)$ signifie que $(x,f(x))\in f$. + En particulier, la fonction identitée est telle que + \begin{equation*} + id_E:\left\{ + \begin{matrix} + E\rightarrow E\\ + x\mapsto x + \end{matrix} + \right. + \end{equation*} + + Pour une expression $f(x)$, quand cela est pertinant nous noterons $f(\square)$ la fonction $f:x\mapsto f(x)$ quand il n'y a pas d'ambiguitée sur le domaine et codomaine. \textbf{Produit cartésien.} - Soit $A$ un ensemble $f$ une fonctions + Soit $A$ un ensemble $f$ une fonctions le produit cartésien est \begin{equation} \bigtimes_{a\in A}f(a) = \left\{ - g~|~D_g=A\wedge (\forall a\in A~g(i)\in f(i)) + g~|~D_g=A\wedge (\forall a\in A~g(a)\in f(a)) \right\} \end{equation} + Si $A=\{i,j\}$ et $f(i)=B$ et $f(j)=C$ nous notons le produit cartésien : $B\times C$. + Si pour tout $a\in A~f(a)=B$ nous notons le produit cartésien $B^{A}$. +\end{definition} + + + + Nous dirons qu'une fonction $f:E\rightarrow F$ est injective si et seulement si $\forall (x,y)\in E^2(f(x)=f(y)\implies x=y$). Nous dirons aussi que $f$ est surjective si et sulement si $\forall y\in F\exists x\in E~f(x)=y$. Dans le cas où $f$ serait à la fois injective et surjective nous dirons qu'elle est bijective et que les ensembles $E$ et $F$ sont en bijection. -\end{definition} + Pour une bijection $f$ de $E$ dans $F$ nous notons $f^{-1} : y\mapsto x~\text{tel que}~f(x)=y$. + Dans le cas où $f$ n'est pas bijective, nous définison cette notation de la manière suivant : + pour $B\subset F$, + $f^{-1}(B)=\{x\in E\mid f(x)\in B$. + \paragraph{Axiome du choix} Cette axiome nous assure qui si tous les termers du produit cartérise sons non-vides alors le produits cartésien est non-vide. @@ -229,6 +262,19 @@ Nous identifions aussi $\mathbb{R}$ aux réprésentation en base 10 de ses élé Et nous utiliserons les opérations usuelles $+$, $\cdot$, $-$ et $/$ ainsi que la relation d'ordre $<$ sur ces représentation. En générale il est possible de construire ces opérations sans utiliser la représentation en base 10~\cite{enderton1977elements} mais une telle construction est hors de propos pour ce manuscrit. +Outre les opératiosn usuelles, nous allons avoir aussi besoin de quelques fonction particulière : +\begin{itemize} + \item La factorielle : pour $n\in\mathbb{N}~n!=n(n-1)\cdots1$. + \item La division euclidienne : pour + $(a,b)\in\mathbb{N}\times\mathbb{N}^*~\exists (q,r)\in\left(\mathbb{N}^*\right)^2~ + a=qb+r\wedge b(q+1)>a$. + $q$ est appellé quotient et $r$ reste de la division de $a$ par $b$. +\end{itemize} + +\subsubsection{Intervalle} +Pour $(a,b)\in\mathbb{R}^2$ avec $a\leq b$ nous définissone l'intervalle $[a,b]$ de la manière suivant : $\{x\in\mathbb{R}\mid a\leq x\wedge x\leq b\}$. +Et aussi sa contrepartie entière : $[|a,b|] = [a,b]\cap\mathbb{N}$. + \subsubsection{Cardinal} La notion de cardinal cherche à comparer la taille d'ensembles arbitraires. Nous n'allons pas ici considérer la théorie de ordinaux de Van Neumann qui compléte notre simplification. diff --git a/classification_finie/ba.tex b/classification_finie/ba.tex index 7069668..21e272c 100644 --- a/classification_finie/ba.tex +++ b/classification_finie/ba.tex @@ -17,6 +17,79 @@ Nous proposons donc la définition suivante : Alors pour $\hat{Y}=f\circ X$, nous avons $P_{(Y,\hat{Y})} = P_Y\otimes P_{\hat{Y}}$ \end{definition} +\begin{lemma} + \label{lemme:aia-xycca} + Soit $(\Omega,\mathcal{T},P)$ un espace probabilisé. + Soient $X:(\Omega,\mathcal{T}) \rightarrow (E,\mathcal{E})$ et $Y:\Omega \rightarrow (F,\mathcal{F})$ des variables aléatoires. + Les deux propositions suivantes sont équivalantes : + \begin{enumerate} + \item $P_{(X,Y)} = P_X\otimes P_Y$. + \item Toute fonction mesurable $f:(E,\mathcal{T})\rightarrow (F,\mathcal{F})$ est un CCA pour prédire $Y$ à partir de $X$. + \end{enumerate} +\end{lemma} +\begin{proof} + En gardant les objets définis dans le Lemme~\ref{lemme:aia-xycca}. + Nous allons prouver séparément les deux implications. + \paragraph{$(1)\implies(2)$} + Nous supposons que $P_{(X,Y)} = P_X\otimes P_Y$. + Soit $f:(E,\mathcal{T})\rightarrow (F,\mathcal{F})$, un fonction mesurerable, + nous allons montrer que $f$ est un CCA, c'est-à dire que $P_{(f\circ X,Y)} = P_{f\circ X}\otimes P_Y$. + + Soient $(A,B)\in\mathcal{E}\times\mathcal{F}$ + \begin{align*} + &P_{(f\circ X,Y)}(A,B)&\\ + =&P(\{f\circ X\in A\}\cap\{Y\in B\})&\\ + =&P(\{X\in f^{-1}(A)\}\cap\{Y\in B\})&\\ + &&\textit{Comme $X$ et $Y$ sont indépendantes.}\\ + =&P_X(f^{-1}(A))P_Y(B)&\\ + =&P_{f\circ X}(A)P_Y(B)& + \end{align*} + + Ainsi, $\forall (A,B)\in\mathcal{E}\times\mathcal{F}~P_{(f\circ X,Y)}(A,B) = P_{f\circ X}(A)P_Y(B)$. + D'après la définition de le mesure produit donnée à la Section~\ref{sec:background-proba}, nous avons donc bien $P_{(f\circ X,Y)} = P_{f\circ X}\otimes P_Y$. + Ce qui est bien la définition de l'indépendant donnée en Section~\ref{sec:background-proba}. + + \paragraph{$(2)\implies (1)$} + Nous supposons que tout classifieur de $Y$ à partir de $X$ est un CCA. + Montrons que $P_{(X,Y)} = P_{f\circ X}\otimes P_Y$. + Soit $(A,B)\in\mathcal{E}\times\mathcal{F}$. + Nous allons montrer que + $P(X\in A\cap Y\in B) = P(X\in A)P(Y\in B)$. + + \paragraph{Cas 1 : $\mathcal{F}=\{\emptyset,F\}$} + Si $B=\emptyset$ alors + $P(X\in A\cap Y\in B) = P(X\in A)P(Y\in B) = \emptyset$. + Si $B=F$ alors + $P(X\in A\cap Y\in B) = P(X\in A)P(Y\in B) = P(X\in A)$. + + \paragraph{Cas 2 : $\#\mathcal{F}>2$} + Alors il existe $C\in\mathcal{F}$ tel que $C\neq\emptyset$ et $F\backslash C\neq\emptyset$. + Nous pouvons donc choisir $c$ dans $C$ et $c'$ dans $F\backslash C$. + Nous construisons la fonction suivante: + \begin{equation*} + f:\left\{ + \begin{matrix} + E\rightarrow F\\ + e\mapsto\left\{ + \begin{matrix} + c~\text{si}~e\in A\\ + c'~\text{sinon} + \end{matrix} + \right. + \end{matrix} + \right. + \end{equation*} + Alors $f:(E,\mathcal{E})\rightarrow (F,\mathcal{F})$ est une fonction mesurable et $f^{-1}(C) = A$. + Ainsi + \begin{align*} + &P(X\in A\cap Y\in B)\\ + =&P(X\in f^{-1}(C)\cap Y\in B)\\ + \text{Comme $f$ est un CCA.}&\\ + =&P(f\circ X\in C)P(Y\in B)\\ + =&P(X\in A)P(Y\in B) + \end{align*} + +\end{proof} \begin{propriete} \label{prop:CCA_BA} @@ -104,7 +177,21 @@ Déjà la \textit{balanced accuracy} est égale à $\frac{1}{3}$ car $\forall y\in F~P(\hat{Y}=y\mid Y=y)=\frac{1}{3}$. Enfin nous voyons que $f$ n'est pas un CCA car $P(\hat{Y}=1\cap Y=2) = 0$ et -$P(\hat{Y}=1)P(Y=2) = \frac{2}{9}\frac{1}{3} = \frac{2}{27}$ +$P(\hat{Y}=1)P(Y=2) = \frac{2}{9}\frac{1}{3} = \frac{2}{27}$. + +Remarquons que le réciproque de la Propriété~\ref{prop:CCA_BA} est vrai dans le cas d'une classifieur binaire, c'est-à dire $\#F=2$. +En effet dans ce cas, supposons que la \textit{balanced accuracy} vale $0,5$, alors +\begin{align*} + &P(f\circ X=0\mid Y=0)+P(f\circ X=1\mid Y=1) = 1\\ + \implies&\left\{ + \begin{matrix} + &P(f\circ X=1\mid Y=0)=P(f\circ X=1\mid Y=1)\\ + \text{et}&\\ + &P(f\circ X=0\mid Y=0)=P(f\circ X=0\mid Y=1) + \end{matrix} + \right.\\ + \implies&\text{$f$ est un CCA} +\end{align*} Bien qu'une \textit{balanced accuracy} égale à $\frac{1}{\#F}$ ne soit pas un critère de CCA, nous pouvons utiliser cette métrique pour savoir si il existe un classifieur qui soit un CCA. En effet nous avons le resultat suivant : -- cgit v1.2.3 From faa07a8f3337c5d191597ea9b9587cc0969d663c Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Fri, 13 Sep 2024 00:07:42 +0200 Subject: =?UTF-8?q?avnac=C3=A9=20aia,=20remerciement=20notations,=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../census/census_advdeb_attack_hard_race.pdf | Bin 0 -> 49861 bytes .../census/census_advdeb_attack_hard_sex.pdf | Bin 0 -> 49905 bytes ...census_advdeb_attack_soft_experimental_race.pdf | Bin 0 -> 49835 bytes .../census_advdeb_attack_soft_experimental_sex.pdf | Bin 0 -> 49873 bytes .../advdebias/census/census_advdeb_dp_lvl_race.pdf | Bin 0 -> 49676 bytes .../advdebias/census/census_advdeb_dp_lvl_sex.pdf | Bin 0 -> 49684 bytes .../advdebias/census/census_advdeb_utility.pdf | Bin 0 -> 49785 bytes .../old_format/census_advdeb_attack_hard_race.pdf | Bin 0 -> 49936 bytes .../old_format/census_advdeb_attack_hard_sex.pdf | Bin 0 -> 49981 bytes ...census_advdeb_attack_soft_experimental_race.pdf | Bin 0 -> 49880 bytes .../census_advdeb_attack_soft_experimental_sex.pdf | Bin 0 -> 49887 bytes .../old_format/census_advdeb_dp_lvl_race.pdf | Bin 0 -> 49704 bytes .../census/old_format/census_advdeb_dp_lvl_sex.pdf | Bin 0 -> 49714 bytes .../census/old_format/census_advdeb_utility.pdf | Bin 0 -> 49812 bytes .../compas/compas_advdeb_attack_hard_race.pdf | Bin 0 -> 49474 bytes .../compas/compas_advdeb_attack_hard_sex.pdf | Bin 0 -> 50376 bytes ...compas_advdeb_attack_soft_experimental_race.pdf | Bin 0 -> 50182 bytes .../compas_advdeb_attack_soft_experimental_sex.pdf | Bin 0 -> 49453 bytes .../advdebias/compas/compas_advdeb_dp_lvl_race.pdf | Bin 0 -> 49450 bytes .../advdebias/compas/compas_advdeb_dp_lvl_sex.pdf | Bin 0 -> 50029 bytes .../advdebias/compas/compas_advdeb_utility.pdf | Bin 0 -> 49807 bytes .../old_format/compas_advdeb_attack_hard_race.pdf | Bin 0 -> 49554 bytes .../old_format/compas_advdeb_attack_hard_sex.pdf | Bin 0 -> 50452 bytes ...compas_advdeb_attack_soft_experimental_race.pdf | Bin 0 -> 49896 bytes .../compas_advdeb_attack_soft_experimental_sex.pdf | Bin 0 -> 49867 bytes .../old_format/compas_advdeb_dp_lvl_race.pdf | Bin 0 -> 49483 bytes .../compas/old_format/compas_advdeb_dp_lvl_sex.pdf | Bin 0 -> 50059 bytes .../compas/old_format/compas_advdeb_utility.pdf | Bin 0 -> 49838 bytes .../advdebias/lfw/lfw_advdeb_attack_hard_race.pdf | Bin 0 -> 49759 bytes .../advdebias/lfw/lfw_advdeb_attack_hard_sex.pdf | Bin 0 -> 50237 bytes .../lfw_advdeb_attack_soft_experimental_race.pdf | Bin 0 -> 49837 bytes .../lfw_advdeb_attack_soft_experimental_sex.pdf | Bin 0 -> 49879 bytes .../advdebias/lfw/lfw_advdeb_dp_lvl_race.pdf | Bin 0 -> 49664 bytes .../advdebias/lfw/lfw_advdeb_dp_lvl_sex.pdf | Bin 0 -> 49872 bytes ACSAC/figures/advdebias/lfw/lfw_advdeb_utility.pdf | Bin 0 -> 49999 bytes .../lfw/old_format/lfw_advdeb_attack_hard_race.pdf | Bin 0 -> 49835 bytes .../lfw/old_format/lfw_advdeb_attack_hard_sex.pdf | Bin 0 -> 50310 bytes .../lfw_advdeb_attack_soft_experimental_race.pdf | Bin 0 -> 50043 bytes .../lfw_advdeb_attack_soft_experimental_sex.pdf | Bin 0 -> 49909 bytes .../lfw/old_format/lfw_advdeb_dp_lvl_race.pdf | Bin 0 -> 49695 bytes .../lfw/old_format/lfw_advdeb_dp_lvl_sex.pdf | Bin 0 -> 49902 bytes .../lfw/old_format/lfw_advdeb_utility.pdf | Bin 0 -> 50023 bytes .../meps/meps_advdeb_attack_hard_race.pdf | Bin 0 -> 49881 bytes .../advdebias/meps/meps_advdeb_attack_hard_sex.pdf | Bin 0 -> 50088 bytes .../meps_advdeb_attack_soft_experimental_race.pdf | Bin 0 -> 49860 bytes .../meps_advdeb_attack_soft_experimental_sex.pdf | Bin 0 -> 49673 bytes .../advdebias/meps/meps_advdeb_dp_lvl_race.pdf | Bin 0 -> 49694 bytes .../advdebias/meps/meps_advdeb_dp_lvl_sex.pdf | Bin 0 -> 50020 bytes .../figures/advdebias/meps/meps_advdeb_utility.pdf | Bin 0 -> 49453 bytes .../old_format/meps_advdeb_attack_hard_race.pdf | Bin 0 -> 49958 bytes .../old_format/meps_advdeb_attack_hard_sex.pdf | Bin 0 -> 50163 bytes .../meps_advdeb_attack_soft_experimental_race.pdf | Bin 0 -> 49839 bytes .../meps_advdeb_attack_soft_experimental_sex.pdf | Bin 0 -> 49720 bytes .../meps/old_format/meps_advdeb_dp_lvl_race.pdf | Bin 0 -> 49721 bytes .../meps/old_format/meps_advdeb_dp_lvl_sex.pdf | Bin 0 -> 50046 bytes .../meps/old_format/meps_advdeb_utility.pdf | Bin 0 -> 49482 bytes ACSAC/figures/after.pdf | Bin 0 -> 35687 bytes ACSAC/figures/before.pdf | Bin 0 -> 35441 bytes .../distribution_attack_impact/debiasing.pdf | Bin 0 -> 118324 bytes ACSAC/figures/distribution_attack_impact/egd.pdf | Bin 0 -> 117296 bytes ACSAC/figures/distribution_attack_impact/res.pdf | Bin 0 -> 118319 bytes ACSAC/figures/distributions/LAW_dist.pdf | Bin 0 -> 33470 bytes ACSAC/figures/distributions/LFW_dist.pdf | Bin 0 -> 34773 bytes ACSAC/figures/distributions/census_dist.pdf | Bin 0 -> 35274 bytes ACSAC/figures/distributions/compas_dist.pdf | Bin 0 -> 30021 bytes ACSAC/figures/distributions/credit_dist.pdf | Bin 0 -> 34271 bytes ACSAC/figures/distributions/meps_dist.pdf | Bin 0 -> 30179 bytes .../egd/census/census_egd_attack_hard_race.pdf | Bin 0 -> 49512 bytes .../egd/census/census_egd_attack_hard_sex.pdf | Bin 0 -> 50367 bytes .../figures/egd/census/census_egd_dp_lvl_race.pdf | Bin 0 -> 49485 bytes ACSAC/figures/egd/census/census_egd_dp_lvl_sex.pdf | Bin 0 -> 50055 bytes ACSAC/figures/egd/census/census_egd_utility.pdf | Bin 0 -> 49472 bytes .../old_format/census_egd_attack_hard_race.pdf | Bin 0 -> 49593 bytes .../old_format/census_egd_attack_hard_sex.pdf | Bin 0 -> 50444 bytes .../census/old_format/census_egd_dp_lvl_race.pdf | Bin 0 -> 49535 bytes .../census/old_format/census_egd_dp_lvl_sex.pdf | Bin 0 -> 50105 bytes .../egd/census/old_format/census_egd_utility.pdf | Bin 0 -> 49522 bytes .../egd/compas/compas_egd_attack_hard_race.pdf | Bin 0 -> 50036 bytes .../egd/compas/compas_egd_attack_hard_sex.pdf | Bin 0 -> 49856 bytes .../figures/egd/compas/compas_egd_dp_lvl_race.pdf | Bin 0 -> 49707 bytes ACSAC/figures/egd/compas/compas_egd_dp_lvl_sex.pdf | Bin 0 -> 49889 bytes ACSAC/figures/egd/compas/compas_egd_utility.pdf | Bin 0 -> 49843 bytes .../old_format/compas_egd_attack_hard_race.pdf | Bin 0 -> 50112 bytes .../old_format/compas_egd_attack_hard_sex.pdf | Bin 0 -> 49936 bytes .../compas/old_format/compas_egd_dp_lvl_race.pdf | Bin 0 -> 49756 bytes .../compas/old_format/compas_egd_dp_lvl_sex.pdf | Bin 0 -> 49934 bytes .../egd/compas/old_format/compas_egd_utility.pdf | Bin 0 -> 49892 bytes ACSAC/figures/egd/lfw/lfw_egd_attack_hard_race.pdf | Bin 0 -> 50023 bytes ACSAC/figures/egd/lfw/lfw_egd_attack_hard_sex.pdf | Bin 0 -> 49710 bytes ACSAC/figures/egd/lfw/lfw_egd_dp_lvl_race.pdf | Bin 0 -> 49896 bytes ACSAC/figures/egd/lfw/lfw_egd_dp_lvl_sex.pdf | Bin 0 -> 49724 bytes ACSAC/figures/egd/lfw/lfw_egd_utility.pdf | Bin 0 -> 49841 bytes .../lfw/old_format/lfw_egd_attack_hard_race.pdf | Bin 0 -> 50100 bytes .../egd/lfw/old_format/lfw_egd_attack_hard_sex.pdf | Bin 0 -> 49791 bytes .../egd/lfw/old_format/lfw_egd_dp_lvl_race.pdf | Bin 0 -> 49944 bytes .../egd/lfw/old_format/lfw_egd_dp_lvl_sex.pdf | Bin 0 -> 49775 bytes .../figures/egd/lfw/old_format/lfw_egd_utility.pdf | Bin 0 -> 49890 bytes .../figures/egd/meps/meps_egd_attack_hard_race.pdf | Bin 0 -> 50215 bytes .../figures/egd/meps/meps_egd_attack_hard_sex.pdf | Bin 0 -> 49908 bytes ACSAC/figures/egd/meps/meps_egd_dp_lvl_race.pdf | Bin 0 -> 50054 bytes ACSAC/figures/egd/meps/meps_egd_dp_lvl_sex.pdf | Bin 0 -> 49875 bytes ACSAC/figures/egd/meps/meps_egd_utility.pdf | Bin 0 -> 49454 bytes .../meps/old_format/meps_egd_attack_hard_race.pdf | Bin 0 -> 50291 bytes .../meps/old_format/meps_egd_attack_hard_sex.pdf | Bin 0 -> 49990 bytes .../egd/meps/old_format/meps_egd_dp_lvl_race.pdf | Bin 0 -> 50103 bytes .../egd/meps/old_format/meps_egd_dp_lvl_sex.pdf | Bin 0 -> 49924 bytes .../egd/meps/old_format/meps_egd_utility.pdf | Bin 0 -> 49504 bytes ACSAC/figures/fig_advdebias_attacc.tex | 139 +++ ACSAC/figures/fig_advdebias_fair.tex | 47 + ACSAC/figures/fig_advdebias_utility.tex | 23 + ACSAC/figures/fig_egd_attack.tex | 50 + ACSAC/figures/fig_egd_fair.tex | 46 + ACSAC/figures/fig_egd_utility.tex | 20 + ACSAC/figures/fig_tm2.tex | 47 + ACSAC/figures/old_distrib.pdf | Bin 0 -> 16234 bytes ACSAC/image/BaVsState.pdf | Bin 0 -> 14028 bytes ACSAC/image/annexe/attack/CENSUS/race.pdf | Bin 0 -> 11168 bytes ACSAC/image/annexe/attack/CENSUS/sex.pdf | Bin 0 -> 10555 bytes ACSAC/image/annexe/attack/COMPAS/race.pdf | Bin 0 -> 10386 bytes ACSAC/image/annexe/attack/COMPAS/sex.pdf | Bin 0 -> 10172 bytes ACSAC/image/annexe/attack/CREDIT/race.pdf | Bin 0 -> 10284 bytes ACSAC/image/annexe/attack/CREDIT/sex.pdf | Bin 0 -> 10958 bytes ACSAC/image/annexe/attack/LAW/race.pdf | Bin 0 -> 11549 bytes ACSAC/image/annexe/attack/LAW/sex.pdf | Bin 0 -> 10289 bytes ACSAC/image/annexe/attack/MEPS/race.pdf | Bin 0 -> 11181 bytes ACSAC/image/annexe/attack/MEPS/sex.pdf | Bin 0 -> 11496 bytes ACSAC/image/annexe/mia/CENSUS/race.pdf | Bin 0 -> 11634 bytes ACSAC/image/annexe/mia/CENSUS/sex.pdf | Bin 0 -> 11413 bytes ACSAC/image/annexe/mia/COMPAS/race.pdf | Bin 0 -> 11352 bytes ACSAC/image/annexe/mia/COMPAS/sex.pdf | Bin 0 -> 11585 bytes ACSAC/image/annexe/mia/CREDIT/race.pdf | Bin 0 -> 10632 bytes ACSAC/image/annexe/mia/CREDIT/sex.pdf | Bin 0 -> 10610 bytes ACSAC/image/annexe/mia/LAW/race.pdf | Bin 0 -> 12045 bytes ACSAC/image/annexe/mia/LAW/sex.pdf | Bin 0 -> 12244 bytes ACSAC/image/annexe/mia/MEPS/race.pdf | Bin 0 -> 11061 bytes ACSAC/image/annexe/mia/MEPS/sex.pdf | Bin 0 -> 11389 bytes ACSAC/image/annexe/utility/CENSUS/race.pdf | Bin 0 -> 11631 bytes ACSAC/image/annexe/utility/CENSUS/sex.pdf | Bin 0 -> 11943 bytes ACSAC/image/annexe/utility/COMPAS/race.pdf | Bin 0 -> 11603 bytes ACSAC/image/annexe/utility/COMPAS/sex.pdf | Bin 0 -> 11610 bytes ACSAC/image/annexe/utility/CREDIT/race.pdf | Bin 0 -> 12284 bytes ACSAC/image/annexe/utility/CREDIT/sex.pdf | Bin 0 -> 11631 bytes ACSAC/image/annexe/utility/LAW/race.pdf | Bin 0 -> 11089 bytes ACSAC/image/annexe/utility/LAW/sex.pdf | Bin 0 -> 11083 bytes ACSAC/image/annexe/utility/MEPS/race.pdf | Bin 0 -> 11633 bytes ACSAC/image/annexe/utility/MEPS/sex.pdf | Bin 0 -> 12019 bytes ACSAC/image/dpvseoo.pdf | Bin 0 -> 14065 bytes ACSAC/image/hardvsdef.pdf | Bin 0 -> 12402 bytes ACSAC/image/miaeoo.pdf | Bin 0 -> 12044 bytes ACSAC/image/rfvsnn.pdf | Bin 0 -> 12073 bytes ACSAC/image/roc.pdf | Bin 0 -> 13651 bytes ACSAC/llncs.cls | 1244 ++++++++++++++++++++ ACSAC/paper.bib | 1204 +++++++++++++++++++ ACSAC/proofs/proof_advdebias.tex | 30 + ACSAC/proofs/proof_egd_dp.tex | 33 + ACSAC/proofs/proof_egd_eo.tex | 35 + ACSAC/tables/tab_attack.tex | 30 + ACSAC/tables/tab_datasets.tex | 17 + ACSAC/tables/tab_summary.tex | 32 + aia/fair_reg.tex | 46 + aia/intro.tex | 20 + aia/main.tex | 19 +- aia/resultats.tex | 119 ++ aia/theo.tex | 89 ++ background/eq.tex | 30 +- biblio.bib | 1238 +++++++++++++++++++ notations.tex | 14 + notes.tex | 6 + remerciements.tex | 30 +- template_these_INSA_cotut.tex | 7 +- 170 files changed, 4587 insertions(+), 28 deletions(-) create mode 100644 ACSAC/figures/advdebias/census/census_advdeb_attack_hard_race.pdf create mode 100644 ACSAC/figures/advdebias/census/census_advdeb_attack_hard_sex.pdf create mode 100644 ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_race.pdf create mode 100644 ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_sex.pdf create mode 100644 ACSAC/figures/advdebias/census/census_advdeb_dp_lvl_race.pdf create mode 100644 ACSAC/figures/advdebias/census/census_advdeb_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/advdebias/census/census_advdeb_utility.pdf create mode 100644 ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_hard_race.pdf create mode 100644 ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_hard_sex.pdf create mode 100644 ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_soft_experimental_race.pdf create mode 100644 ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_soft_experimental_sex.pdf create mode 100644 ACSAC/figures/advdebias/census/old_format/census_advdeb_dp_lvl_race.pdf create mode 100644 ACSAC/figures/advdebias/census/old_format/census_advdeb_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/advdebias/census/old_format/census_advdeb_utility.pdf create mode 100644 ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_race.pdf create mode 100644 ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_sex.pdf create mode 100644 ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_race.pdf create mode 100644 ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_sex.pdf create mode 100644 ACSAC/figures/advdebias/compas/compas_advdeb_dp_lvl_race.pdf create mode 100644 ACSAC/figures/advdebias/compas/compas_advdeb_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/advdebias/compas/compas_advdeb_utility.pdf create mode 100644 ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_hard_race.pdf create mode 100644 ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_hard_sex.pdf create mode 100644 ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_soft_experimental_race.pdf create mode 100644 ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_soft_experimental_sex.pdf create mode 100644 ACSAC/figures/advdebias/compas/old_format/compas_advdeb_dp_lvl_race.pdf create mode 100644 ACSAC/figures/advdebias/compas/old_format/compas_advdeb_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/advdebias/compas/old_format/compas_advdeb_utility.pdf create mode 100644 ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_race.pdf create mode 100644 ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_sex.pdf create mode 100644 ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_race.pdf create mode 100644 ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_sex.pdf create mode 100644 ACSAC/figures/advdebias/lfw/lfw_advdeb_dp_lvl_race.pdf create mode 100644 ACSAC/figures/advdebias/lfw/lfw_advdeb_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/advdebias/lfw/lfw_advdeb_utility.pdf create mode 100644 ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_hard_race.pdf create mode 100644 ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_hard_sex.pdf create mode 100644 ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_soft_experimental_race.pdf create mode 100644 ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_soft_experimental_sex.pdf create mode 100644 ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_dp_lvl_race.pdf create mode 100644 ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_utility.pdf create mode 100644 ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_race.pdf create mode 100644 ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_sex.pdf create mode 100644 ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_race.pdf create mode 100644 ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_sex.pdf create mode 100644 ACSAC/figures/advdebias/meps/meps_advdeb_dp_lvl_race.pdf create mode 100644 ACSAC/figures/advdebias/meps/meps_advdeb_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/advdebias/meps/meps_advdeb_utility.pdf create mode 100644 ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_hard_race.pdf create mode 100644 ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_hard_sex.pdf create mode 100644 ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_soft_experimental_race.pdf create mode 100644 ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_soft_experimental_sex.pdf create mode 100644 ACSAC/figures/advdebias/meps/old_format/meps_advdeb_dp_lvl_race.pdf create mode 100644 ACSAC/figures/advdebias/meps/old_format/meps_advdeb_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/advdebias/meps/old_format/meps_advdeb_utility.pdf create mode 100644 ACSAC/figures/after.pdf create mode 100644 ACSAC/figures/before.pdf create mode 100644 ACSAC/figures/distribution_attack_impact/debiasing.pdf create mode 100644 ACSAC/figures/distribution_attack_impact/egd.pdf create mode 100644 ACSAC/figures/distribution_attack_impact/res.pdf create mode 100644 ACSAC/figures/distributions/LAW_dist.pdf create mode 100644 ACSAC/figures/distributions/LFW_dist.pdf create mode 100644 ACSAC/figures/distributions/census_dist.pdf create mode 100644 ACSAC/figures/distributions/compas_dist.pdf create mode 100644 ACSAC/figures/distributions/credit_dist.pdf create mode 100644 ACSAC/figures/distributions/meps_dist.pdf create mode 100644 ACSAC/figures/egd/census/census_egd_attack_hard_race.pdf create mode 100644 ACSAC/figures/egd/census/census_egd_attack_hard_sex.pdf create mode 100644 ACSAC/figures/egd/census/census_egd_dp_lvl_race.pdf create mode 100644 ACSAC/figures/egd/census/census_egd_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/egd/census/census_egd_utility.pdf create mode 100644 ACSAC/figures/egd/census/old_format/census_egd_attack_hard_race.pdf create mode 100644 ACSAC/figures/egd/census/old_format/census_egd_attack_hard_sex.pdf create mode 100644 ACSAC/figures/egd/census/old_format/census_egd_dp_lvl_race.pdf create mode 100644 ACSAC/figures/egd/census/old_format/census_egd_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/egd/census/old_format/census_egd_utility.pdf create mode 100644 ACSAC/figures/egd/compas/compas_egd_attack_hard_race.pdf create mode 100644 ACSAC/figures/egd/compas/compas_egd_attack_hard_sex.pdf create mode 100644 ACSAC/figures/egd/compas/compas_egd_dp_lvl_race.pdf create mode 100644 ACSAC/figures/egd/compas/compas_egd_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/egd/compas/compas_egd_utility.pdf create mode 100644 ACSAC/figures/egd/compas/old_format/compas_egd_attack_hard_race.pdf create mode 100644 ACSAC/figures/egd/compas/old_format/compas_egd_attack_hard_sex.pdf create mode 100644 ACSAC/figures/egd/compas/old_format/compas_egd_dp_lvl_race.pdf create mode 100644 ACSAC/figures/egd/compas/old_format/compas_egd_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/egd/compas/old_format/compas_egd_utility.pdf create mode 100644 ACSAC/figures/egd/lfw/lfw_egd_attack_hard_race.pdf create mode 100644 ACSAC/figures/egd/lfw/lfw_egd_attack_hard_sex.pdf create mode 100644 ACSAC/figures/egd/lfw/lfw_egd_dp_lvl_race.pdf create mode 100644 ACSAC/figures/egd/lfw/lfw_egd_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/egd/lfw/lfw_egd_utility.pdf create mode 100644 ACSAC/figures/egd/lfw/old_format/lfw_egd_attack_hard_race.pdf create mode 100644 ACSAC/figures/egd/lfw/old_format/lfw_egd_attack_hard_sex.pdf create mode 100644 ACSAC/figures/egd/lfw/old_format/lfw_egd_dp_lvl_race.pdf create mode 100644 ACSAC/figures/egd/lfw/old_format/lfw_egd_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/egd/lfw/old_format/lfw_egd_utility.pdf create mode 100644 ACSAC/figures/egd/meps/meps_egd_attack_hard_race.pdf create mode 100644 ACSAC/figures/egd/meps/meps_egd_attack_hard_sex.pdf create mode 100644 ACSAC/figures/egd/meps/meps_egd_dp_lvl_race.pdf create mode 100644 ACSAC/figures/egd/meps/meps_egd_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/egd/meps/meps_egd_utility.pdf create mode 100644 ACSAC/figures/egd/meps/old_format/meps_egd_attack_hard_race.pdf create mode 100644 ACSAC/figures/egd/meps/old_format/meps_egd_attack_hard_sex.pdf create mode 100644 ACSAC/figures/egd/meps/old_format/meps_egd_dp_lvl_race.pdf create mode 100644 ACSAC/figures/egd/meps/old_format/meps_egd_dp_lvl_sex.pdf create mode 100644 ACSAC/figures/egd/meps/old_format/meps_egd_utility.pdf create mode 100644 ACSAC/figures/fig_advdebias_attacc.tex create mode 100644 ACSAC/figures/fig_advdebias_fair.tex create mode 100644 ACSAC/figures/fig_advdebias_utility.tex create mode 100644 ACSAC/figures/fig_egd_attack.tex create mode 100644 ACSAC/figures/fig_egd_fair.tex create mode 100644 ACSAC/figures/fig_egd_utility.tex create mode 100644 ACSAC/figures/fig_tm2.tex create mode 100644 ACSAC/figures/old_distrib.pdf create mode 100644 ACSAC/image/BaVsState.pdf create mode 100644 ACSAC/image/annexe/attack/CENSUS/race.pdf create mode 100644 ACSAC/image/annexe/attack/CENSUS/sex.pdf create mode 100644 ACSAC/image/annexe/attack/COMPAS/race.pdf create mode 100644 ACSAC/image/annexe/attack/COMPAS/sex.pdf create mode 100644 ACSAC/image/annexe/attack/CREDIT/race.pdf create mode 100644 ACSAC/image/annexe/attack/CREDIT/sex.pdf create mode 100644 ACSAC/image/annexe/attack/LAW/race.pdf create mode 100644 ACSAC/image/annexe/attack/LAW/sex.pdf create mode 100644 ACSAC/image/annexe/attack/MEPS/race.pdf create mode 100644 ACSAC/image/annexe/attack/MEPS/sex.pdf create mode 100644 ACSAC/image/annexe/mia/CENSUS/race.pdf create mode 100644 ACSAC/image/annexe/mia/CENSUS/sex.pdf create mode 100644 ACSAC/image/annexe/mia/COMPAS/race.pdf create mode 100644 ACSAC/image/annexe/mia/COMPAS/sex.pdf create mode 100644 ACSAC/image/annexe/mia/CREDIT/race.pdf create mode 100644 ACSAC/image/annexe/mia/CREDIT/sex.pdf create mode 100644 ACSAC/image/annexe/mia/LAW/race.pdf create mode 100644 ACSAC/image/annexe/mia/LAW/sex.pdf create mode 100644 ACSAC/image/annexe/mia/MEPS/race.pdf create mode 100644 ACSAC/image/annexe/mia/MEPS/sex.pdf create mode 100644 ACSAC/image/annexe/utility/CENSUS/race.pdf create mode 100644 ACSAC/image/annexe/utility/CENSUS/sex.pdf create mode 100644 ACSAC/image/annexe/utility/COMPAS/race.pdf create mode 100644 ACSAC/image/annexe/utility/COMPAS/sex.pdf create mode 100644 ACSAC/image/annexe/utility/CREDIT/race.pdf create mode 100644 ACSAC/image/annexe/utility/CREDIT/sex.pdf create mode 100644 ACSAC/image/annexe/utility/LAW/race.pdf create mode 100644 ACSAC/image/annexe/utility/LAW/sex.pdf create mode 100644 ACSAC/image/annexe/utility/MEPS/race.pdf create mode 100644 ACSAC/image/annexe/utility/MEPS/sex.pdf create mode 100644 ACSAC/image/dpvseoo.pdf create mode 100644 ACSAC/image/hardvsdef.pdf create mode 100644 ACSAC/image/miaeoo.pdf create mode 100644 ACSAC/image/rfvsnn.pdf create mode 100644 ACSAC/image/roc.pdf create mode 100644 ACSAC/llncs.cls create mode 100644 ACSAC/paper.bib create mode 100644 ACSAC/proofs/proof_advdebias.tex create mode 100644 ACSAC/proofs/proof_egd_dp.tex create mode 100644 ACSAC/proofs/proof_egd_eo.tex create mode 100644 ACSAC/tables/tab_attack.tex create mode 100644 ACSAC/tables/tab_datasets.tex create mode 100644 ACSAC/tables/tab_summary.tex create mode 100644 aia/fair_reg.tex create mode 100644 aia/intro.tex create mode 100644 aia/resultats.tex create mode 100644 aia/theo.tex create mode 100644 notations.tex create mode 100644 notes.tex diff --git a/ACSAC/figures/advdebias/census/census_advdeb_attack_hard_race.pdf b/ACSAC/figures/advdebias/census/census_advdeb_attack_hard_race.pdf new file mode 100644 index 0000000..a6b8ad6 Binary files /dev/null and b/ACSAC/figures/advdebias/census/census_advdeb_attack_hard_race.pdf differ diff --git a/ACSAC/figures/advdebias/census/census_advdeb_attack_hard_sex.pdf b/ACSAC/figures/advdebias/census/census_advdeb_attack_hard_sex.pdf new file mode 100644 index 0000000..6cd8129 Binary files /dev/null and b/ACSAC/figures/advdebias/census/census_advdeb_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_race.pdf b/ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_race.pdf new file mode 100644 index 0000000..cfa61f4 Binary files /dev/null and b/ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_race.pdf differ diff --git a/ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_sex.pdf b/ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_sex.pdf new file mode 100644 index 0000000..f1d5b73 Binary files /dev/null and b/ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_sex.pdf differ diff --git a/ACSAC/figures/advdebias/census/census_advdeb_dp_lvl_race.pdf b/ACSAC/figures/advdebias/census/census_advdeb_dp_lvl_race.pdf new file mode 100644 index 0000000..034900a Binary files /dev/null and b/ACSAC/figures/advdebias/census/census_advdeb_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/advdebias/census/census_advdeb_dp_lvl_sex.pdf b/ACSAC/figures/advdebias/census/census_advdeb_dp_lvl_sex.pdf new file mode 100644 index 0000000..4618c53 Binary files /dev/null and b/ACSAC/figures/advdebias/census/census_advdeb_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/advdebias/census/census_advdeb_utility.pdf b/ACSAC/figures/advdebias/census/census_advdeb_utility.pdf new file mode 100644 index 0000000..75a4918 Binary files /dev/null and b/ACSAC/figures/advdebias/census/census_advdeb_utility.pdf differ diff --git a/ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_hard_race.pdf b/ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_hard_race.pdf new file mode 100644 index 0000000..b42aff1 Binary files /dev/null and b/ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_hard_race.pdf differ diff --git a/ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_hard_sex.pdf b/ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_hard_sex.pdf new file mode 100644 index 0000000..b29cdc5 Binary files /dev/null and b/ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_soft_experimental_race.pdf b/ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_soft_experimental_race.pdf new file mode 100644 index 0000000..f1916a9 Binary files /dev/null and b/ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_soft_experimental_race.pdf differ diff --git a/ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_soft_experimental_sex.pdf b/ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_soft_experimental_sex.pdf new file mode 100644 index 0000000..6e3a8e8 Binary files /dev/null and b/ACSAC/figures/advdebias/census/old_format/census_advdeb_attack_soft_experimental_sex.pdf differ diff --git a/ACSAC/figures/advdebias/census/old_format/census_advdeb_dp_lvl_race.pdf b/ACSAC/figures/advdebias/census/old_format/census_advdeb_dp_lvl_race.pdf new file mode 100644 index 0000000..bd91e9c Binary files /dev/null and b/ACSAC/figures/advdebias/census/old_format/census_advdeb_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/advdebias/census/old_format/census_advdeb_dp_lvl_sex.pdf b/ACSAC/figures/advdebias/census/old_format/census_advdeb_dp_lvl_sex.pdf new file mode 100644 index 0000000..34bea6f Binary files /dev/null and b/ACSAC/figures/advdebias/census/old_format/census_advdeb_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/advdebias/census/old_format/census_advdeb_utility.pdf b/ACSAC/figures/advdebias/census/old_format/census_advdeb_utility.pdf new file mode 100644 index 0000000..0f42ba6 Binary files /dev/null and b/ACSAC/figures/advdebias/census/old_format/census_advdeb_utility.pdf differ diff --git a/ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_race.pdf b/ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_race.pdf new file mode 100644 index 0000000..45fb1f8 Binary files /dev/null and b/ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_race.pdf differ diff --git a/ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_sex.pdf b/ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_sex.pdf new file mode 100644 index 0000000..619782d Binary files /dev/null and b/ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_race.pdf b/ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_race.pdf new file mode 100644 index 0000000..a46ef7f Binary files /dev/null and b/ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_race.pdf differ diff --git a/ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_sex.pdf b/ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_sex.pdf new file mode 100644 index 0000000..e24476c Binary files /dev/null and b/ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_sex.pdf differ diff --git a/ACSAC/figures/advdebias/compas/compas_advdeb_dp_lvl_race.pdf b/ACSAC/figures/advdebias/compas/compas_advdeb_dp_lvl_race.pdf new file mode 100644 index 0000000..f4d6efe Binary files /dev/null and b/ACSAC/figures/advdebias/compas/compas_advdeb_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/advdebias/compas/compas_advdeb_dp_lvl_sex.pdf b/ACSAC/figures/advdebias/compas/compas_advdeb_dp_lvl_sex.pdf new file mode 100644 index 0000000..a107b3c Binary files /dev/null and b/ACSAC/figures/advdebias/compas/compas_advdeb_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/advdebias/compas/compas_advdeb_utility.pdf b/ACSAC/figures/advdebias/compas/compas_advdeb_utility.pdf new file mode 100644 index 0000000..9e50fc3 Binary files /dev/null and b/ACSAC/figures/advdebias/compas/compas_advdeb_utility.pdf differ diff --git a/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_hard_race.pdf b/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_hard_race.pdf new file mode 100644 index 0000000..8c92c18 Binary files /dev/null and b/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_hard_race.pdf differ diff --git a/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_hard_sex.pdf b/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_hard_sex.pdf new file mode 100644 index 0000000..9cd49c9 Binary files /dev/null and b/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_soft_experimental_race.pdf b/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_soft_experimental_race.pdf new file mode 100644 index 0000000..de1bf37 Binary files /dev/null and b/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_soft_experimental_race.pdf differ diff --git a/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_soft_experimental_sex.pdf b/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_soft_experimental_sex.pdf new file mode 100644 index 0000000..060ee8b Binary files /dev/null and b/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_attack_soft_experimental_sex.pdf differ diff --git a/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_dp_lvl_race.pdf b/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_dp_lvl_race.pdf new file mode 100644 index 0000000..ad254c2 Binary files /dev/null and b/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_dp_lvl_sex.pdf b/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_dp_lvl_sex.pdf new file mode 100644 index 0000000..a8ffae1 Binary files /dev/null and b/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_utility.pdf b/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_utility.pdf new file mode 100644 index 0000000..1ab57f1 Binary files /dev/null and b/ACSAC/figures/advdebias/compas/old_format/compas_advdeb_utility.pdf differ diff --git a/ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_race.pdf b/ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_race.pdf new file mode 100644 index 0000000..7a40ea1 Binary files /dev/null and b/ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_race.pdf differ diff --git a/ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_sex.pdf b/ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_sex.pdf new file mode 100644 index 0000000..7ebda1f Binary files /dev/null and b/ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_race.pdf b/ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_race.pdf new file mode 100644 index 0000000..a77dbfa Binary files /dev/null and b/ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_race.pdf differ diff --git a/ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_sex.pdf b/ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_sex.pdf new file mode 100644 index 0000000..56f315b Binary files /dev/null and b/ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_sex.pdf differ diff --git a/ACSAC/figures/advdebias/lfw/lfw_advdeb_dp_lvl_race.pdf b/ACSAC/figures/advdebias/lfw/lfw_advdeb_dp_lvl_race.pdf new file mode 100644 index 0000000..5d60275 Binary files /dev/null and b/ACSAC/figures/advdebias/lfw/lfw_advdeb_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/advdebias/lfw/lfw_advdeb_dp_lvl_sex.pdf b/ACSAC/figures/advdebias/lfw/lfw_advdeb_dp_lvl_sex.pdf new file mode 100644 index 0000000..d7e611b Binary files /dev/null and b/ACSAC/figures/advdebias/lfw/lfw_advdeb_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/advdebias/lfw/lfw_advdeb_utility.pdf b/ACSAC/figures/advdebias/lfw/lfw_advdeb_utility.pdf new file mode 100644 index 0000000..0750661 Binary files /dev/null and b/ACSAC/figures/advdebias/lfw/lfw_advdeb_utility.pdf differ diff --git a/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_hard_race.pdf b/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_hard_race.pdf new file mode 100644 index 0000000..7bc5d56 Binary files /dev/null and b/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_hard_race.pdf differ diff --git a/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_hard_sex.pdf b/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_hard_sex.pdf new file mode 100644 index 0000000..fb517b2 Binary files /dev/null and b/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_soft_experimental_race.pdf b/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_soft_experimental_race.pdf new file mode 100644 index 0000000..547ac5f Binary files /dev/null and b/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_soft_experimental_race.pdf differ diff --git a/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_soft_experimental_sex.pdf b/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_soft_experimental_sex.pdf new file mode 100644 index 0000000..8a016f0 Binary files /dev/null and b/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_attack_soft_experimental_sex.pdf differ diff --git a/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_dp_lvl_race.pdf b/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_dp_lvl_race.pdf new file mode 100644 index 0000000..0bc2213 Binary files /dev/null and b/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_dp_lvl_sex.pdf b/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_dp_lvl_sex.pdf new file mode 100644 index 0000000..74abd1a Binary files /dev/null and b/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_utility.pdf b/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_utility.pdf new file mode 100644 index 0000000..f229545 Binary files /dev/null and b/ACSAC/figures/advdebias/lfw/old_format/lfw_advdeb_utility.pdf differ diff --git a/ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_race.pdf b/ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_race.pdf new file mode 100644 index 0000000..f127522 Binary files /dev/null and b/ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_race.pdf differ diff --git a/ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_sex.pdf b/ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_sex.pdf new file mode 100644 index 0000000..760396f Binary files /dev/null and b/ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_race.pdf b/ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_race.pdf new file mode 100644 index 0000000..e404fbf Binary files /dev/null and b/ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_race.pdf differ diff --git a/ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_sex.pdf b/ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_sex.pdf new file mode 100644 index 0000000..13dd4ef Binary files /dev/null and b/ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_sex.pdf differ diff --git a/ACSAC/figures/advdebias/meps/meps_advdeb_dp_lvl_race.pdf b/ACSAC/figures/advdebias/meps/meps_advdeb_dp_lvl_race.pdf new file mode 100644 index 0000000..b7d7108 Binary files /dev/null and b/ACSAC/figures/advdebias/meps/meps_advdeb_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/advdebias/meps/meps_advdeb_dp_lvl_sex.pdf b/ACSAC/figures/advdebias/meps/meps_advdeb_dp_lvl_sex.pdf new file mode 100644 index 0000000..feee72c Binary files /dev/null and b/ACSAC/figures/advdebias/meps/meps_advdeb_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/advdebias/meps/meps_advdeb_utility.pdf b/ACSAC/figures/advdebias/meps/meps_advdeb_utility.pdf new file mode 100644 index 0000000..4ed4f87 Binary files /dev/null and b/ACSAC/figures/advdebias/meps/meps_advdeb_utility.pdf differ diff --git a/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_hard_race.pdf b/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_hard_race.pdf new file mode 100644 index 0000000..ec398e9 Binary files /dev/null and b/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_hard_race.pdf differ diff --git a/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_hard_sex.pdf b/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_hard_sex.pdf new file mode 100644 index 0000000..40b080f Binary files /dev/null and b/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_soft_experimental_race.pdf b/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_soft_experimental_race.pdf new file mode 100644 index 0000000..8c51e72 Binary files /dev/null and b/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_soft_experimental_race.pdf differ diff --git a/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_soft_experimental_sex.pdf b/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_soft_experimental_sex.pdf new file mode 100644 index 0000000..5791e29 Binary files /dev/null and b/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_attack_soft_experimental_sex.pdf differ diff --git a/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_dp_lvl_race.pdf b/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_dp_lvl_race.pdf new file mode 100644 index 0000000..0b10830 Binary files /dev/null and b/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_dp_lvl_sex.pdf b/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_dp_lvl_sex.pdf new file mode 100644 index 0000000..5145848 Binary files /dev/null and b/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_utility.pdf b/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_utility.pdf new file mode 100644 index 0000000..ab1e523 Binary files /dev/null and b/ACSAC/figures/advdebias/meps/old_format/meps_advdeb_utility.pdf differ diff --git a/ACSAC/figures/after.pdf b/ACSAC/figures/after.pdf new file mode 100644 index 0000000..79b48ca Binary files /dev/null and b/ACSAC/figures/after.pdf differ diff --git a/ACSAC/figures/before.pdf b/ACSAC/figures/before.pdf new file mode 100644 index 0000000..4dc956e Binary files /dev/null and b/ACSAC/figures/before.pdf differ diff --git a/ACSAC/figures/distribution_attack_impact/debiasing.pdf b/ACSAC/figures/distribution_attack_impact/debiasing.pdf new file mode 100644 index 0000000..a39e062 Binary files /dev/null and b/ACSAC/figures/distribution_attack_impact/debiasing.pdf differ diff --git a/ACSAC/figures/distribution_attack_impact/egd.pdf b/ACSAC/figures/distribution_attack_impact/egd.pdf new file mode 100644 index 0000000..b9e34d7 Binary files /dev/null and b/ACSAC/figures/distribution_attack_impact/egd.pdf differ diff --git a/ACSAC/figures/distribution_attack_impact/res.pdf b/ACSAC/figures/distribution_attack_impact/res.pdf new file mode 100644 index 0000000..944cb96 Binary files /dev/null and b/ACSAC/figures/distribution_attack_impact/res.pdf differ diff --git a/ACSAC/figures/distributions/LAW_dist.pdf b/ACSAC/figures/distributions/LAW_dist.pdf new file mode 100644 index 0000000..f7767f6 Binary files /dev/null and b/ACSAC/figures/distributions/LAW_dist.pdf differ diff --git a/ACSAC/figures/distributions/LFW_dist.pdf b/ACSAC/figures/distributions/LFW_dist.pdf new file mode 100644 index 0000000..d8f05c6 Binary files /dev/null and b/ACSAC/figures/distributions/LFW_dist.pdf differ diff --git a/ACSAC/figures/distributions/census_dist.pdf b/ACSAC/figures/distributions/census_dist.pdf new file mode 100644 index 0000000..3a6cd0c Binary files /dev/null and b/ACSAC/figures/distributions/census_dist.pdf differ diff --git a/ACSAC/figures/distributions/compas_dist.pdf b/ACSAC/figures/distributions/compas_dist.pdf new file mode 100644 index 0000000..45bd5f4 Binary files /dev/null and b/ACSAC/figures/distributions/compas_dist.pdf differ diff --git a/ACSAC/figures/distributions/credit_dist.pdf b/ACSAC/figures/distributions/credit_dist.pdf new file mode 100644 index 0000000..8b2473e Binary files /dev/null and b/ACSAC/figures/distributions/credit_dist.pdf differ diff --git a/ACSAC/figures/distributions/meps_dist.pdf b/ACSAC/figures/distributions/meps_dist.pdf new file mode 100644 index 0000000..d62e6b2 Binary files /dev/null and b/ACSAC/figures/distributions/meps_dist.pdf differ diff --git a/ACSAC/figures/egd/census/census_egd_attack_hard_race.pdf b/ACSAC/figures/egd/census/census_egd_attack_hard_race.pdf new file mode 100644 index 0000000..dc652ca Binary files /dev/null and b/ACSAC/figures/egd/census/census_egd_attack_hard_race.pdf differ diff --git a/ACSAC/figures/egd/census/census_egd_attack_hard_sex.pdf b/ACSAC/figures/egd/census/census_egd_attack_hard_sex.pdf new file mode 100644 index 0000000..1f61b13 Binary files /dev/null and b/ACSAC/figures/egd/census/census_egd_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/egd/census/census_egd_dp_lvl_race.pdf b/ACSAC/figures/egd/census/census_egd_dp_lvl_race.pdf new file mode 100644 index 0000000..9e36e6b Binary files /dev/null and b/ACSAC/figures/egd/census/census_egd_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/egd/census/census_egd_dp_lvl_sex.pdf b/ACSAC/figures/egd/census/census_egd_dp_lvl_sex.pdf new file mode 100644 index 0000000..762592c Binary files /dev/null and b/ACSAC/figures/egd/census/census_egd_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/egd/census/census_egd_utility.pdf b/ACSAC/figures/egd/census/census_egd_utility.pdf new file mode 100644 index 0000000..be36f75 Binary files /dev/null and b/ACSAC/figures/egd/census/census_egd_utility.pdf differ diff --git a/ACSAC/figures/egd/census/old_format/census_egd_attack_hard_race.pdf b/ACSAC/figures/egd/census/old_format/census_egd_attack_hard_race.pdf new file mode 100644 index 0000000..f18f4f6 Binary files /dev/null and b/ACSAC/figures/egd/census/old_format/census_egd_attack_hard_race.pdf differ diff --git a/ACSAC/figures/egd/census/old_format/census_egd_attack_hard_sex.pdf b/ACSAC/figures/egd/census/old_format/census_egd_attack_hard_sex.pdf new file mode 100644 index 0000000..2edd459 Binary files /dev/null and b/ACSAC/figures/egd/census/old_format/census_egd_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/egd/census/old_format/census_egd_dp_lvl_race.pdf b/ACSAC/figures/egd/census/old_format/census_egd_dp_lvl_race.pdf new file mode 100644 index 0000000..552296f Binary files /dev/null and b/ACSAC/figures/egd/census/old_format/census_egd_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/egd/census/old_format/census_egd_dp_lvl_sex.pdf b/ACSAC/figures/egd/census/old_format/census_egd_dp_lvl_sex.pdf new file mode 100644 index 0000000..50a2e4d Binary files /dev/null and b/ACSAC/figures/egd/census/old_format/census_egd_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/egd/census/old_format/census_egd_utility.pdf b/ACSAC/figures/egd/census/old_format/census_egd_utility.pdf new file mode 100644 index 0000000..75c9f96 Binary files /dev/null and b/ACSAC/figures/egd/census/old_format/census_egd_utility.pdf differ diff --git a/ACSAC/figures/egd/compas/compas_egd_attack_hard_race.pdf b/ACSAC/figures/egd/compas/compas_egd_attack_hard_race.pdf new file mode 100644 index 0000000..1cf5680 Binary files /dev/null and b/ACSAC/figures/egd/compas/compas_egd_attack_hard_race.pdf differ diff --git a/ACSAC/figures/egd/compas/compas_egd_attack_hard_sex.pdf b/ACSAC/figures/egd/compas/compas_egd_attack_hard_sex.pdf new file mode 100644 index 0000000..e9474b5 Binary files /dev/null and b/ACSAC/figures/egd/compas/compas_egd_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/egd/compas/compas_egd_dp_lvl_race.pdf b/ACSAC/figures/egd/compas/compas_egd_dp_lvl_race.pdf new file mode 100644 index 0000000..d7cac7d Binary files /dev/null and b/ACSAC/figures/egd/compas/compas_egd_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/egd/compas/compas_egd_dp_lvl_sex.pdf b/ACSAC/figures/egd/compas/compas_egd_dp_lvl_sex.pdf new file mode 100644 index 0000000..e4619b1 Binary files /dev/null and b/ACSAC/figures/egd/compas/compas_egd_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/egd/compas/compas_egd_utility.pdf b/ACSAC/figures/egd/compas/compas_egd_utility.pdf new file mode 100644 index 0000000..4f92317 Binary files /dev/null and b/ACSAC/figures/egd/compas/compas_egd_utility.pdf differ diff --git a/ACSAC/figures/egd/compas/old_format/compas_egd_attack_hard_race.pdf b/ACSAC/figures/egd/compas/old_format/compas_egd_attack_hard_race.pdf new file mode 100644 index 0000000..322907d Binary files /dev/null and b/ACSAC/figures/egd/compas/old_format/compas_egd_attack_hard_race.pdf differ diff --git a/ACSAC/figures/egd/compas/old_format/compas_egd_attack_hard_sex.pdf b/ACSAC/figures/egd/compas/old_format/compas_egd_attack_hard_sex.pdf new file mode 100644 index 0000000..b0b6b95 Binary files /dev/null and b/ACSAC/figures/egd/compas/old_format/compas_egd_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/egd/compas/old_format/compas_egd_dp_lvl_race.pdf b/ACSAC/figures/egd/compas/old_format/compas_egd_dp_lvl_race.pdf new file mode 100644 index 0000000..6a151ae Binary files /dev/null and b/ACSAC/figures/egd/compas/old_format/compas_egd_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/egd/compas/old_format/compas_egd_dp_lvl_sex.pdf b/ACSAC/figures/egd/compas/old_format/compas_egd_dp_lvl_sex.pdf new file mode 100644 index 0000000..946ce2d Binary files /dev/null and b/ACSAC/figures/egd/compas/old_format/compas_egd_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/egd/compas/old_format/compas_egd_utility.pdf b/ACSAC/figures/egd/compas/old_format/compas_egd_utility.pdf new file mode 100644 index 0000000..5297e16 Binary files /dev/null and b/ACSAC/figures/egd/compas/old_format/compas_egd_utility.pdf differ diff --git a/ACSAC/figures/egd/lfw/lfw_egd_attack_hard_race.pdf b/ACSAC/figures/egd/lfw/lfw_egd_attack_hard_race.pdf new file mode 100644 index 0000000..a654acd Binary files /dev/null and b/ACSAC/figures/egd/lfw/lfw_egd_attack_hard_race.pdf differ diff --git a/ACSAC/figures/egd/lfw/lfw_egd_attack_hard_sex.pdf b/ACSAC/figures/egd/lfw/lfw_egd_attack_hard_sex.pdf new file mode 100644 index 0000000..44f46ea Binary files /dev/null and b/ACSAC/figures/egd/lfw/lfw_egd_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/egd/lfw/lfw_egd_dp_lvl_race.pdf b/ACSAC/figures/egd/lfw/lfw_egd_dp_lvl_race.pdf new file mode 100644 index 0000000..5578370 Binary files /dev/null and b/ACSAC/figures/egd/lfw/lfw_egd_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/egd/lfw/lfw_egd_dp_lvl_sex.pdf b/ACSAC/figures/egd/lfw/lfw_egd_dp_lvl_sex.pdf new file mode 100644 index 0000000..8108e89 Binary files /dev/null and b/ACSAC/figures/egd/lfw/lfw_egd_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/egd/lfw/lfw_egd_utility.pdf b/ACSAC/figures/egd/lfw/lfw_egd_utility.pdf new file mode 100644 index 0000000..f3ab5ce Binary files /dev/null and b/ACSAC/figures/egd/lfw/lfw_egd_utility.pdf differ diff --git a/ACSAC/figures/egd/lfw/old_format/lfw_egd_attack_hard_race.pdf b/ACSAC/figures/egd/lfw/old_format/lfw_egd_attack_hard_race.pdf new file mode 100644 index 0000000..c4bdf46 Binary files /dev/null and b/ACSAC/figures/egd/lfw/old_format/lfw_egd_attack_hard_race.pdf differ diff --git a/ACSAC/figures/egd/lfw/old_format/lfw_egd_attack_hard_sex.pdf b/ACSAC/figures/egd/lfw/old_format/lfw_egd_attack_hard_sex.pdf new file mode 100644 index 0000000..03ab032 Binary files /dev/null and b/ACSAC/figures/egd/lfw/old_format/lfw_egd_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/egd/lfw/old_format/lfw_egd_dp_lvl_race.pdf b/ACSAC/figures/egd/lfw/old_format/lfw_egd_dp_lvl_race.pdf new file mode 100644 index 0000000..83d6a83 Binary files /dev/null and b/ACSAC/figures/egd/lfw/old_format/lfw_egd_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/egd/lfw/old_format/lfw_egd_dp_lvl_sex.pdf b/ACSAC/figures/egd/lfw/old_format/lfw_egd_dp_lvl_sex.pdf new file mode 100644 index 0000000..a1b0999 Binary files /dev/null and b/ACSAC/figures/egd/lfw/old_format/lfw_egd_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/egd/lfw/old_format/lfw_egd_utility.pdf b/ACSAC/figures/egd/lfw/old_format/lfw_egd_utility.pdf new file mode 100644 index 0000000..9f39a64 Binary files /dev/null and b/ACSAC/figures/egd/lfw/old_format/lfw_egd_utility.pdf differ diff --git a/ACSAC/figures/egd/meps/meps_egd_attack_hard_race.pdf b/ACSAC/figures/egd/meps/meps_egd_attack_hard_race.pdf new file mode 100644 index 0000000..b5c8413 Binary files /dev/null and b/ACSAC/figures/egd/meps/meps_egd_attack_hard_race.pdf differ diff --git a/ACSAC/figures/egd/meps/meps_egd_attack_hard_sex.pdf b/ACSAC/figures/egd/meps/meps_egd_attack_hard_sex.pdf new file mode 100644 index 0000000..4cc6ebc Binary files /dev/null and b/ACSAC/figures/egd/meps/meps_egd_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/egd/meps/meps_egd_dp_lvl_race.pdf b/ACSAC/figures/egd/meps/meps_egd_dp_lvl_race.pdf new file mode 100644 index 0000000..58e912a Binary files /dev/null and b/ACSAC/figures/egd/meps/meps_egd_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/egd/meps/meps_egd_dp_lvl_sex.pdf b/ACSAC/figures/egd/meps/meps_egd_dp_lvl_sex.pdf new file mode 100644 index 0000000..031896a Binary files /dev/null and b/ACSAC/figures/egd/meps/meps_egd_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/egd/meps/meps_egd_utility.pdf b/ACSAC/figures/egd/meps/meps_egd_utility.pdf new file mode 100644 index 0000000..75d6f55 Binary files /dev/null and b/ACSAC/figures/egd/meps/meps_egd_utility.pdf differ diff --git a/ACSAC/figures/egd/meps/old_format/meps_egd_attack_hard_race.pdf b/ACSAC/figures/egd/meps/old_format/meps_egd_attack_hard_race.pdf new file mode 100644 index 0000000..6fdb539 Binary files /dev/null and b/ACSAC/figures/egd/meps/old_format/meps_egd_attack_hard_race.pdf differ diff --git a/ACSAC/figures/egd/meps/old_format/meps_egd_attack_hard_sex.pdf b/ACSAC/figures/egd/meps/old_format/meps_egd_attack_hard_sex.pdf new file mode 100644 index 0000000..afb6155 Binary files /dev/null and b/ACSAC/figures/egd/meps/old_format/meps_egd_attack_hard_sex.pdf differ diff --git a/ACSAC/figures/egd/meps/old_format/meps_egd_dp_lvl_race.pdf b/ACSAC/figures/egd/meps/old_format/meps_egd_dp_lvl_race.pdf new file mode 100644 index 0000000..ef3720a Binary files /dev/null and b/ACSAC/figures/egd/meps/old_format/meps_egd_dp_lvl_race.pdf differ diff --git a/ACSAC/figures/egd/meps/old_format/meps_egd_dp_lvl_sex.pdf b/ACSAC/figures/egd/meps/old_format/meps_egd_dp_lvl_sex.pdf new file mode 100644 index 0000000..be47174 Binary files /dev/null and b/ACSAC/figures/egd/meps/old_format/meps_egd_dp_lvl_sex.pdf differ diff --git a/ACSAC/figures/egd/meps/old_format/meps_egd_utility.pdf b/ACSAC/figures/egd/meps/old_format/meps_egd_utility.pdf new file mode 100644 index 0000000..8aaf310 Binary files /dev/null and b/ACSAC/figures/egd/meps/old_format/meps_egd_utility.pdf differ diff --git a/ACSAC/figures/fig_advdebias_attacc.tex b/ACSAC/figures/fig_advdebias_attacc.tex new file mode 100644 index 0000000..6c4d29a --- /dev/null +++ b/ACSAC/figures/fig_advdebias_attacc.tex @@ -0,0 +1,139 @@ +% \begin{figure}[!htb] +% \centering +% \begin{minipage}[b]{\linewidth} +% \centering +% \subfigure[\census (\race)]{ +% \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_race.pdf} +% }% +% \subfigure[\census (\sex)]{ +% \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_sex.pdf} +% } +% \end{minipage}% + + +% \begin{minipage}[b]{\linewidth} +% \centering +% \subfigure[\compas (\race)]{ +% \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_race.pdf} +% }% +% \subfigure[\compas (\sex)]{ +% \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_sex.pdf} +% } +% \end{minipage}% + +% \begin{minipage}[b]{\linewidth} +% \centering +% \subfigure[\meps (\race)]{ +% \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_race.pdf} +% }% +% \subfigure[\meps (\sex)]{ +% \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_sex.pdf} +% } +% \end{minipage}% + +% \begin{minipage}[b]{\linewidth} +% \centering +% \subfigure[\lfw (\race)]{ +% \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_race.pdf} +% }% +% \subfigure[\lfw (\sex)]{ +% \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_sex.pdf} +% } +% \end{minipage}% + +% \caption{%For both \adaptiveAIASoft and \adaptiveAIAHard, w +% We observe that \advdebias reduces the attack accuracy to random guess ($\sim$50\%). %Additionally for \adaptiveAIAHard, the theoretical bound on attack accuracy (``Theory'') matches with the empirical results (``Empirical''). +% } +% \label{fig:AdaptAIADebias} +% \end{figure} + + + + + +\begin{figure*}[!htb] + \centering + \begin{minipage}[b]{0.49\linewidth} + \centering + \subfigure[\adaptiveAIASoft: \census (\race)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_race.pdf} + }% + \subfigure[\adaptiveAIASoft: \census (\sex)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_sex.pdf} + } + \end{minipage}% + \begin{minipage}[b]{0.49\linewidth} + \centering + \subfigure[\adaptiveAIAHard: \census (\race)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_hard_race.pdf} + }% + \subfigure[\adaptiveAIAHard: \census (\sex)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_hard_sex.pdf} + } + \end{minipage}\\ + + + \begin{minipage}[b]{0.49\linewidth} + \centering + \subfigure[\adaptiveAIASoft: \compas (\race)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_race.pdf} + }% + \subfigure[\adaptiveAIASoft: \compas (\sex)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_sex.pdf} + } + \end{minipage}% + \begin{minipage}[b]{0.49\linewidth} + \centering + \subfigure[\adaptiveAIAHard: \compas (\race)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_race.pdf} + }% + \subfigure[\adaptiveAIAHard: \compas (\sex)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_sex.pdf} + } + \end{minipage}\\ + + + \begin{minipage}[b]{0.49\linewidth} + \centering + \subfigure[\adaptiveAIASoft: \meps (\race)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_race.pdf} + }% + \subfigure[\adaptiveAIASoft: \meps (\sex)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_sex.pdf} + } + \end{minipage}% + \begin{minipage}[b]{0.49\linewidth} + \centering + \subfigure[\adaptiveAIAHard: \meps (\race)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_race.pdf} + }% + \subfigure[\adaptiveAIAHard: \meps (\sex)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_sex.pdf} + } + \end{minipage}\\ + + + \begin{minipage}[b]{0.49\linewidth} + \centering + \subfigure[\adaptiveAIASoft: \lfw (\race)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_race.pdf} + }% + \subfigure[\adaptiveAIASoft: \lfw (\sex)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_sex.pdf} + } + \end{minipage}% + \begin{minipage}[b]{0.49\linewidth} + \centering + \subfigure[\adaptiveAIAHard: \lfw (\race)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_race.pdf} + }% + \subfigure[\adaptiveAIAHard: \lfw (\sex)]{ + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_sex.pdf} + } + \end{minipage} + +\vspace{-2mm} + \caption{For both \adaptiveAIASoft and \adaptiveAIAHard, \advdebias reduces the attack accuracy to random guess ($\sim$50\%). For \adaptiveAIAHard, the theoretical bound on attack accuracy (\theoretical) matches with the empirical results (\empirical).} + \label{fig:AdaptAIADebias} + \vspace{-2mm} +\end{figure*} diff --git a/ACSAC/figures/fig_advdebias_fair.tex b/ACSAC/figures/fig_advdebias_fair.tex new file mode 100644 index 0000000..42e6835 --- /dev/null +++ b/ACSAC/figures/fig_advdebias_fair.tex @@ -0,0 +1,47 @@ + +\begin{figure}[!htb] + \centering + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\census (\race)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_dp_lvl_race.pdf} + }% + \subfigure[\census (\sex)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_dp_lvl_sex.pdf} + } + \end{minipage}\\ + + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\compas (\race)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_dp_lvl_race.pdf} + }% + \subfigure[\compas (\sex)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_dp_lvl_sex.pdf} + } + \end{minipage}\\ + + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\meps (\race)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_dp_lvl_race.pdf} + }% + \subfigure[\meps (\sex)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_dp_lvl_sex.pdf} + } + \end{minipage}\\ + + + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\lfw (\race)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_dp_lvl_race.pdf} + }% + \subfigure[\lfw (\sex)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_dp_lvl_sex.pdf} + } + \end{minipage} + + \caption{\dempar-Level for \advdebias: We observe that \dempar-Level is lower for \advdebias indicating $\targetmodel$ is fair.} + \label{fig:DemParAdvDebias2} +\end{figure} \ No newline at end of file diff --git a/ACSAC/figures/fig_advdebias_utility.tex b/ACSAC/figures/fig_advdebias_utility.tex new file mode 100644 index 0000000..0a87115 --- /dev/null +++ b/ACSAC/figures/fig_advdebias_utility.tex @@ -0,0 +1,23 @@ +\begin{figure}[!htb] + \centering + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\census]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_utility.pdf} + }% + \subfigure[\compas]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_utility.pdf} + } + \end{minipage}\\ + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\meps]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_utility.pdf} + }% + \subfigure[\lfw]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_utility.pdf} + } + \end{minipage} + \caption{Utility degradation for \advdebias: We observe a statistically significant drop in $\targetmodel$'s accuracy on using \advdebias.} + \label{fig:utilityAdvDebias2} +\end{figure} \ No newline at end of file diff --git a/ACSAC/figures/fig_egd_attack.tex b/ACSAC/figures/fig_egd_attack.tex new file mode 100644 index 0000000..8b1c713 --- /dev/null +++ b/ACSAC/figures/fig_egd_attack.tex @@ -0,0 +1,50 @@ + +\begin{figure}[!htb] + \centering + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\census (\race)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/census/census_egd_attack_hard_race.pdf} + }% + \subfigure[\census (\sex)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/census/census_egd_attack_hard_sex.pdf} + } + \end{minipage}\\ + + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\compas (\race)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/compas/compas_egd_attack_hard_race.pdf} + }% + \subfigure[\compas (\sex)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/compas/compas_egd_attack_hard_sex.pdf} + } + \end{minipage}\\ + + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\meps (\race)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/meps/meps_egd_attack_hard_race.pdf} + }% + \subfigure[\meps (\sex)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/meps/meps_egd_attack_hard_sex.pdf} + } + \end{minipage}\\ + + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\lfw (\race)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/lfw/lfw_egd_attack_hard_race.pdf} + }% + \subfigure[\lfw (\sex)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/lfw/lfw_egd_attack_hard_sex.pdf} + } + \end{minipage} + + \caption{For \adaptiveAIAHard, we observe that \egd reduces the attack accuracy to random guess ($\sim$50\%). %Additionally, the theoretical bound on attack accuracy (``Theory'') matches with the empirical results (``Empirical''). + } + \label{fig:AdaptAIAEGD} +\end{figure} + + +%\textbf{Overall, we observe that using group fairness results in attribute privacy but comes at the cost of $\targetmodel$'s utility.} \ No newline at end of file diff --git a/ACSAC/figures/fig_egd_fair.tex b/ACSAC/figures/fig_egd_fair.tex new file mode 100644 index 0000000..bed88b8 --- /dev/null +++ b/ACSAC/figures/fig_egd_fair.tex @@ -0,0 +1,46 @@ + +\begin{figure}[!htb] + \centering + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\census (\race)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/census/census_egd_dp_lvl_race.pdf} + }% + \subfigure[\census (\sex)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/census/census_egd_dp_lvl_sex.pdf} + } + \end{minipage}\\ + + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\compas (\race)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/compas/compas_egd_dp_lvl_race.pdf} + }% + \subfigure[\compas (\sex)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/compas/compas_egd_dp_lvl_sex.pdf} + } + \end{minipage}\\ + + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\meps (\race)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/meps/meps_egd_dp_lvl_race.pdf} + }% + \subfigure[\meps (\sex)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/meps/meps_egd_dp_lvl_sex.pdf} + } + \end{minipage}\\ + + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\lfw (\race)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/lfw/lfw_egd_dp_lvl_race.pdf} + }% + \subfigure[\lfw (\sex)]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/lfw/lfw_egd_dp_lvl_sex.pdf} + } + \end{minipage} + + \caption{\dempar-Level for \egd: We observe that \dempar-Level is lower for \egd than the baseline indicating $\targetmodel$ is fair after \egd.} + \label{fig:DemParegd2} +\end{figure} \ No newline at end of file diff --git a/ACSAC/figures/fig_egd_utility.tex b/ACSAC/figures/fig_egd_utility.tex new file mode 100644 index 0000000..36ae32a --- /dev/null +++ b/ACSAC/figures/fig_egd_utility.tex @@ -0,0 +1,20 @@ +\begin{figure}[!htb] + \centering + \begin{minipage}[b]{1\linewidth} + \centering + \subfigure[\census]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/census/census_egd_utility.pdf} + }% + \subfigure[\compas]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/compas/compas_egd_utility.pdf} + }\\ + \subfigure[\meps]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/meps/meps_egd_utility.pdf} + }% + \subfigure[\lfw]{ + \includegraphics[width=0.49\linewidth]{ACSAC/figures/egd/lfw/lfw_egd_utility.pdf} + } + \end{minipage} + \caption{Utility degradation for \egd: We observe a statistically significant drop in $\targetmodel$'s accuracy on using \egddp which matches the observation from prior work~\cite{reductions}.} + \label{fig:utilityEGD} +\end{figure} \ No newline at end of file diff --git a/ACSAC/figures/fig_tm2.tex b/ACSAC/figures/fig_tm2.tex new file mode 100644 index 0000000..9cf489b --- /dev/null +++ b/ACSAC/figures/fig_tm2.tex @@ -0,0 +1,47 @@ +\begin{figure}[t] +\centering +\resizebox{.68\textwidth}{!}{% +\begin{tikzpicture} + + \node [rectangle,draw,thick,minimum width=1.5cm, minimum height=0.75cm] (targetmodel) {$\targetmodel$}; + + \node[below of=targetmodel,yshift=-0.3cm,database,database radius=0.4cm,database segment height=0.2cm, label={below:\footnotesize $\traindata: (X, Y)$}] (trainingdata) {}; + + \node [left of=targetmodel,minimum width=0.75cm,xshift=-0.8cm,fill=red!20,rectangle,draw,thick,label={below:\footnotesize Input}] (inputrecord) {$X'(\omega)$}; + \node [right of=targetmodel,xshift=1.5cm,rectangle,draw,thick] (outputpred) {$\targetmodel(X'(\omega))$}; + % \node [below of=outputpred,minimum width=1.5cm,rectangle,draw,thick] (explanation) {$\phi(x)$}; + + \begin{scope}[on background layer] + \node (tm1) [fit=(targetmodel) (trainingdata), fill= gray!20, rounded corners, inner sep=0.1cm, label={above:\footnotesize }] {}; + \end{scope} + + \node [right of=outputpred,rectangle,draw,thick,minimum width=1.5cm, minimum height=0.75cm,xshift=1.2cm,fill= gray!20] (attmodel) {$\attackmodel$}; + + \node [right of=attmodel,xshift=0.6cm,minimum width=0.75cm,rectangle,draw,thick] (attout) {$S(\omega)$}; + + \node[below of=attmodel,database,database radius=0.4cm,database segment height=0.2cm,yshift=-0.3cm, label={below:\footnotesize $\auxdata: (X', Y', S')$}] (auxdata) {}; + +\begin{scope}[on background layer] + \node (models) [fit=(attmodel) (outputpred) (attout) (auxdata), fill= red!20, rounded corners, inner sep=0.1cm] {}; +\end{scope} + + +\draw[->,ultra thick] (inputrecord.east) -- node[anchor=south, align=center] {\em\footnotesize } (targetmodel.west); +\draw[->,ultra thick] (targetmodel.east) -- node[anchor=south, align=center] {\em\footnotesize } (outputpred.west); +% \draw[->,ultra thick] (targetmodel.east) -- node[anchor=south, align=center] {\em\footnotesize } (explanation.west); + + +\draw[->,ultra thick, dashed] (outputpred.east) -- node[anchor=south, align=center] {\em\footnotesize } (attmodel.west); +% \draw[->,ultra thick, dashed] (explanation.east) -- node[anchor=south, align=center] {\em\footnotesize } (attmodel.west); +\draw[->,ultra thick] (attmodel.east) -- node[anchor=south, align=center] {\em\footnotesize } (attout.west); +\draw[->,ultra thick,dashed] (trainingdata.north) -- node[anchor=south, align=center,label={[yshift=-0.2cm]right:\footnotesize Train}] {\em\footnotesize } (targetmodel.south); +\draw[->,ultra thick,dashed] (auxdata.north) -- node[anchor=south, align=center,label={[yshift=-0.2cm]right:\footnotesize Train}] {\em\footnotesize } (attmodel.south); + + +\end{tikzpicture} +} +\vspace{-1mm} +\caption{\adv wants to infer sensitive attributes for an input given its prediction. \adv trains $\attackmodel$ on $\auxdata$ to map $\targetmodel(X'(\omega))$ to $S'(\omega)$. Once trained, \adv only uses $\targetmodel$'s outputs as input to $\attackmodel$ to infer sensitive attributes. \colorbox{red!20}{red} indicates accessible by \adv.} +\vspace{-1mm} +\label{fig:tm2} +\end{figure} \ No newline at end of file diff --git a/ACSAC/figures/old_distrib.pdf b/ACSAC/figures/old_distrib.pdf new file mode 100644 index 0000000..5745c6a Binary files /dev/null and b/ACSAC/figures/old_distrib.pdf differ diff --git a/ACSAC/image/BaVsState.pdf b/ACSAC/image/BaVsState.pdf new file mode 100644 index 0000000..57bf28b Binary files /dev/null and b/ACSAC/image/BaVsState.pdf differ diff --git a/ACSAC/image/annexe/attack/CENSUS/race.pdf b/ACSAC/image/annexe/attack/CENSUS/race.pdf new file mode 100644 index 0000000..4b0e218 Binary files /dev/null and b/ACSAC/image/annexe/attack/CENSUS/race.pdf differ diff --git a/ACSAC/image/annexe/attack/CENSUS/sex.pdf b/ACSAC/image/annexe/attack/CENSUS/sex.pdf new file mode 100644 index 0000000..208a968 Binary files /dev/null and b/ACSAC/image/annexe/attack/CENSUS/sex.pdf differ diff --git a/ACSAC/image/annexe/attack/COMPAS/race.pdf b/ACSAC/image/annexe/attack/COMPAS/race.pdf new file mode 100644 index 0000000..9ecf1b5 Binary files /dev/null and b/ACSAC/image/annexe/attack/COMPAS/race.pdf differ diff --git a/ACSAC/image/annexe/attack/COMPAS/sex.pdf b/ACSAC/image/annexe/attack/COMPAS/sex.pdf new file mode 100644 index 0000000..c1e3341 Binary files /dev/null and b/ACSAC/image/annexe/attack/COMPAS/sex.pdf differ diff --git a/ACSAC/image/annexe/attack/CREDIT/race.pdf b/ACSAC/image/annexe/attack/CREDIT/race.pdf new file mode 100644 index 0000000..cf0d985 Binary files /dev/null and b/ACSAC/image/annexe/attack/CREDIT/race.pdf differ diff --git a/ACSAC/image/annexe/attack/CREDIT/sex.pdf b/ACSAC/image/annexe/attack/CREDIT/sex.pdf new file mode 100644 index 0000000..6131c4d Binary files /dev/null and b/ACSAC/image/annexe/attack/CREDIT/sex.pdf differ diff --git a/ACSAC/image/annexe/attack/LAW/race.pdf b/ACSAC/image/annexe/attack/LAW/race.pdf new file mode 100644 index 0000000..ce0d185 Binary files /dev/null and b/ACSAC/image/annexe/attack/LAW/race.pdf differ diff --git a/ACSAC/image/annexe/attack/LAW/sex.pdf b/ACSAC/image/annexe/attack/LAW/sex.pdf new file mode 100644 index 0000000..63c9ef9 Binary files /dev/null and b/ACSAC/image/annexe/attack/LAW/sex.pdf differ diff --git a/ACSAC/image/annexe/attack/MEPS/race.pdf b/ACSAC/image/annexe/attack/MEPS/race.pdf new file mode 100644 index 0000000..648ae2c Binary files /dev/null and b/ACSAC/image/annexe/attack/MEPS/race.pdf differ diff --git a/ACSAC/image/annexe/attack/MEPS/sex.pdf b/ACSAC/image/annexe/attack/MEPS/sex.pdf new file mode 100644 index 0000000..a94f7c3 Binary files /dev/null and b/ACSAC/image/annexe/attack/MEPS/sex.pdf differ diff --git a/ACSAC/image/annexe/mia/CENSUS/race.pdf b/ACSAC/image/annexe/mia/CENSUS/race.pdf new file mode 100644 index 0000000..1001685 Binary files /dev/null and b/ACSAC/image/annexe/mia/CENSUS/race.pdf differ diff --git a/ACSAC/image/annexe/mia/CENSUS/sex.pdf b/ACSAC/image/annexe/mia/CENSUS/sex.pdf new file mode 100644 index 0000000..1949e07 Binary files /dev/null and b/ACSAC/image/annexe/mia/CENSUS/sex.pdf differ diff --git a/ACSAC/image/annexe/mia/COMPAS/race.pdf b/ACSAC/image/annexe/mia/COMPAS/race.pdf new file mode 100644 index 0000000..485cf2d Binary files /dev/null and b/ACSAC/image/annexe/mia/COMPAS/race.pdf differ diff --git a/ACSAC/image/annexe/mia/COMPAS/sex.pdf b/ACSAC/image/annexe/mia/COMPAS/sex.pdf new file mode 100644 index 0000000..9cda8f1 Binary files /dev/null and b/ACSAC/image/annexe/mia/COMPAS/sex.pdf differ diff --git a/ACSAC/image/annexe/mia/CREDIT/race.pdf b/ACSAC/image/annexe/mia/CREDIT/race.pdf new file mode 100644 index 0000000..c66c7db Binary files /dev/null and b/ACSAC/image/annexe/mia/CREDIT/race.pdf differ diff --git a/ACSAC/image/annexe/mia/CREDIT/sex.pdf b/ACSAC/image/annexe/mia/CREDIT/sex.pdf new file mode 100644 index 0000000..0e23b28 Binary files /dev/null and b/ACSAC/image/annexe/mia/CREDIT/sex.pdf differ diff --git a/ACSAC/image/annexe/mia/LAW/race.pdf b/ACSAC/image/annexe/mia/LAW/race.pdf new file mode 100644 index 0000000..816a359 Binary files /dev/null and b/ACSAC/image/annexe/mia/LAW/race.pdf differ diff --git a/ACSAC/image/annexe/mia/LAW/sex.pdf b/ACSAC/image/annexe/mia/LAW/sex.pdf new file mode 100644 index 0000000..c61cb49 Binary files /dev/null and b/ACSAC/image/annexe/mia/LAW/sex.pdf differ diff --git a/ACSAC/image/annexe/mia/MEPS/race.pdf b/ACSAC/image/annexe/mia/MEPS/race.pdf new file mode 100644 index 0000000..7410a4b Binary files /dev/null and b/ACSAC/image/annexe/mia/MEPS/race.pdf differ diff --git a/ACSAC/image/annexe/mia/MEPS/sex.pdf b/ACSAC/image/annexe/mia/MEPS/sex.pdf new file mode 100644 index 0000000..af13850 Binary files /dev/null and b/ACSAC/image/annexe/mia/MEPS/sex.pdf differ diff --git a/ACSAC/image/annexe/utility/CENSUS/race.pdf b/ACSAC/image/annexe/utility/CENSUS/race.pdf new file mode 100644 index 0000000..7de3e85 Binary files /dev/null and b/ACSAC/image/annexe/utility/CENSUS/race.pdf differ diff --git a/ACSAC/image/annexe/utility/CENSUS/sex.pdf b/ACSAC/image/annexe/utility/CENSUS/sex.pdf new file mode 100644 index 0000000..fcde46c Binary files /dev/null and b/ACSAC/image/annexe/utility/CENSUS/sex.pdf differ diff --git a/ACSAC/image/annexe/utility/COMPAS/race.pdf b/ACSAC/image/annexe/utility/COMPAS/race.pdf new file mode 100644 index 0000000..b3818ba Binary files /dev/null and b/ACSAC/image/annexe/utility/COMPAS/race.pdf differ diff --git a/ACSAC/image/annexe/utility/COMPAS/sex.pdf b/ACSAC/image/annexe/utility/COMPAS/sex.pdf new file mode 100644 index 0000000..71d6d1b Binary files /dev/null and b/ACSAC/image/annexe/utility/COMPAS/sex.pdf differ diff --git a/ACSAC/image/annexe/utility/CREDIT/race.pdf b/ACSAC/image/annexe/utility/CREDIT/race.pdf new file mode 100644 index 0000000..c3bca9f Binary files /dev/null and b/ACSAC/image/annexe/utility/CREDIT/race.pdf differ diff --git a/ACSAC/image/annexe/utility/CREDIT/sex.pdf b/ACSAC/image/annexe/utility/CREDIT/sex.pdf new file mode 100644 index 0000000..a1c5a11 Binary files /dev/null and b/ACSAC/image/annexe/utility/CREDIT/sex.pdf differ diff --git a/ACSAC/image/annexe/utility/LAW/race.pdf b/ACSAC/image/annexe/utility/LAW/race.pdf new file mode 100644 index 0000000..49495fa Binary files /dev/null and b/ACSAC/image/annexe/utility/LAW/race.pdf differ diff --git a/ACSAC/image/annexe/utility/LAW/sex.pdf b/ACSAC/image/annexe/utility/LAW/sex.pdf new file mode 100644 index 0000000..e490f3e Binary files /dev/null and b/ACSAC/image/annexe/utility/LAW/sex.pdf differ diff --git a/ACSAC/image/annexe/utility/MEPS/race.pdf b/ACSAC/image/annexe/utility/MEPS/race.pdf new file mode 100644 index 0000000..ec0a395 Binary files /dev/null and b/ACSAC/image/annexe/utility/MEPS/race.pdf differ diff --git a/ACSAC/image/annexe/utility/MEPS/sex.pdf b/ACSAC/image/annexe/utility/MEPS/sex.pdf new file mode 100644 index 0000000..04112fe Binary files /dev/null and b/ACSAC/image/annexe/utility/MEPS/sex.pdf differ diff --git a/ACSAC/image/dpvseoo.pdf b/ACSAC/image/dpvseoo.pdf new file mode 100644 index 0000000..a9fec18 Binary files /dev/null and b/ACSAC/image/dpvseoo.pdf differ diff --git a/ACSAC/image/hardvsdef.pdf b/ACSAC/image/hardvsdef.pdf new file mode 100644 index 0000000..0df8814 Binary files /dev/null and b/ACSAC/image/hardvsdef.pdf differ diff --git a/ACSAC/image/miaeoo.pdf b/ACSAC/image/miaeoo.pdf new file mode 100644 index 0000000..fff1e97 Binary files /dev/null and b/ACSAC/image/miaeoo.pdf differ diff --git a/ACSAC/image/rfvsnn.pdf b/ACSAC/image/rfvsnn.pdf new file mode 100644 index 0000000..c4476bb Binary files /dev/null and b/ACSAC/image/rfvsnn.pdf differ diff --git a/ACSAC/image/roc.pdf b/ACSAC/image/roc.pdf new file mode 100644 index 0000000..ea77206 Binary files /dev/null and b/ACSAC/image/roc.pdf differ diff --git a/ACSAC/llncs.cls b/ACSAC/llncs.cls new file mode 100644 index 0000000..ea17bb3 --- /dev/null +++ b/ACSAC/llncs.cls @@ -0,0 +1,1244 @@ +% LLNCS DOCUMENT CLASS -- version 2.24 (29-Jan-2024) +% Springer Verlag LaTeX2e support for Lecture Notes in Computer Science +% +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{llncs}[2024/01/29 v2.24 +^^J LaTeX document class for Lecture Notes in Computer Science] +% Options +\let\if@envcntreset\iffalse +\DeclareOption{envcountreset}{\let\if@envcntreset\iftrue} +\DeclareOption{citeauthoryear}{\let\citeauthoryear=Y} +\DeclareOption{oribibl}{\let\oribibl=Y} +\let\if@custvec\iftrue +\DeclareOption{orivec}{\let\if@custvec\iffalse} +\let\if@envcntsame\iffalse +\DeclareOption{envcountsame}{\let\if@envcntsame\iftrue} +\let\if@envcntsect\iffalse +\DeclareOption{envcountsect}{\let\if@envcntsect\iftrue} +\let\if@runhead\iffalse +\DeclareOption{runningheads}{\let\if@runhead\iftrue} + +\let\if@openright\iftrue +\let\if@openbib\iffalse +\DeclareOption{openbib}{\let\if@openbib\iftrue} + +% languages +\let\switcht@@therlang\relax +\def\ds@deutsch{\def\switcht@@therlang{\switcht@deutsch}} +\def\ds@francais{\def\switcht@@therlang{\switcht@francais}} + +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} + +\ProcessOptions + +\LoadClass[twoside]{article} +\RequirePackage{multicol} % needed for the list of participants, index +\RequirePackage{aliascnt} + +\setlength{\textwidth}{12.2cm} +\setlength{\textheight}{19.3cm} +\renewcommand\@pnumwidth{2em} +\renewcommand\@tocrmarg{3.5em} +% +\def\@dottedtocline#1#2#3#4#5{% + \ifnum #1>\c@tocdepth \else + \vskip \z@ \@plus.2\p@ + {\leftskip #2\relax \rightskip \@tocrmarg \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \parindent #2\relax\@afterindenttrue + \interlinepenalty\@M + \leavevmode + \@tempdima #3\relax + \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip + {#4}\nobreak + \leaders\hbox{$\m@th + \mkern \@dotsep mu\hbox{.}\mkern \@dotsep + mu$}\hfill + \nobreak + \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}% + \par}% + \fi} +% +\def\switcht@albion{% +\def\abstractname{Abstract.} +\def\ackname{Acknowledgments.} +\def\andname{and} +\def\lastandname{\unskip, and} +\def\appendixname{Appendix} +\def\chaptername{Chapter} +\def\claimname{Claim} +\def\conjecturename{Conjecture} +\def\contentsname{Table of Contents} +\def\corollaryname{Corollary} +\def\definitionname{Definition} +\def\discintname{Disclosure of Interests.} +\def\examplename{Example} +\def\exercisename{Exercise} +\def\figurename{Fig.} +\def\keywordname{{\bf Keywords:}} +\def\indexname{Index} +\def\lemmaname{Lemma} +\def\contriblistname{List of Contributors} +\def\listfigurename{List of Figures} +\def\listtablename{List of Tables} +\def\mailname{{\it Correspondence to\/}:} +\def\noteaddname{Note added in proof} +\def\notename{Note} +\def\partname{Part} +\def\problemname{Problem} +\def\proofname{Proof} +\def\propertyname{Property} +\def\propositionname{Proposition} +\def\questionname{Question} +\def\remarkname{Remark} +\def\seename{see} +\def\solutionname{Solution} +\def\subclassname{{\it Subject Classifications\/}:} +\def\tablename{Table} +\def\theoremname{Theorem}} +\switcht@albion +% Names of theorem like environments are already defined +% but must be translated if another language is chosen +% +% French section +\def\switcht@francais{%\typeout{On parle francais.}% + \def\abstractname{R\'esum\'e.}% + \def\ackname{Remerciements.}% + \def\andname{et}% + \def\lastandname{ et}% + \def\appendixname{Appendice}% + \def\chaptername{Chapitre}% + \def\claimname{Pr\'etention}% + \def\conjecturename{Hypoth\`ese}% + \def\contentsname{Table des mati\`eres}% + \def\corollaryname{Corollaire}% + \def\definitionname{D\'efinition}% + \def\discintname{Mention des Int\'{e}r\^{e}ts.} + \def\examplename{Exemple}% + \def\exercisename{Exercice}% + \def\figurename{Fig.}% + \def\keywordname{{\bf Mots-cl\'e:}}% + \def\indexname{Index}% + \def\lemmaname{Lemme}% + \def\contriblistname{Liste des contributeurs}% + \def\listfigurename{Liste des figures}% + \def\listtablename{Liste des tables}% + \def\mailname{{\it Correspondence to\/}:}% + \def\noteaddname{Note ajout\'ee \`a l'\'epreuve}% + \def\notename{Remarque}% + \def\partname{Partie}% + \def\problemname{Probl\`eme}% + \def\proofname{Preuve}% + \def\propertyname{Caract\'eristique}% +%\def\propositionname{Proposition}% + \def\questionname{Question}% + \def\remarkname{Remarque}% + \def\seename{voir}% + \def\solutionname{Solution}% + \def\subclassname{{\it Subject Classifications\/}:}% + \def\tablename{Tableau}% + \def\theoremname{Th\'eor\`eme}% +} +% +% German section +\def\switcht@deutsch{%\typeout{Man spricht deutsch.}% + \def\abstractname{Zusammenfassung.}% + \def\ackname{Danksagung.}% + \def\andname{und}% + \def\lastandname{ und}% + \def\appendixname{Anhang}% + \def\chaptername{Kapitel}% + \def\claimname{Behauptung}% + \def\conjecturename{Hypothese}% + \def\contentsname{Inhaltsverzeichnis}% + \def\corollaryname{Korollar}% +%\def\definitionname{Definition}% + \def\discintname{Offenlegung von Interessen.} + \def\examplename{Beispiel}% + \def\exercisename{\"Ubung}% + \def\figurename{Abb.}% + \def\keywordname{{\bf Schl\"usselw\"orter:}}% + \def\indexname{Index}% +%\def\lemmaname{Lemma}% + \def\contriblistname{Mitarbeiter}% + \def\listfigurename{Abbildungsverzeichnis}% + \def\listtablename{Tabellenverzeichnis}% + \def\mailname{{\it Correspondence to\/}:}% + \def\noteaddname{Nachtrag}% + \def\notename{Anmerkung}% + \def\partname{Teil}% +%\def\problemname{Problem}% + \def\proofname{Beweis}% + \def\propertyname{Eigenschaft}% +%\def\propositionname{Proposition}% + \def\questionname{Frage}% + \def\remarkname{Anmerkung}% + \def\seename{siehe}% + \def\solutionname{L\"osung}% + \def\subclassname{{\it Subject Classifications\/}:}% + \def\tablename{Tabelle}% +%\def\theoremname{Theorem}% +} + +% Ragged bottom for the actual page +\def\thisbottomragged{\def\@textbottom{\vskip\z@ plus.0001fil +\global\let\@textbottom\relax}} + +\renewcommand\small{% + \@setfontsize\small\@ixpt{11}% + \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus2\p@ + \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \parsep 0\p@ \@plus1\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep0\p@}% + \belowdisplayskip \abovedisplayskip +} + +% Switch to small font size for the credits at the end of the paper +% (i.e. Acknowlegments and Disclosure of Interests) +\newenvironment{credits}{% +\begingroup\small% +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-12\p@ \@plus -4\p@ \@minus -4\p@}% + {-0.5em \@plus -0.22em \@minus -0.1em}% + {\normalfont\small\bfseries\boldmath}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {-8\p@ \@plus -4\p@ \@minus -4\p@}% + {-0.5em \@plus -0.22em \@minus -0.1em}% + {\normalfont\small\itshape}}% +}{\endgroup} + +\frenchspacing +\widowpenalty=10000 +\clubpenalty=10000 + +\setlength\oddsidemargin {63\p@} +\setlength\evensidemargin {63\p@} +\setlength\marginparwidth {90\p@} + +\setlength\headsep {16\p@} + +\setlength\footnotesep{7.7\p@} +\setlength\textfloatsep{8mm\@plus 2\p@ \@minus 4\p@} +\setlength\intextsep {8mm\@plus 2\p@ \@minus 2\p@} + +\setcounter{secnumdepth}{2} + +\newcounter {chapter} +\renewcommand\thechapter {\@arabic\c@chapter} + +\newif\if@mainmatter \@mainmattertrue +\newcommand\frontmatter{\cleardoublepage + \@mainmatterfalse\pagenumbering{Roman}} +\newcommand\mainmatter{\cleardoublepage + \@mainmattertrue\pagenumbering{arabic}} +\newcommand\backmatter{\if@openright\cleardoublepage\else\clearpage\fi + \@mainmatterfalse} + +\renewcommand\part{\cleardoublepage + \thispagestyle{empty}% + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi + \null\vfil + \secdef\@part\@spart} + +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >-2\relax + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% + \else + \addcontentsline{toc}{part}{#1}% + \fi + \markboth{}{}% + {\centering + \interlinepenalty \@M + \normalfont + \ifnum \c@secnumdepth >-2\relax + \huge\bfseries \partname~\thepart + \par + \vskip 20\p@ + \fi + \Huge \bfseries #2\par}% + \@endpart} +\def\@spart#1{% + {\centering + \interlinepenalty \@M + \normalfont + \Huge \bfseries #1\par}% + \@endpart} +\def\@endpart{\vfil\newpage + \if@twoside + \null + \thispagestyle{empty}% + \newpage + \fi + \if@tempswa + \twocolumn + \fi} + +\newcommand\chapter{\clearpage + \thispagestyle{empty}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} +\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +\def\@makechapterhead#1{% +% \vspace*{50\p@}% + {\centering + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \large\bfseries \@chapapp{} \thechapter + \par\nobreak + \vskip 20\p@ + \fi + \fi + \interlinepenalty\@M + \Large \bfseries #1\par\nobreak + \vskip 40\p@ + }} +\def\@schapter#1{\if@twocolumn + \@topnewpage[\@makeschapterhead{#1}]% + \else + \@makeschapterhead{#1}% + \@afterheading + \fi} +\def\@makeschapterhead#1{% +% \vspace*{50\p@}% + {\centering + \normalfont + \interlinepenalty\@M + \Large \bfseries #1\par\nobreak + \vskip 40\p@ + }} + +\renewcommand\section{\@startsection{section}{1}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {12\p@ \@plus 4\p@ \@minus 4\p@}% + {\normalfont\large\bfseries\boldmath + \rightskip=\z@ \@plus 8em\pretolerance=10000 }} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {8\p@ \@plus 4\p@ \@minus 4\p@}% + {\normalfont\normalsize\bfseries\boldmath + \rightskip=\z@ \@plus 8em\pretolerance=10000 }} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {-0.5em \@plus -0.22em \@minus -0.1em}% + {\normalfont\normalsize\bfseries\boldmath}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {-12\p@ \@plus -4\p@ \@minus -4\p@}% + {-0.5em \@plus -0.22em \@minus -0.1em}% + {\normalfont\normalsize\itshape}} +\renewcommand\subparagraph[1]{\typeout{LLNCS warning: You should not use + \string\subparagraph\space with this class}\vskip0.5cm +You should not use \verb|\subparagraph| with this class.\vskip0.5cm} + +\DeclareMathSymbol{\Gamma}{\mathalpha}{letters}{"00} +\DeclareMathSymbol{\Delta}{\mathalpha}{letters}{"01} +\DeclareMathSymbol{\Theta}{\mathalpha}{letters}{"02} +\DeclareMathSymbol{\Lambda}{\mathalpha}{letters}{"03} +\DeclareMathSymbol{\Xi}{\mathalpha}{letters}{"04} +\DeclareMathSymbol{\Pi}{\mathalpha}{letters}{"05} +\DeclareMathSymbol{\Sigma}{\mathalpha}{letters}{"06} +\DeclareMathSymbol{\Upsilon}{\mathalpha}{letters}{"07} +\DeclareMathSymbol{\Phi}{\mathalpha}{letters}{"08} +\DeclareMathSymbol{\Psi}{\mathalpha}{letters}{"09} +\DeclareMathSymbol{\Omega}{\mathalpha}{letters}{"0A} + +\let\footnotesize\small + +\if@custvec +\DeclareRobustCommand\vec[1]{\mathchoice{\mbox{\boldmath$\displaystyle#1$}} +{\mbox{\boldmath$\textstyle#1$}} +{\mbox{\boldmath$\scriptstyle#1$}} +{\mbox{\boldmath$\scriptscriptstyle#1$}}} +\fi + +\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}} +\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil +\penalty50\hskip1em\null\nobreak\hfil\squareforqed +\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi} + +\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip +\halign{\hfil +$\displaystyle##$\hfil\cr\gets\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets +\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets +\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +\gets\cr\to\cr}}}}} +\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil +$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr +\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr +\noalign{\vskip1pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +<\cr +\noalign{\vskip0.9pt}=\cr}}}}} +\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil +$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr +\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr +\noalign{\vskip1pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +>\cr +\noalign{\vskip0.9pt}=\cr}}}}} +\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip +\halign{\hfil +$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr +>\cr\noalign{\vskip-1pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr +>\cr\noalign{\vskip-0.8pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +>\cr\noalign{\vskip-0.3pt}<\cr}}}}} +\def\bbbr{{\rm I\!R}} %reelle Zahlen +\def\bbbm{{\rm I\!M}} +\def\bbbn{{\rm I\!N}} %natuerliche Zahlen +\def\bbbf{{\rm I\!F}} +\def\bbbh{{\rm I\!H}} +\def\bbbk{{\rm I\!K}} +\def\bbbp{{\rm I\!P}} +\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l} +{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}} +\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}} +\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm +Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}} +\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm +T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}} +\def\bbbs{{\mathchoice +{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox +to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox +to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox +to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox +to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}} +\def\bbbz{{\mathchoice {\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}} +{\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}} +{\hbox{$\mathsf\scriptstyle Z\kern-0.3em Z$}} +{\hbox{$\mathsf\scriptscriptstyle Z\kern-0.2em Z$}}}} + +\let\ts\, + +\setlength\leftmargini {17\p@} +\setlength\leftmargin {\leftmargini} +\setlength\leftmarginii {\leftmargini} +\setlength\leftmarginiii {\leftmargini} +\setlength\leftmarginiv {\leftmargini} +\setlength \labelsep {.5em} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} + +\def\@listI{\leftmargin\leftmargini + \parsep 0\p@ \@plus1\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep0\p@} +\let\@listi\@listI +\@listi +\def\@listii {\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep + \topsep 0\p@ \@plus2\p@ \@minus\p@} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep + \topsep 0\p@ \@plus\p@\@minus\p@ + \parsep \z@ + \partopsep \p@ \@plus\z@ \@minus\p@} + +\renewcommand\labelitemi{\normalfont\bfseries --} +\renewcommand\labelitemii{$\m@th\bullet$} + +\setlength\arraycolsep{1.4\p@} +\setlength\tabcolsep{1.4\p@} + +\def\tableofcontents{\chapter*{\contentsname\@mkboth{{\contentsname}}% + {{\contentsname}}} + \def\authcount##1{\setcounter{auco}{##1}\setcounter{@auth}{1}} + \def\lastand{\ifnum\value{auco}=2\relax + \unskip{} \andname\ + \else + \unskip \lastandname\ + \fi}% + \def\and{\stepcounter{@auth}\relax + \ifnum\value{@auth}=\value{auco}% + \lastand + \else + \unskip, + \fi}% + \@starttoc{toc}\if@restonecol\twocolumn\fi} + +\def\l@part#1#2{\addpenalty{\@secpenalty}% + \addvspace{2em plus\p@}% % space above part line + \begingroup + \parindent \z@ + \rightskip \z@ plus 5em + \hrule\vskip5pt + \large % same size as for a contribution heading + \bfseries\boldmath % set line in boldface + \leavevmode % TeX command to enter horizontal mode. + #1\par + \vskip5pt + \hrule + \vskip1pt + \nobreak % Never break after part entry + \endgroup} + +\def\@dotsep{2} + +\let\phantomsection=\relax + +\def\hyperhrefextend{\ifx\hyper@anchor\@undefined\else +{}\fi} + +\def\addnumcontentsmark#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{\protect\numberline + {\thechapter}#3}{\thepage}\hyperhrefextend}}% +\def\addcontentsmark#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}\hyperhrefextend}}% +\def\addcontentsmarkwop#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{#3}{0}\hyperhrefextend}}% + +\def\@adcmk[#1]{\ifcase #1 \or +\def\@gtempa{\addnumcontentsmark}% + \or \def\@gtempa{\addcontentsmark}% + \or \def\@gtempa{\addcontentsmarkwop}% + \fi\@gtempa{toc}{chapter}% +} +\def\addtocmark{% +\phantomsection +\@ifnextchar[{\@adcmk}{\@adcmk[3]}% +} + +\def\l@chapter#1#2{\addpenalty{-\@highpenalty} + \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip + {\large\bfseries\boldmath#1}\ifx0#2\hfil\null + \else + \nobreak + \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern + \@dotsep mu$}\hfill + \nobreak\hbox to\@pnumwidth{\hss #2}% + \fi\par + \penalty\@highpenalty \endgroup} + +\def\l@title#1#2{\addpenalty{-\@highpenalty} + \addvspace{8pt plus 1pt} + \@tempdima \z@ + \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip + #1\nobreak + \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern + \@dotsep mu$}\hfill + \nobreak\hbox to\@pnumwidth{\hss #2}\par + \penalty\@highpenalty \endgroup} + +\def\l@author#1#2{\addpenalty{\@highpenalty} + \@tempdima=15\p@ %\z@ + \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima %\hskip -\leftskip + \textit{#1}\par + \penalty\@highpenalty \endgroup} + +\setcounter{tocdepth}{0} +\newdimen\tocchpnum +\newdimen\tocsecnum +\newdimen\tocsectotal +\newdimen\tocsubsecnum +\newdimen\tocsubsectotal +\newdimen\tocsubsubsecnum +\newdimen\tocsubsubsectotal +\newdimen\tocparanum +\newdimen\tocparatotal +\newdimen\tocsubparanum +\tocchpnum=\z@ % no chapter numbers +\tocsecnum=15\p@ % section 88. plus 2.222pt +\tocsubsecnum=23\p@ % subsection 88.8 plus 2.222pt +\tocsubsubsecnum=27\p@ % subsubsection 88.8.8 plus 1.444pt +\tocparanum=35\p@ % paragraph 88.8.8.8 plus 1.666pt +\tocsubparanum=43\p@ % subparagraph 88.8.8.8.8 plus 1.888pt +\def\calctocindent{% +\tocsectotal=\tocchpnum +\advance\tocsectotal by\tocsecnum +\tocsubsectotal=\tocsectotal +\advance\tocsubsectotal by\tocsubsecnum +\tocsubsubsectotal=\tocsubsectotal +\advance\tocsubsubsectotal by\tocsubsubsecnum +\tocparatotal=\tocsubsubsectotal +\advance\tocparatotal by\tocparanum} +\calctocindent + +\def\l@section{\@dottedtocline{1}{\tocchpnum}{\tocsecnum}} +\def\l@subsection{\@dottedtocline{2}{\tocsectotal}{\tocsubsecnum}} +\def\l@subsubsection{\@dottedtocline{3}{\tocsubsectotal}{\tocsubsubsecnum}} +\def\l@paragraph{\@dottedtocline{4}{\tocsubsubsectotal}{\tocparanum}} +\def\l@subparagraph{\@dottedtocline{5}{\tocparatotal}{\tocsubparanum}} + +\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \fi\section*{\listfigurename\@mkboth{{\listfigurename}}{{\listfigurename}}} + \@starttoc{lof}\if@restonecol\twocolumn\fi} +\def\l@figure{\@dottedtocline{1}{0em}{1.5em}} + +\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \fi\section*{\listtablename\@mkboth{{\listtablename}}{{\listtablename}}} + \@starttoc{lot}\if@restonecol\twocolumn\fi} +\let\l@table\l@figure + +\renewcommand\listoffigures{% + \section*{\listfigurename + \@mkboth{\listfigurename}{\listfigurename}}% + \@starttoc{lof}% + } + +\renewcommand\listoftables{% + \section*{\listtablename + \@mkboth{\listtablename}{\listtablename}}% + \@starttoc{lot}% + } + +\ifx\oribibl\undefined +\ifx\citeauthoryear\undefined +\renewenvironment{thebibliography}[1] + {\section*{\refname} + \def\@biblabel##1{##1.} + \small + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \if@openbib + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + \fi + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \if@openbib + \renewcommand\newblock{\par}% + \else + \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% + \fi + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.=\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} +\def\@lbibitem[#1]#2{\item[{[#1]}\hfill]\if@filesw + {\let\protect\noexpand\immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} +\newcount\@tempcntc +\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi + \@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do + {\@ifundefined + {b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bfseries + ?}\@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}% + \ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne + \@citea\def\@citea{,}\hbox{\csname b@\@citeb\endcsname}% + \else + \advance\@tempcntb\@ne + \ifnum\@tempcntb=\@tempcntc + \else\advance\@tempcntb\m@ne\@citeo + \@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}} +\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else + \@citea\def\@citea{,\,\hskip\z@skip}% + \ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else + {\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else + \def\@citea{--}\fi + \advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi} +\else +\renewenvironment{thebibliography}[1] + {\section*{\refname} + \small + \list{}% + {\settowidth\labelwidth{}% + \leftmargin\parindent + \itemindent=-\parindent + \labelsep=\z@ + \if@openbib + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + \fi + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{}}% + \if@openbib + \renewcommand\newblock{\par}% + \else + \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% + \fi + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.=\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} + \def\@cite#1{#1}% + \def\@lbibitem[#1]#2{\item[]\if@filesw + {\def\protect##1{\string ##1\space}\immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} + \fi +\else +\@cons\@openbib@code{\noexpand\small} +\fi + +\def\idxquad{\hskip 10\p@}% space that divides entry from number + +\def\@idxitem{\par\hangindent 10\p@} + +\def\subitem{\par\setbox0=\hbox{--\enspace}% second order + \noindent\hangindent\wd0\box0}% index entry + +\def\subsubitem{\par\setbox0=\hbox{--\,--\enspace}% third + \noindent\hangindent\wd0\box0}% order index entry + +\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax} + +\renewenvironment{theindex} + {\@mkboth{\indexname}{\indexname}% + \thispagestyle{empty}\parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\par + \def\,{\relax\ifmmode\mskip\thinmuskip + \else\hskip0.2em\ignorespaces\fi}% + \normalfont\small + \begin{multicols}{2}[\@makeschapterhead{\indexname}]% + } + {\end{multicols}} + +\renewcommand\footnoterule{% + \kern-3\p@ + \hrule\@width 2truecm + \kern2.6\p@} + \newdimen\fnindent + \fnindent1em +\long\def\@makefntext#1{% + \parindent \fnindent% + \leftskip \fnindent% + \noindent + \llap{\hb@xt@1em{\hss\@makefnmark\ }}\ignorespaces#1} + +\long\def\@makecaption#1#2{% + \small + \vskip\abovecaptionskip + \sbox\@tempboxa{{\bfseries #1.} #2}% + \ifdim \wd\@tempboxa >\hsize + {\bfseries #1.} #2\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} + +\def\fps@figure{htbp} +\def\fnum@figure{\figurename\thinspace\thefigure} +\def \@floatboxreset {% + \reset@font + \small + \@setnobreak + \@setminipage +} +\def\fps@table{htbp} +\def\fnum@table{\tablename~\thetable} +\renewenvironment{table} + {\setlength\abovecaptionskip{0\p@}% + \setlength\belowcaptionskip{10\p@}% + \@float{table}} + {\end@float} +\renewenvironment{table*} + {\setlength\abovecaptionskip{0\p@}% + \setlength\belowcaptionskip{10\p@}% + \@dblfloat{table}} + {\end@dblfloat} + +\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname + ext@#1\endcsname}{#1}{\protect\numberline{\csname + the#1\endcsname}{\ignorespaces #2}}\begingroup + \@parboxrestore + \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par + \endgroup} + +% LaTeX does not provide a command to enter the authors institute +% addresses. The \institute command is defined here. + +\newcounter{@inst} +\newcounter{@auth} +\newcounter{auco} +\newdimen\instindent +\newbox\authrun +\newtoks\authorrunning +\newtoks\tocauthor +\newbox\titrun +\newtoks\titlerunning +\newtoks\toctitle + +\def\clearheadinfo{\gdef\@author{No Author Given}% + \gdef\@title{No Title Given}% + \gdef\@subtitle{}% + \gdef\@institute{No Institute Given}% + \gdef\@thanks{}% + \global\titlerunning={}\global\authorrunning={}% + \global\toctitle={}\global\tocauthor={}} + +\def\institute#1{\gdef\@institute{#1}} + +\def\institutename{\par + \begingroup + \parskip=\z@ + \parindent=\z@ + \setcounter{@inst}{1}% + \def\and{\par\stepcounter{@inst}% + \noindent$^{\the@inst}$\enspace\ignorespaces}% + \setbox0=\vbox{\def\thanks##1{}\@institute}% + \ifnum\c@@inst=1\relax + \gdef\fnnstart{0}% + \else + \xdef\fnnstart{\c@@inst}% + \setcounter{@inst}{1}% + \noindent$^{\the@inst}$\enspace + \fi + \ignorespaces + \@institute\par + \endgroup} + +\def\@fnsymbol#1{\ensuremath{\ifcase#1\or\star\or{\star\star}\or + {\star\star\star}\or \dagger\or \ddagger\or + \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger + \or \ddagger\ddagger \else\@ctrerr\fi}} + +\def\inst#1{\unskip$^{#1}$} +\def\orcidID#1{\unskip$^{[#1]}$} % added MR 2018-03-10 +\def\fnmsep{\unskip$^,$} +\def\email#1{{\tt#1}} + +\AtBeginDocument{\@ifundefined{url}{\def\url#1{#1}}{}% +\@ifpackageloaded{babel}{% +\@ifundefined{extrasenglish}{}{\addto\extrasenglish{\switcht@albion}}% +\@ifundefined{extrasfrenchb}{}{\addto\extrasfrenchb{\switcht@francais}}% +\@ifundefined{extrasgerman}{}{\addto\extrasgerman{\switcht@deutsch}}% +\@ifundefined{extrasngerman}{}{\addto\extrasngerman{\switcht@deutsch}}% +}{\switcht@@therlang}% +\providecommand{\keywords}[1]{\def\and{{\textperiodcentered} }% +\par\addvspace\baselineskip +\noindent\keywordname\enspace\ignorespaces#1}% +\@ifpackageloaded{hyperref}{% +\def\doi#1{\href{https://doi.org/\detokenize{#1}}{\url{https://doi.org/#1}}}}{ +\def\doi#1{https://doi.org/\detokenize{#1}}} +} +\def\homedir{\~{ }} + +\def\subtitle#1{\gdef\@subtitle{#1}} +\clearheadinfo +% +%%% to avoid hyperref warnings +\providecommand*{\toclevel@author}{999} +%%% to make title-entry parent of section-entries +\providecommand*{\toclevel@title}{0} +% +\renewcommand\maketitle{\newpage +\phantomsection + \refstepcounter{chapter}% + \stepcounter{section}% + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{figure}{0} + \setcounter{table}{0} + \setcounter{equation}{0} + \setcounter{footnote}{0}% + \begingroup + \parindent=\z@ + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \if@twocolumn + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi + \else + \newpage + \global\@topnum\z@ % Prevents figures from going at top of page. + \@maketitle + \fi + \thispagestyle{empty}\@thanks +% + \def\\{\unskip\ \ignorespaces}\def\inst##1{\unskip{}}% + \def\thanks##1{\unskip{}}\def\fnmsep{\unskip}% + \instindent=\hsize + \advance\instindent by-\headlineindent + \if!\the\toctitle!\addcontentsline{toc}{title}{\@title}\else + \addcontentsline{toc}{title}{\the\toctitle}\fi + \if@runhead + \if!\the\titlerunning!\else + \edef\@title{\the\titlerunning}% + \fi + \global\setbox\titrun=\hbox{\small\rm\unboldmath\ignorespaces\@title}% + \ifdim\wd\titrun>\instindent + \typeout{Title too long for running head. Please supply}% + \typeout{a shorter form with \string\titlerunning\space prior to + \string\maketitle}% + \global\setbox\titrun=\hbox{\small\rm + Title Suppressed Due to Excessive Length}% + \fi + \xdef\@title{\copy\titrun}% + \fi +% + \if!\the\tocauthor!\relax + {\def\and{\noexpand\protect\noexpand\and}% + \def\inst##1{}% added MR 2017-09-20 to remove inst numbers from the TOC + \def\orcidID##1{}% added MR 2017-09-20 to remove ORCID ids from the TOC + \protected@xdef\toc@uthor{\@author}}% + \else + \def\\{\noexpand\protect\noexpand\newline}% + \protected@xdef\scratch{\the\tocauthor}% + \protected@xdef\toc@uthor{\scratch}% + \fi + \addtocontents{toc}{\noexpand\protect\noexpand\authcount{\the\c@auco}}% + \addcontentsline{toc}{author}{\toc@uthor}% + \if@runhead + \if!\the\authorrunning! + \value{@inst}=\value{@auth}% + \setcounter{@auth}{1}% + \else + \edef\@author{\the\authorrunning}% + \fi + \global\setbox\authrun=\hbox{\def\inst##1{}% added MR 2017-09-20 to remove inst numbers from the runninghead + \def\orcidID##1{}% added MR 2017-09-20 to remove ORCID ids from the runninghead + \small\unboldmath\@author\unskip}% + \ifdim\wd\authrun>\instindent + \typeout{Names of authors too long for running head. Please supply}% + \typeout{a shorter form with \string\authorrunning\space prior to + \string\maketitle}% + \global\setbox\authrun=\hbox{\small\rm + Authors Suppressed Due to Excessive Length}% + \fi + \xdef\@author{\copy\authrun}% + \markboth{\@author}{\@title}% + \fi + \endgroup + \setcounter{footnote}{\fnnstart}% + \clearheadinfo} +% +\def\@maketitle{\newpage + \markboth{}{}% + \def\lastand{\ifnum\value{@inst}=2\relax + \unskip{} \andname\ + \else + \unskip \lastandname\ + \fi}% + \def\and{\stepcounter{@auth}\relax + \ifnum\value{@auth}=\value{@inst}% + \lastand + \else + \unskip, + \fi}% + \begin{center}% + \let\newline\\ + {\Large \bfseries\boldmath + \pretolerance=10000 + \@title \par}\vskip .8cm +\if!\@subtitle!\else {\large \bfseries\boldmath + \vskip -.65cm + \pretolerance=10000 + \@subtitle \par}\vskip .8cm\fi + \setbox0=\vbox{\setcounter{@auth}{1}\def\and{\stepcounter{@auth}}% + \def\thanks##1{}\@author}% + \global\value{@inst}=\value{@auth}% + \global\value{auco}=\value{@auth}% + \setcounter{@auth}{1}% +{\lineskip .5em +\noindent\ignorespaces +\@author\vskip.35cm} + {\small\institutename} + \end{center}% + } + +% definition of the "\spnewtheorem" command. +% +% Usage: +% +% \spnewtheorem{env_nam}{caption}[within]{cap_font}{body_font} +% or \spnewtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font} +% or \spnewtheorem*{env_nam}{caption}{cap_font}{body_font} +% +% New is "cap_font" and "body_font". It stands for +% fontdefinition of the caption and the text itself. +% +% "\spnewtheorem*" gives a theorem without number. +% +% A defined spnewthoerem environment is used as described +% by Lamport. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\edef\@thmcountersep{} +\edef\@thmcounterend{.} + +\def\spnewtheorem{\@ifstar{\@sthm}{\@Sthm}} + +% definition of \spnewtheorem with number + +\def\@spnthm#1#2{\@ifnextchar[{\@spxnthm{#1}{#2}}{\@spynthm{#1}{#2}}} +\def\@Sthm#1{\@ifnextchar[{\@spothm{#1}}{\@spnthm{#1}}} + +% theorem-like environment with standard counter +\def\@spynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#3}{#4}}% + \global\@namedef{end#1}{\@endtheorem}}} + +% theorem-like environment with section-wise counter (envcountsect) +\def\@spxnthm#1#2[#3]#4#5{\expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@addtoreset{#1}{#3}% + \expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand + \csname the#3\endcsname \noexpand\@thmcountersep \@thmcounter{#1}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}% + \global\@namedef{end#1}{\@endtheorem}}} + +% theorem-like environment with shared counter (envcountsame) +\def\@spothm#1[#2]#3#4#5{% + \@ifundefined{c@#2}{\@latexerr{No theorem environment `#2' defined}\@eha}% + {\expandafter\@ifdefinable\csname #1\endcsname + {\newaliascnt{#1}{#2}% + \expandafter\xdef\csname #1name\endcsname{#3}% + \if@envcntsect + % the following line, introduced in v2.24, fixes incorrect hypertexnames + % when envcountsect is used in combination with envcountsame + \@addtoreset{#1}{section} + \fi + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}% + \global\@namedef{end#1}{\@endtheorem}}}} + + + +\def\@spthm#1#2#3#4{\topsep 7\p@ \@plus2\p@ \@minus4\p@ +\refstepcounter{#1}% +\@ifnextchar[{\@spythm{#1}{#2}{#3}{#4}}{\@spxthm{#1}{#2}{#3}{#4}}} + +\def\@spxthm#1#2#3#4{\@spbegintheorem{#2}{\csname the#1\endcsname}{#3}{#4}% + \ignorespaces} + +\def\@spythm#1#2#3#4[#5]{\@spopargbegintheorem{#2}{\csname + the#1\endcsname}{#5}{#3}{#4}\ignorespaces} + +\def\@spbegintheorem#1#2#3#4{\trivlist + \item[\hskip\labelsep{#3#1\ #2\@thmcounterend}]#4} + +\def\@spopargbegintheorem#1#2#3#4#5{\trivlist + \item[\hskip\labelsep{#4#1\ #2}]{#4(#3)\@thmcounterend\ }#5} + +% definition of \spnewtheorem* without number + +\def\@sthm#1#2{\@Ynthm{#1}{#2}} + +\def\@Ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{#1}{\@Thm{\csname #1name\endcsname}{#3}{#4}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@Thm#1#2#3{\topsep 7\p@ \@plus2\p@ \@minus4\p@ +\@ifnextchar[{\@Ythm{#1}{#2}{#3}}{\@Xthm{#1}{#2}{#3}}} + +\def\@Xthm#1#2#3{\@Begintheorem{#1}{#2}{#3}\ignorespaces} + +\def\@Ythm#1#2#3[#4]{\@Opargbegintheorem{#1} + {#4}{#2}{#3}\ignorespaces} + +\def\@Begintheorem#1#2#3{#3\trivlist + \item[\hskip\labelsep{#2#1\@thmcounterend}]} + +\def\@Opargbegintheorem#1#2#3#4{#4\trivlist + \item[\hskip\labelsep{#3#1}]{#3(#2)\@thmcounterend\ }} + +\if@envcntsect + \def\@thmcountersep{.} + \spnewtheorem{theorem}{Theorem}[section]{\bfseries}{\itshape} +\else + \spnewtheorem{theorem}{Theorem}{\bfseries}{\itshape} + \if@envcntreset + \@addtoreset{theorem}{section} + \else + \@addtoreset{theorem}{chapter} + \fi +\fi + +%definition of various theorem environments +\spnewtheorem*{claim}{Claim}{\itshape}{\rmfamily} +\spnewtheorem*{proof}{Proof}{\itshape}{\rmfamily} +\if@envcntsame % alle Umgebungen wie Theorem. + \def\spn@wtheorem#1#2#3#4{\@spothm{#1}[theorem]{#2}{#3}{#4}} +\else % alle Umgebungen mit eigenem Zaehler + \if@envcntsect % mit section numeriert + \def\spn@wtheorem#1#2#3#4{\@spxnthm{#1}{#2}[section]{#3}{#4}} + \else % nicht mit section numeriert + \if@envcntreset + \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} + \@addtoreset{#1}{section}} + \else + \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} + \@addtoreset{#1}{chapter}}% + \fi + \fi +\fi +\spn@wtheorem{case}{Case}{\itshape}{\rmfamily} +\spn@wtheorem{conjecture}{Conjecture}{\itshape}{\rmfamily} +\spn@wtheorem{corollary}{Corollary}{\bfseries}{\itshape} +\spn@wtheorem{definition}{Definition}{\bfseries}{\itshape} +\spn@wtheorem{example}{Example}{\itshape}{\rmfamily} +\spn@wtheorem{exercise}{Exercise}{\itshape}{\rmfamily} +\spn@wtheorem{lemma}{Lemma}{\bfseries}{\itshape} +\spn@wtheorem{note}{Note}{\itshape}{\rmfamily} +\spn@wtheorem{problem}{Problem}{\itshape}{\rmfamily} +\spn@wtheorem{property}{Property}{\itshape}{\rmfamily} +\spn@wtheorem{proposition}{Proposition}{\bfseries}{\itshape} +\spn@wtheorem{question}{Question}{\itshape}{\rmfamily} +\spn@wtheorem{solution}{Solution}{\itshape}{\rmfamily} +\spn@wtheorem{remark}{Remark}{\itshape}{\rmfamily} + +\def\@takefromreset#1#2{% + \def\@tempa{#1}% + \let\@tempd\@elt + \def\@elt##1{% + \def\@tempb{##1}% + \ifx\@tempa\@tempb\else + \@addtoreset{##1}{#2}% + \fi}% + \expandafter\expandafter\let\expandafter\@tempc\csname cl@#2\endcsname + \expandafter\def\csname cl@#2\endcsname{}% + \@tempc + \let\@elt\@tempd} + +\def\theopargself{\def\@spopargbegintheorem##1##2##3##4##5{\trivlist + \item[\hskip\labelsep{##4##1\ ##2}]{##4##3\@thmcounterend\ }##5} + \def\@Opargbegintheorem##1##2##3##4{##4\trivlist + \item[\hskip\labelsep{##3##1}]{##3##2\@thmcounterend\ }} + } + +\renewenvironment{abstract}{% + \list{}{\advance\topsep by0.35cm\relax\small + \leftmargin=1cm + \labelwidth=\z@ + \listparindent=\z@ + \itemindent\listparindent + \rightmargin\leftmargin}\item[\hskip\labelsep + \bfseries\abstractname]} + {\endlist} + +\newdimen\headlineindent % dimension for space between +\headlineindent=1.166cm % number and text of headings. + +\def\ps@headings{\let\@mkboth\@gobbletwo + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}% + \leftmark\hfil} + \def\@oddhead{\normalfont\small\hfil\rightmark\hspace{\headlineindent}% + \llap{\thepage}} + \def\chaptermark##1{}% + \def\sectionmark##1{}% + \def\subsectionmark##1{}} + +\def\ps@titlepage{\let\@mkboth\@gobbletwo + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}% + \hfil} + \def\@oddhead{\normalfont\small\hfil\hspace{\headlineindent}% + \llap{\thepage}} + \def\chaptermark##1{}% + \def\sectionmark##1{}% + \def\subsectionmark##1{}} + +\if@runhead\ps@headings\else +\ps@empty\fi + +\setlength\arraycolsep{1.4\p@} +\setlength\tabcolsep{1.4\p@} + +\endinput +%end of file llncs.cls diff --git a/ACSAC/paper.bib b/ACSAC/paper.bib new file mode 100644 index 0000000..ec7377e --- /dev/null +++ b/ACSAC/paper.bib @@ -0,0 +1,1204 @@ +@misc{carlini2022membership, + title={Membership Inference Attacks From First Principles}, + author={Nicholas Carlini and Steve Chien and Milad Nasr and Shuang Song and Andreas Terzis and Florian Tramer}, + year={2022}, + eprint={2112.03570}, + archivePrefix={arXiv}, + primaryClass={cs.CR} +} + +@inproceedings{salem2023sok, + title={SoK: Let the privacy games begin! A unified treatment of data inference privacy in machine learning}, + author={Salem, Ahmed and Cherubin, Giovanni and Evans, David and K{\"o}pf, Boris and Paverd, Andrew and Suri, Anshuman and Tople, Shruti and Zanella-B{\'e}guelin, Santiago}, + booktitle={2023 IEEE Symposium on Security and Privacy (SP)}, + pages={327--345}, + year={2023}, + organization={IEEE} +} + + +@inproceedings{ijcai2022p766, + title = {Differential Privacy and Fairness in Decisions and Learning Tasks: A Survey}, + author = {Fioretto, Ferdinando and Tran, Cuong and Van Hentenryck, Pascal and Zhu, Keyu}, + booktitle = {Proceedings of the Thirty-First International Joint Conference on + Artificial Intelligence, {IJCAI-22}}, + publisher = {International Joint Conferences on Artificial Intelligence Organization}, + editor = {Lud De Raedt}, + pages = {5470--5477}, + year = {2022}, + month = {7}, + note = {Survey Track}, + doi = {10.24963/ijcai.2022/766}, + url = {https://doi.org/10.24963/ijcai.2022/766}, +} + +@article{accfairtradeoff, +author = {Pinzon, Carlos and Palamidessi, Catuscia and Piantanida, Pablo and Valencia, Frank}, +year = {2023}, +month = {05}, +pages = {1-30}, +title = {On the incompatibility of accuracy and equal opportunity}, +journal = {Machine Learning}, +doi = {10.1007/s10994-023-06331-y} +} + +@article{rodolfa2021empirical, + title={Empirical observation of negligible fairness--accuracy trade-offs in machine learning for public policy}, + author={Rodolfa, Kit T and Lamba, Hemank and Ghani, Rayid}, + journal={Nature Machine Intelligence}, + volume={3}, + number={10}, + pages={896--904}, + year={2021}, + publisher={Nature Publishing Group UK London} +} + +@article{zhai2022understanding, + title={Understanding why generalized reweighting does not improve over ERM}, + author={Zhai, Runtian and Dan, Chen and Kolter, Zico and Ravikumar, Pradeep}, + booktitle={International Conference on Learning Representation}, + year={2023} +} + +@article{ +veldanda2022fairness, +title={Fairness via In-Processing in the Over-parameterized Regime: A Cautionary Tale with MinDiff Loss}, +author={Akshaj Kumar Veldanda and Ivan Brugere and Jiahao Chen and Sanghamitra Dutta and Alan Mishler and Siddharth Garg}, +journal={Transactions on Machine Learning Research}, +issn={2835-8856}, +year={2023}, +url={https://openreview.net/forum?id=f4VyYhkRvi}, +note={} +} + +% general +% url = {https://arxiv.org/abs/2206.10923}, +@misc{arxivmichael, + doi = {10.48550/ARXIV.2206.10923}, + author = {Maheshwari, Gaurav and Perrot, Michaël}, + title = {FairGrad: Fairness Aware Gradient Descent}, + publisher = {arXiv}, + year = {2022}, +} + + +@InProceedings{classIMb1, + title = {Class-Imbalanced Semi-Supervised Learning with Adaptive Thresholding}, + author = {Guo, Lan-Zhe and Li, Yu-Feng}, + booktitle = {Proceedings of the 39th International Conference on Machine Learning}, + pages = {8082--8094}, + year = {2022}, + editor = {Chaudhuri, Kamalika and Jegelka, Stefanie and Song, Le and Szepesvari, Csaba and Niu, Gang and Sabato, Sivan}, + volume = {162}, + series = {Proceedings of Machine Learning Research}, + month = {17--23 Jul}, + publisher = {PMLR}, + pdf = {https://proceedings.mlr.press/v162/guo22e/guo22e.pdf}, + url = {https://proceedings.mlr.press/v162/guo22e.html} +} + +@article{classIMb2, + title={Deep learning model calibration for improving performance in class-imbalanced medical image classification tasks}, + author={Sivaramakrishnan Rajaraman and Prasanth Ganesan and Sameer K. Antani}, + journal={PLoS ONE}, + year={2021}, + volume={17}, + url={https://api.semanticscholar.org/CorpusID:238259577} +} + +@misc{classIMb3, + author = {Jason Brownlee}, + title = {{A} {G}entle {I}ntroduction to {T}hreshold-{M}oving for {I}mbalanced {C}lassification - {M}achine{L}earning{M}astery.com --- machinelearningmastery.com}, + year = {}, + note = {[Accessed 31-08-2023]}, +} +%issn = {0022-0000}, +%url = {https://www.sciencedirect.com/science/article/pii/S002200009791504X}, +@article{saddlepointsolve, +title = {A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting}, +journal = {Journal of Computer and System Sciences}, +volume = {55}, +number = {1}, +pages = {119-139}, +year = {1997}, +doi = {10.1006/jcss.1997.1504}, +author = {Yoav Freund and Robert E Schapire} +} + + + +%isbn = {1595933832}, +%address = {New York, NY, USA}, +@inproceedings{curves, +author = {Davis, Jesse and Goadrich, Mark}, +title = {The Relationship between Precision-Recall and ROC Curves}, +year = {2006}, +publisher = {Association for Computing Machinery}, +doi = {10.1145/1143844.1143874}, +booktitle = {International Conference on Machine Learning}, +pages = {233–240}, +location = {Pittsburgh, Pennsylvania, USA}, +series = {ICML '06} +} + + +@inproceedings{cormode, +author = {Cormode, Graham}, +title = {Personal Privacy vs Population Privacy: Learning to Attack Anonymization}, +year = {2011}, +publisher = {Association for Computing Machinery}, +doi = {10.1145/2020408.2020598}, +booktitle = {ACM SIGKDD International Conference on Knowledge Discovery and Data Mining}, +pages = {1253–1261}, +location = {San Diego, California, USA}, +series = {KDD '11} +} + +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%issn = {0360-0300}, +%url = {https://doi.org/10.1145/3457607}, +@article{surveyfair, +author = {Mehrabi, Ninareh and Morstatter, Fred and Saxena, Nripsuta and Lerman, Kristina and Galstyan, Aram}, +title = {A Survey on Bias and Fairness in Machine Learning}, +year = {2021}, +volume = {54}, +number = {6}, +doi = {10.1145/3457607}, +journal = {ACM Comput. Surv.}, +month = {jul}, +articleno = {115}, +numpages = {35}, +} + + +@article{attinfSocial1, +author = {Gong, Neil Zhenqiang and Talwalkar, Ameet and Mackey, Lester and Huang, Ling and Shin, Eui Chul Richard and Stefanov, Emil and Shi, Elaine (Runting) and Song, Dawn}, +title = {Joint Link Prediction and Attribute Inference Using a Social-Attribute Network}, +year = {2014}, +publisher = {Association for Computing Machinery}, +volume = {5}, +number = {2}, +doi = {10.1145/2594455}, +journal = {ACM Trans. Intell. Syst. Technol.}, +} + + +%address = {New York, NY, USA}, + +%issn = {2471-2566}, +%url = {https://doi.org/10.1145/3154793}, +%numpages = {30}, +%%month = {jan}, +@article{attinfSocial2, +author = {Gong, Neil Zhenqiang and Liu, Bin}, +title = {Attribute Inference Attacks in Online Social Networks}, +year = {2018}, +publisher = {Association for Computing Machinery}, +volume = {21}, +number = {1}, +doi = {10.1145/3154793}, +journal = {ACM Trans. Priv. Secur.}, +articleno = {3}, +} + +%isbn = {978-1-931971-32-4}, +%address = {Austin, TX}, +%url = {https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/gong}, +%publisher = {USENIX Association}, +%month = aug, +@inproceedings {attinfSocial3, +author = {Neil Zhenqiang Gong and Bin Liu}, +title = {You Are Who You Know and How You Behave: Attribute Inference Attacks via Users{\textquoteright} Social Friends and Behaviors}, +booktitle = {USENIX Security Symposium }, +year = {2016}, +pages = {979--995}, +} + + + %URL = {https://hal.inria.fr/hal-00748162}, + %ADDRESS = {San Diego, United States}, + %MONTH = Feb, +@inproceedings{attinfSocial4, + TITLE = {{You Are What You Like! Information Leakage Through Users' Interests}}, + YEAR = {2012}, + AUTHOR = {Chaabane, Abdelberi and Acs, Gergely and Kaafar, Mohamed Ali}, + BOOKTITLE = {Network and Distributed System Security Symposium}, + PAGES = {1-14}, +} + + + + +@inproceedings{attinfSocial5, + author={Elena Zheleva and Lise Getoor}, + title={To join or not to join: the illusion of privacy in social networks with mixed public and private user profiles}, + year={2009}, + BOOKTITLE = {International Conference on World Wide Web}, + pages={531-540}, + doi={10.1145/1526709.1526781}, +} + + + +%isbn = {9781450349130}, +%publisher = {International World Wide Web Conferences Steering Committee}, +%address = {Republic and Canton of Geneva, CHE}, +%url = {https://doi.org/10.1145/3038912.3052695}, +@inproceedings{attinfSocial6, +author = {Jia, Jinyuan and Wang, Binghui and Zhang, Le and Gong, Neil Zhenqiang}, +title = {AttriInfer: Inferring User Attributes in Online Social Networks Using Markov Random Fields}, +year = {2017}, +doi = {10.1145/3038912.3052695}, +booktitle = {nternational Conference on World Wide Web}, +pages = {1561–1569}, +location = {Perth, Australia}, +series = {WWW '17} +} + + + +%isbn = {9781450382878}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +@inbook{dysan, +author = {Boutet, Antoine and Frindel, Carole and Gambs, S\'{e}bastien and Jourdan, Th\'{e}o and Ngueveu, Rosin Claude}, +title = {DySan: Dynamically Sanitizing Motion Sensor Data Against Sensitive Inferences through Adversarial Networks}, +year = {2021}, +doi = {10.1145/3433210.3453095}, +booktitle = {ACM Asia Conference on Computer and Communications Security}, +pages = {672–686}, +serie = {ASIA CCS '21} +} + +@inproceedings{attprivacy, +author = {Zhang, Wanrong and Ohrimenko, Olga and Cummings, Rachel}, +title = {Attribute Privacy: Framework and Mechanisms}, +year = {2022}, +isbn = {9781450393522}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +url = {https://doi.org/10.1145/3531146.3533139}, +doi = {10.1145/3531146.3533139}, +booktitle = {Proceedings of the 2022 ACM Conference on Fairness, Accountability, and Transparency}, +pages = {757–766}, +numpages = {10}, +keywords = {Pufferfish privacy, attribute privacy, formal privacy frameworks, privacy-preserving mechanisms}, +series = {FAccT '22} +} + +%differential privacy and fairness +@inproceedings{dispvuln, +author = {Mohammad Yaghini and Bogdan Kulynych and Carmela Troncoso}, +title = {Disparate Vulnerability: on the Unfairness of Privacy Attacks Against Machine Learning}, +year = {2022}, +booktitle = {Privacy Enhancing Technologies Symposium} +} + + +%isbn = {9781450391405}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +@inproceedings{GongMIAUnfair, +author = {Zhong, Da and Sun, Haipei and Xu, Jun and Gong, Neil and Wang, Wendy Hui}, +title = {Understanding Disparate Effects of Membership Inference Attacks and Their Countermeasures}, +year = {2022}, +doi = {10.1145/3488932.3501279}, +booktitle = {ACM on Asia Conference on Computer and Communications Security}, +pages = {959–974}, +location = {Nagasaki, Japan}, +series = {ASIA CCS '22} +} + + +%sbn = {9781450311151}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%url = {https://doi.org/10.1145/2090236.2090255}, +@inproceedings{indivfairness, +author = {Dwork, Cynthia and Hardt, Moritz and Pitassi, Toniann and Reingold, Omer and Zemel, Richard}, +title = {Fairness through Awareness}, +year = {2012}, +doi = {10.1145/2090236.2090255}, +booktitle = {Innovations in Theoretical Computer Science Conference}, +pages = {214–226}, +location = {Cambridge, Massachusetts}, +series = {ITCS '12} +} + +@inproceedings{outIndist, +author = {Dwork, Cynthia and Kim, Michael P. and Reingold, Omer and Rothblum, Guy N. and Yona, Gal}, +title = {Outcome indistinguishability}, +year = {2021}, +isbn = {9781450380539}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +url = {https://doi.org/10.1145/3406325.3451064}, +doi = {10.1145/3406325.3451064}, +booktitle = {Proceedings of the 53rd Annual ACM SIGACT Symposium on Theory of Computing}, +pages = {1095–1108}, +numpages = {14}, +keywords = {Prediction, Fairness, Computational Indistinguishability}, +location = {Virtual, Italy}, +series = {STOC 2021} +} + + + + + +%isbn = {9781450369367}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%url = {https://doi.org/10.1145/3351095.3372872}, +@inproceedings{dpfair, +author = {Pujol, David and McKenna, Ryan and Kuppam, Satya and Hay, Michael and Machanavajjhala, Ashwin and Miklau, Gerome}, +title = {Fair Decision Making Using Privacy-Protected Data}, +year = {2020}, +doi = {10.1145/3351095.3372872}, +booktitle = {Conference on Fairness, Accountability, and Transparency}, +pages = {189–199}, +location = {Barcelona, Spain}, +series = {FAT* '20} +} + +%url={https://ojs.aaai.org/index.php/AAAI/article/view/17193}, +%month={May}, +@article{fairprivatelagrangian, +title={Differentially Private and Fair Deep Learning: A Lagrangian Dual Approach}, +volume={35}, +number={11}, +journal={AAAI Conference on Artificial Intelligence}, +author={Tran, Cuong and Fioretto, Ferdinando and Van Hentenryck, Pascal}, +year={2021}, +pages={9932-9939} +} + +%editor = {Chaudhuri, Kamalika and Salakhutdinov, Ruslan}, + %series = {Proceedings of Machine Learning Research}, + %month = {09--15 Jun}, + %publisher = {PMLR}, + %pdf = {http://proceedings.mlr.press/v97/jagielski19a/jagielski19a.pdf}, + %url = {https://proceedings.mlr.press/v97/jagielski19a.html} +@InProceedings{dpfairlearn, + title = {Differentially Private Fair Learning}, + author = {Jagielski, Matthew and Kearns, Michael and Mao, Jieming and Oprea, Alina and Roth, Aaron and -Malvajerdi, Saeed Sharifi and Ullman, Jonathan}, + booktitle = {International Conference on Machine Learning}, + pages = {3000--3008}, + year = {2019}, + volume = {97}, +} + +@incollection{dpaccdisp, +title = {Differential Privacy Has Disparate Impact on Model Accuracy}, +author = {Bagdasaryan, Eugene and Poursaeed, Omid and Shmatikov, Vitaly}, +booktitle = {Advances in Neural Information Processing Systems}, +pages = {15479--15488}, +year = {2019}} + +%isbn = {978-1-939133-06-9}, +%address = {Santa Clara, CA}, +%url = {https://www.usenix.org/conference/usenixsecurity19/presentation/jayaraman}, +%publisher = {USENIX Association}, +%month = aug, +@inproceedings {dpVacc, +author = {Bargav Jayaraman and David Evans}, +title = {Evaluating Differentially Private Machine Learning in Practice}, +booktitle = {USENIX Security Symposium}, +year = {2019}, +pages = {1895--1912}, +} + +%isbn = {9781450367110}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%url = {https://doi.org/10.1145/3314183.3323847}, +@inproceedings{cummings, +author = {Cummings, Rachel and Gupta, Varun and Kimpara, Dhamma and Morgenstern, Jamie}, +title = {On the Compatibility of Privacy and Fairness}, +year = {2019}, +doi = {10.1145/3314183.3323847}, +booktitle = {Conference on User Modeling, Adaptation and Personalization}, +pages = {309–315}, +location = {Larnaca, Cyprus}, +series = {UMAP'19 Adjunct} +} + + +@techreport{ec2019ethics, + address = {Brussels}, + author = {{High-Level Expert Group on AI}}, + institution = {European Commission}, + language = {eng}, + month = apr, + title = {Ethics guidelines for trustworthy AI}, + type = {Report}, + url = {https://ec.europa.eu/digital-single-market/en/news/ethics-guidelines-trustworthy-ai}, + year = {2019} +} + +@inproceedings{nist, + title={A Taxonomy and Terminology of Adversarial Machine Learning}, + author={Elham Tabassi and Kevin J. Burns and M. Hadjimichael and Andres Molina-Markham and Julian Sexton}, + url = {https://nvlpubs.nist.gov/nistpubs/ir/2019/NIST.IR.8269-draft.pdf}, + year={2019}, + booktitle = {NIST Interagency/Internal Report} +} + +@inproceedings{dpia, +title={Art. 35 {GDPR} Data protection impact assessment}, +url={https://gdpr-info.eu/art-35-gdpr/}, +author={European Union Law}, +year={2018}, +booktitle={General Data Protection Regulation (GDPR)} } + +@article{ico, +title={{AI} auditing and impact assessment: according to the UK information commissioner’s office}, ISSN={2730-5953, 2730-5961}, url={http://link.springer.com/10.1007/s43681-021-00039-2}, DOI={10.1007/s43681-021-00039-2}, +journal={AI and Ethics}, +author={Kazim, Emre and Denny, Danielle Mendes Thame and Koshiyama, Adriano}, +year={2021}, +month={Feb} } + +@inproceedings{whitehouse, +title={Guidance for Regulation of Artificial Intelligence Applications}, +url={https://www.whitehouse.gov/wp-content/uploads/2020/11/M-21-06.pdf}, +author={White House}, +year = {2020}, +booktitle={Memorandum For The Heads Of Executive Departments And Agencies} } + +%metrics + +@INPROCEEDINGS{memprivNattpriv, + author={Zhao, Benjamin Zi Hao and Agrawal, Aviral and Coburn, Catisha and Asghar, Hassan Jameel and Bhaskar, Raghav and Kaafar, Mohamed Ali and Webb, Darren and Dickinson, Peter}, + booktitle={IEEE European Symposium on Security and Privacy}, + title={On the (In)Feasibility of Attribute Inference Attacks on Machine Learning Models}, + year={2021}, + pages={232-251}, + doi={10.1109/EuroSP51992.2021.00025} +} + +@article{duddu2023sok, + title={SoK: Unintended Interactions among Machine Learning Defenses and Risks}, + author={Duddu, Vasisht and Szyller, Sebastian and Asokan, N}, + journal={arXiv preprint arXiv:2312.04542}, + year={2023} +} + + +@inproceedings{suri2023dissecting, + title={Dissecting distribution inference}, + author={Suri, Anshuman and Lu, Yifu and Chen, Yanjin and Evans, David}, + booktitle={2023 IEEE Conference on Secure and Trustworthy Machine Learning (SaTML)}, + pages={150--164}, + year={2023}, + organization={IEEE} +} + + +@article{de2020overview, + title={An overview of privacy in machine learning}, + author={De Cristofaro, Emiliano}, + journal={arXiv preprint arXiv:2005.08679}, + year={2020} +} + + +@article{pate2021fairness, + title={A Fairness Analysis on Private Aggregation of Teacher Ensembles}, + author={Tran, Cuong and Dinh, My H and Beiter, Kyle and Fioretto, Ferdinando}, + journal={arXiv preprint arXiv:2109.08630}, + year={2021} +} + +@article{fioretto2022differential, + title={Differential Privacy and Fairness in Decisions and Learning Tasks: A Survey}, + author={Fioretto, Ferdinando and Tran, Cuong and Van Hentenryck, Pascal and Zhu, Keyu}, + journal={arXiv preprint arXiv:2202.08187}, + year={2022} +} + + +% attribute inference attacks in ML +%publisher = "Institute of Electrical and Electronics Engineers (IEEE)", +%address = "United States", +@inproceedings{zhao2021infeasibility, +title = "On the (in)feasibility of attribute inference attacks on machine learning models", +author = "Zhao, {Benjamin Zi Hao} and Aviral Agrawal and Catisha Coburn and Asghar, {Hassan Jameel} and Raghav Bhaskar and Kaafar, {Mohamed Ali} and Darren Webb and Peter Dickinson", +year = "2021", +doi = "10.1109/EuroSP51992.2021.00025", +pages = "232--251", +booktitle = "IEEE European Symposium on Security and Privacy", +serie = {EuroS&P '2021}, +} + + +%isbn = {978-1-939133-31-1}, +%address = {Boston, MA}, +%url = {https://www.usenix.org/conference/usenixsecurity22/presentation/mehnaz}, +%publisher = {USENIX Association}, +%month = aug, +@inproceedings{MehnazAttInf, +author = {Shagufta Mehnaz and Sayanton V. Dibbo and Ehsanul Kabir and Ninghui Li and Elisa Bertino}, +title = {Are Your Sensitive Attributes Private? Novel Model Inversion Attribute Inference Attacks on Classification Models}, +booktitle = {USENIX Security Symposium}, +year = {2022}, +pages = {4579--4596}, +} + +%isbn = {9781450338325}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%%url = {https://doi.org/10.1145/2810103.2813677}, +@inproceedings{fredrikson1, +author = {Fredrikson, Matt and Jha, Somesh and Ristenpart, Thomas}, +title = {Model Inversion Attacks That Exploit Confidence Information and Basic Countermeasures}, +year = {2015}, +doi = {10.1145/2810103.2813677}, +booktitle = {ACM SIGSAC Conference on Computer and Communications Security}, +pages = {1322–1333}, +location = {Denver, Colorado, USA}, +series = {CCS '15} +} + + +%isbn = {9781931971157}, +@inproceedings{fredrikson2, +author = {Fredrikson, Matthew and Lantz, Eric and Jha, Somesh and Lin, Simon and Page, David and Ristenpart, Thomas}, +title = {Privacy in Pharmacogenetics: An End-to-End Case Study of Personalized Warfarin Dosing}, +year = {2014}, +booktitle = {USENIX Conference on Security Symposium}, +pages = {17–32}, +location = {San Diego, CA}, +series = {SEC'14} +} + +@inproceedings{Song2020Overlearning, +title={Overlearning Reveals Sensitive Attributes}, +author={Congzheng Song and Vitaly Shmatikov}, +booktitle={International Conference on Learning Representations}, +year={2020} +} + + +%isbn = {9781450384544}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%url = {https://doi.org/10.1145/3460120.3484533}, +@inproceedings{malekzadeh2021honestbutcurious, +author = {Malekzadeh, Mohammad and Borovykh, Anastasia and G\"{u}nd\"{u}z, Deniz}, +title = {Honest-but-Curious Nets: Sensitive Attributes of Private Inputs Can Be Secretly Coded into the Classifiers' Outputs}, +year = {2021}, +doi = {10.1145/3460120.3484533}, +booktitle = {ACM SIGSAC Conference on Computer and Communications Security}, +pages = {825–844}, +location = {Virtual Event, Republic of Korea}, +series = {CCS '21} +} + + +@article{jayaraman2022attribute, + title={Are Attribute Inference Attacks Just Imputation?}, + author={Jayaraman, Bargav and Evans, David}, + journal={arXiv preprint arXiv:2209.01292}, + year={2022} +} + + +@inproceedings{yeom, + author={Yeom, Samuel and Giacomelli, Irene and Fredrikson, Matt and Jha, Somesh}, + booktitle={IEEE Computer Security Foundations Symposium}, + title={Privacy Risk in Machine Learning: Analyzing the Connection to Overfitting}, + year={2018}, + pages={268-282}, + doi={10.1109/CSF.2018.00027} +} + + +@inproceedings{Mahajan2020DoesLS, + title={Does Learning Stable Features Provide Privacy Benefits for Machine Learning Models?}, + author={Divyat Mahajan, Shruti Tople, Amit Sharma}, + booktitle = {NeurIPS PPML Workshop}, + year={2020} +} + +@inproceedings{Malekzadeh_2021, + doi = {10.1145/3460120.3484533}, + url = {https://doi.org/10.1145%2F3460120.3484533}, + year = 2021, month = {nov}, + publisher = {{ACM}}, + author = {Mohammad Malekzadeh and Anastasia Borovykh and Deniz Gündüz}, + title = {Honest-but-Curious Nets: Sensitive Attributes of Private Inputs Can Be Secretly Coded into the Classifiers{\textquotesingle} Outputs}, + booktitle = {Proceedings of the 2021 {ACM} {SIGSAC} Conference on Computer and Communications Security}} + + + +@INPROCEEDINGS{meminf, + author={Shokri, Reza and Stronati, Marco and Song, Congzheng and Shmatikov, Vitaly}, + booktitle={2017 IEEE Symposium on Security and Privacy (SP)}, + title={Membership Inference Attacks Against Machine Learning Models}, + year={2017}, + pages={3-18}, + doi={10.1109/SP.2017.41}} + +@article{chang2021privacy, + title={On the Privacy Risks of Algorithmic Fairness}, + author={Hongyang Chang and R. Shokri}, + journal={{2021 }IEEE European Symposium on Security and Privacy}, + year={2021}, + pages={292-303} +} + +@article{duddu2022inferring, + title={Inferring Sensitive Attributes from Model Explanations}, + author={Duddu, Vasisht and Boutet, Antoine}, + journal={arXiv preprint arXiv:2208.09967}, + year={2022} +} + +%editor = {H. Larochelle and M. Ranzato and R. Hadsell and M. F. Balcan and H. Lin}, + %publisher = {Curran Associates, Inc.}, + %url = {https://proceedings.neurips.cc/paper/2020/file/6b8b8e3bd6ad94b985c1b1f1b7a94cb2-Paper.pdf}, +@inproceedings{NEURIPS2020_6b8b8e3b, + author = {Zhao, Han and Chi, Jianfeng and Tian, Yuan and Gordon, Geoffrey J}, + booktitle = {Advances in Neural Information Processing Systems}, + pages = {9485--9496}, + title = {Trade-offs and Guarantees of Adversarial Representation Learning for Information Obfuscation}, + volume = {33}, + year = {2020} +} + + + +@ARTICLE{8515092, +author={S. A. {Osia} and A. {Taheri} and A. S. {Shamsabadi} and K. {Katevas} and H. {Haddadi} and H. R. {Rabiee}}, +journal={IEEE Transactions on Knowledge and Data Engineering}, +title={Deep Private-Feature Extraction}, +year={2020}, +volume={32}, +number={1}, +pages={54-66}, +} + + + +%eprint = {1707.00075} +@article{advfair, + author = {Alex Beutel and Jilin Chen and Zhe Zhao and Ed H. Chi}, + title = {Data Decisions and Theoretical Implications when Adversarially Learning Fair Representations}, + year = {2017}, + publisher = {arXiv}, + doi = {10.48550/ARXIV.1707.00075}, +} + +%property inference attack + +@article{propinf, + title={Dataset-Level Attribute Leakage in Collaborative Learning}, + author={Zhang, Wanrong and Tople, Shruti and Ohrimenko, Olga}, + journal={arXiv:2006.07267}, + year={2020} +} + +%month = sep, +@article{propinf2, +author = {Ateniese, Giuseppe and Mancini, Luigi V. and Spognardi, Angelo and Villani, Antonio and Vitali, Domenico and Felici, Giovanni}, +title = {Hacking Smart Machines with Smarter Ones: How to Extract Meaningful Data from Machine Learning Classifiers}, +year = {2015}, +volume = {10}, +number = {3}, +journal = {Int. J. Secur. Netw.}, +pages = {137–150} +} + + +%isbn = {9781450356930}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%url = {https://doi.org/10.1145/3243734.3243834}, +@inproceedings{propinf3, +author = {Ganju, Karan and Wang, Qi and Yang, Wei and Gunter, Carl A. and Borisov, Nikita}, +title = {Property Inference Attacks on Fully Connected Neural Networks Using Permutation Invariant Representations}, +year = {2018}, +doi = {10.1145/3243734.3243834}, +booktitle = {ACM SIGSAC Conference on Computer and Communications Security}, +pages = {619–633}, +location = {Toronto, Canada}, +series = {CCS '18} +} + +@article{propinf4, + title={Formalizing and Estimating Distribution Inference Risks}, + author={Suri, Anshuman and Evans, David}, + journal={Proceedings on Privacy Enhancing Technologies}, + year={2022} +} + +@inproceedings{fedinference, +author={L. {Melis} and C. {Song} and E. {De Cristofaro} and V. {Shmatikov}}, +booktitle={IEEE Symposium on Security and Privacy}, +title={Exploiting Unintended Feature Leakage in Collaborative Learning}, +year={2019}, +pages={691-706} +} + +@INPROCEEDINGS {ferryExploit, +author = {J. Ferry and U. Aivodji and S. Gambs and M. Huguet and M. Siala}, +booktitle = {2023 IEEE Conference on Secure and Trustworthy Machine Learning (SaTML)}, +title = {Exploiting Fairness to Enhance Sensitive Attributes Reconstruction}, +year = {2023}, +volume = {}, +issn = {}, +pages = {18-41}, +keywords = {training;measurement;learning systems;privacy;pipelines;training data;machine learning}, +doi = {10.1109/SaTML54575.2023.00012}, +url = {https://doi.ieeecomputersociety.org/10.1109/SaTML54575.2023.00012}, +publisher = {IEEE Computer Society}, +address = {Los Alamitos, CA, USA}, +month = {feb} +} + + + + +% defences against attribute inference attacks + +@inproceedings{10.5555/3042817.3042973, +author = {Zemel, Richard and Wu, Yu and Swersky, Kevin and Pitassi, Toniann and Dwork, Cynthia}, +title = {Learning Fair Representations}, +year = {2013}, +booktitle = {International Conference on Machine Learning}, +serie = {ICML '13}, +} + +%month = jan, +@article{10.5555/3122009.3208010, +author = {Hamm, Jihun}, +title = {Minimax Filter: Learning to Preserve Privacy from Inference Attacks}, +year = {2017}, +volume = {18}, +number = {1}, +journal = {J. Mach. Learn. Res.}, +pages = {4704–4734} +} + +@inproceedings{10.5555/3327546.3327583, +author = {Moyer, Daniel and Gao, Shuyang and Brekelmans, Rob and Steeg, Greg Ver and Galstyan, Aram}, +title = {Invariant Representations without Adversarial Training}, +year = {2018}, +booktitle = {Advances in Neural Information Processing Systems} +} + +@inproceedings{10.5555/3294771.3294827, +author = {Xie, Qizhe and Dai, Zihang and Du, Yulun and Hovy, Eduard and Neubig, Graham}, +title = {Controllable Invariance through Adversarial Feature Learning}, +year = {2017}, +booktitle = {Advances in Neural Information Processing Systems} +} + +@InProceedings{pmlr-v80-madras18a, + title = {Learning Adversarially Fair and Transferable Representations}, + author = {Madras, David and Creager, Elliot and Pitassi, Toniann and Zemel, Richard}, + pages = {3384--3393}, + year = {2018}, + volume = {80}, + booktitle = {Proceedings of Machine Learning Research}, +} + +@inproceedings{censoringadv, +title = "Censoring Representations with an Adversary", +author = "Harrison Edwards and Amos Storkey", +year = "2016", +booktitle = {International Conference on Learning Representations} +} +@inproceedings{NIPS2017_48ab2f9b, + author = {Louppe, Gilles and Kagan, Michael and Cranmer, Kyle}, + booktitle = {Advances in Neural Information Processing Systems}, + editor = {I. Guyon and U. Von Luxburg and S. Bengio and H. Wallach and R. Fergus and S. Vishwanathan and R. Garnett}, + pages = {}, + publisher = {Curran Associates, Inc.}, + title = {Learning to Pivot with Adversarial Networks}, + url = {https://proceedings.neurips.cc/paper_files/paper/2017/file/48ab2f9b45957ab574cf005eb8a76760-Paper.pdf}, + volume = {30}, + year = {2017} +} + + +%isbn = {9781450360128}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%url = {https://doi.org/10.1145/3278721.3278779}, +@inproceedings{debiase, +author = {Zhang, Brian Hu and Lemoine, Blake and Mitchell, Margaret}, +title = {Mitigating Unwanted Biases with Adversarial Learning}, +year = {2018}, +doi = {10.1145/3278721.3278779}, +booktitle = {AAAI/ACM Conference on AI, Ethics, and Society}, +pages = {335–340}, +location = {New Orleans, LA, USA}, +series = {AIES '18} +} + + %month = {10}, +%pages = {}, +@article{preprocessing, +author = {Kamiran, Faisal and Calders, Toon}, +year = {2011}, +title = {Data Pre-Processing Techniques for Classification without Discrimination}, +volume = {33}, +journal = {Knowledge and Information Systems}, +doi = {10.1007/s10115-011-0463-8} +} + +%series = {Proceedings of Machine Learning Research}, + %month = {10--15 Jul}, + %publisher = {PMLR}, + %pdf = {http://proceedings.mlr.press/v80/agarwal18a/agarwal18a.pdf}, + %url = {https://proceedings.mlr.press/v80/agarwal18a.html}, +@InProceedings{reductions, + title = {A Reductions Approach to Fair Classification}, + author = {Agarwal, Alekh and Beygelzimer, Alina and Dudik, Miroslav and Langford, John and Wallach, Hanna}, + booktitle = {International Conference on Machine Learning}, + pages = {60--69}, + year = {2018}, + volume = {80}, +} + +@article{kifer2014pufferfish, +author = {Kifer, Daniel and Machanavajjhala, Ashwin}, +title = {Pufferfish: A framework for mathematical privacy definitions}, +year = {2014}, +issue_date = {January 2014}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +volume = {39}, +number = {1}, +issn = {0362-5915}, +url = {https://doi.org/10.1145/2514689}, +doi = {10.1145/2514689}, +journal = {ACM Trans. Database Syst.}, +month = {jan}, +articleno = {3}, +numpages = {36}, +keywords = {Privacy, differential privacy} +} + +@inproceedings{song2017pufferfish, + title={Pufferfish privacy mechanisms for correlated data}, + author={Song, Shuang and Wang, Yizhen and Chaudhuri, Kamalika}, + booktitle={Proceedings of the 2017 ACM International Conference on Management of Data}, + pages={1291--1306}, + year={2017} +} + +@article{grinsztajn2022tree, + title={Why do tree-based models still outperform deep learning on typical tabular data?}, + author={Grinsztajn, L{\'e}o and Oyallon, Edouard and Varoquaux, Ga{\"e}l}, + journal={Advances in neural information processing systems}, + volume={35}, + pages={507--520}, + year={2022} +} + + + +@inproceedings {attriguard, +author = {Jinyuan Jia and Neil Zhenqiang Gong}, +title = {AttriGuard: A Practical Defense Against Attribute Inference Attacks via Adversarial Machine Learning}, +booktitle = {USENIX Security}, +year = {2018}, +pages = {513--529}, +} + + +% fairness metrics + +@article{fairmetric, +author = {Muhammad Bilal Zafar and Isabel Valera and Manuel Gomez-Rodriguez and Krishna P. Gummadi}, +title = {Fairness Constraints: A Flexible Approach for Fair Classification}, +journal = {Journal of Machine Learning Research}, +year = {2019}, +volume = {20}, +number = {75}, +pages = {1-42} +} + +@inproceedings{fairmetric2, +author = {Hardt, Moritz and Price, Eric and Srebro, Nathan}, +title = {Equality of Opportunity in Supervised Learning}, +year = {2016}, +booktitle = {Advances in Neural Information Processing Systems}, +pages = {3323–3331} +} + +@article{fairjustice, +author = {Alikhademi, Kiana and Drobina, Emma and Prioleau, Diandra and Richardson, Brianna and Purves, Duncan and Gilbert, Juan E.}, +title = {A Review of Predictive Policing from the Perspective of Fairness}, +year = {2022}, +issue_date = {Mar 2022}, +publisher = {Kluwer Academic Publishers}, +address = {USA}, +volume = {30}, +number = {1}, +issn = {0924-8463}, +url = {https://doi.org/10.1007/s10506-021-09286-4}, +doi = {10.1007/s10506-021-09286-4}, +journal = {Artif. Intell. Law}, +month = {mar}, +pages = {1–17}, +numpages = {17}, +keywords = {Predictive policing, Algorithmic fairness, Fairness, AI in criminal justice} +} + + +@article{folk, + title={Retiring Adult: New Datasets for Fair Machine Learning}, + author={Ding, Frances and Hardt, Moritz and Miller, John and Schmidt, Ludwig}, + journal={Advances in Neural Information Processing Systems}, + volume={34}, + year={2021} +} + +@inproceedings{ + SDV, + title={The Synthetic data vault}, + author={Patki, Neha and Wedge, Roy and Veeramachaneni, Kalyan}, + booktitle={IEEE International Conference on Data Science and Advanced Analytics (DSAA)}, + year={2016}, + pages={399-410}, + doi={10.1109/DSAA.2016.49}, + month={Oct} +} + +@misc{dpbad, + doi = {10.48550/ARXIV.1104.3913}, + + url = {https://arxiv.org/abs/1104.3913}, + + author = {Dwork, Cynthia and Hardt, Moritz and Pitassi, Toniann and Reingold, Omer and Zemel, Rich}, + + keywords = {Computational Complexity (cs.CC), Computers and Society (cs.CY), FOS: Computer and information sciences, FOS: Computer and information sciences}, + + title = {Fairness Through Awareness}, + + publisher = {arXiv}, + + year = {2011}, + + copyright = {arXiv.org perpetual, non-exclusive license} +} + +@INPROCEEDINGS{fairlog, + + author={Radovanović, Sandro and Petrović, Andrija and Delibašić, Boris and Suknović, Milija}, + + booktitle={2020 International Conference on INnovations in Intelligent SysTems and Applications (INISTA)}, + + title={Enforcing fairness in logistic regression algorithm}, + + year={2020}, + + volume={}, + + number={}, + + pages={1-7}, + + doi={10.1109/INISTA49547.2020.9194676}} + + +@misc{fairreg, + title={Fair Regression: Quantitative Definitions and Reduction-based Algorithms}, + author={Alekh Agarwal and Miroslav Dudík and Zhiwei Steven Wu}, + year={2019}, + eprint={1905.12843}, + archivePrefix={arXiv}, + primaryClass={cs.LG} +} + + + +@InProceedings{fairaudit1, + title = {Blind Justice: Fairness with Encrypted Sensitive Attributes}, + author = {Kilbertus, Niki and Gascon, Adria and Kusner, Matt and Veale, Michael and Gummadi, Krishna and Weller, Adrian}, + booktitle = {Proceedings of the 35th International Conference on Machine Learning}, + pages = {2630--2639}, + year = {2018}, + editor = {Dy, Jennifer and Krause, Andreas}, + volume = {80}, + series = {Proceedings of Machine Learning Research}, + month = {10--15 Jul}, + publisher = {PMLR}, + pdf = {http://proceedings.mlr.press/v80/kilbertus18a/kilbertus18a.pdf}, + url = {https://proceedings.mlr.press/v80/kilbertus18a.html}, +} + + +@inproceedings{fairaudit2, +author = {Park, Saerom and Kim, Seongmin and Lim, Yeon-sup}, +title = {Fairness Audit of Machine Learning Models with Confidential Computing}, +year = {2022}, +isbn = {9781450390965}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +url = {https://doi.org/10.1145/3485447.3512244}, +doi = {10.1145/3485447.3512244}, +booktitle = {Proceedings of the ACM Web Conference 2022}, +pages = {3488–3499}, +numpages = {12}, +keywords = {Confidential computing, Algorithmic audit, Security and privacy, Fairness}, +location = {Virtual Event, Lyon, France}, +series = {WWW '22} +} + +@inproceedings{fairaudit3, +author = {Segal, Shahar and Adi, Yossi and Pinkas, Benny and Baum, Carsten and Ganesh, Chaya and Keshet, Joseph}, +title = {Fairness in the Eyes of the Data: Certifying Machine-Learning Models}, +year = {2021}, +isbn = {9781450384735}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +url = {https://doi.org/10.1145/3461702.3462554}, +doi = {10.1145/3461702.3462554}, +booktitle = {Proceedings of the 2021 AAAI/ACM Conference on AI, Ethics, and Society}, +pages = {926–935}, +numpages = {10}, +keywords = {machine-learning, cryptography, privacy, fairness}, +location = {Virtual Event, USA}, +series = {AIES '21} +} + +@article{yadav2024fairproof, + title={FairProof: Confidential and Certifiable Fairness for Neural Networks}, + author={Yadav, Chhavi and Chowdhury, Amrita Roy and Boneh, Dan and Chaudhuri, Kamalika}, + journal={arXiv preprint arXiv:2402.12572}, + year={2024} +} + +@inproceedings{khedr2023certifair, + title={Certifair: A framework for certified global fairness of neural networks}, + author={Khedr, Haitham and Shoukry, Yasser}, + booktitle={Proceedings of the AAAI Conference on Artificial Intelligence}, + volume={37}, + number={7}, + pages={8237--8245}, + year={2023} +} + +@article{urban20, +author = {Urban, Caterina and Christakis, Maria and W\"{u}stholz, Valentin and Zhang, Fuyuan}, +title = {Perfectly parallel fairness certification of neural networks}, +year = {2020}, +issue_date = {November 2020}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +volume = {4}, +number = {OOPSLA}, +journal = {Proc. ACM Program. Lang.}, +month = {nov}, +articleno = {185}, +numpages = {30}, +keywords = {Static Analysis, Neural Networks, Fairness, Abstract Interpretation} +} + +@inproceedings{ +chugg2023auditing, +title={Auditing Fairness by Betting}, +author={Ben Chugg and Santiago Cortes-Gomez and Bryan Wilder and Aaditya Ramdas}, +booktitle={Thirty-seventh Conference on Neural Information Processing Systems}, +year={2023}, +url={https://openreview.net/forum?id=EEVpt3dJQj} +} + +@inproceedings{yan2022active, + title={Active fairness auditing}, + author={Yan, Tom and Zhang, Chicheng}, + booktitle={International Conference on Machine Learning}, + pages={24929--24962}, + year={2022}, + organization={PMLR} +} + +@article{de2024fairness, + title={Fairness Auditing with Multi-Agent Collaboration}, + author={de Vos, Martijn and Dhasade, Akash and Bourr{\'e}e, Jade Garcia and Kermarrec, Anne-Marie and Merrer, Erwan Le and Rottembourg, Benoit and Tredan, Gilles}, + journal={arXiv preprint arXiv:2402.08522}, + year={2024} +} + +@inproceedings{ghosh2022algorithmic, + title={Algorithmic fairness verification with graphical models}, + author={Ghosh, Bishwamittra and Basu, Debabrota and Meel, Kuldeep S}, + booktitle={Proceedings of the AAAI Conference on Artificial Intelligence}, + volume={36}, + number={9}, + pages={9539--9548}, + year={2022} +} + +@inproceedings{ghosh2023biased, + title={“How Biased are Your Features?”: Computing Fairness Influence Functions with Global Sensitivity Analysis}, + author={Ghosh, Bishwamittra and Basu, Debabrota and Meel, Kuldeep S}, + booktitle={Proceedings of the 2023 ACM Conference on Fairness, Accountability, and Transparency}, + pages={138--148}, + year={2023} +} + +@article{FairSquare, +author = {Albarghouthi, Aws and D'Antoni, Loris and Drews, Samuel and Nori, Aditya V.}, +title = {FairSquare: probabilistic verification of program fairness}, +year = {2017}, +issue_date = {October 2017}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +volume = {1}, +number = {OOPSLA}, +url = {https://doi.org/10.1145/3133904}, +doi = {10.1145/3133904}, +journal = {Proc. ACM Program. Lang.}, +month = {oct}, +articleno = {80}, +numpages = {30}, +keywords = {Algorithmic Fairness, Probabilistic Inference, Probabilistic Programming} +} + +@article{saleiro2018aequitas, + title={Aequitas: A bias and fairness audit toolkit}, + author={Saleiro, Pedro and Kuester, Benedict and Hinkson, Loren and London, Jesse and Stevens, Abby and Anisfeld, Ari and Rodolfa, Kit T and Ghani, Rayid}, + journal={arXiv preprint arXiv:1811.05577}, + year={2018} +} + +@article{bastani2019probabilistic, + title={Probabilistic verification of fairness properties via concentration}, + author={Bastani, Osbert and Zhang, Xin and Solar-Lezama, Armando}, + journal={Proceedings of the ACM on Programming Languages}, + volume={3}, + number={OOPSLA}, + pages={1--27}, + year={2019}, + publisher={ACM New York, NY, USA} +} + +@article{adler2018auditing, + title={Auditing black-box models for indirect influence}, + author={Adler, Philip and Falk, Casey and Friedler, Sorelle A and Nix, Tionney and Rybeck, Gabriel and Scheidegger, Carlos and Smith, Brandon and Venkatasubramanian, Suresh}, + journal={Knowledge and Information Systems}, + volume={54}, + pages={95--122}, + year={2018}, + publisher={Springer} +} + +@inproceedings{black2020fliptest, + title={Fliptest: fairness testing via optimal transport}, + author={Black, Emily and Yeom, Samuel and Fredrikson, Matt}, + booktitle={Proceedings of the 2020 Conference on Fairness, Accountability, and Transparency}, + pages={111--121}, + year={2020} +} + +@article{Justicia, +title={Justicia: A Stochastic SAT Approach to Formally Verify Fairness}, +volume={35}, +url={https://ojs.aaai.org/index.php/AAAI/article/view/16925}, DOI={10.1609/aaai.v35i9.16925}, +number={9}, journal={Proceedings of the AAAI Conference on Artificial Intelligence}, author={Ghosh, Bishwamittra and Basu, Debabrota and Meel, Kuldeep S.}, year={2021}, month={May}, pages={7554-7563} } \ No newline at end of file diff --git a/ACSAC/proofs/proof_advdebias.tex b/ACSAC/proofs/proof_advdebias.tex new file mode 100644 index 0000000..06212a0 --- /dev/null +++ b/ACSAC/proofs/proof_advdebias.tex @@ -0,0 +1,30 @@ +Definition~\ref{def:dp} of \dempar can be written synthetically as the following property: +$P_{\hat{Y},S}=P_{\hat{Y}}\otimes P_{S}$. +Where $P_{\hat{Y}}\otimes P_{S}$ is the product measure defined as the unique measure on +$\mathcal{P}(\mathcal{Y})\times\mathcal{P}(\mathcal{S})$ such that +$\forall y\in\mathcal{P}(\mathcal{Y})\forall s\in\mathcal{P}(\mathcal{S})\quad P_{\hat{Y}}\otimes P_{S}(y\times s) = P_{\hat{Y}}(y)P_{S}(s)$. +This is equivalent to definition~\ref{def:dp} for binary labels and sensitive attribute but more general because when $\hat{Y}$ is not binary as in soft labels, this new definition is well defined. +% We write formally +\begin{definition} +\label{def:dps} + $\hat{Y}$ satisfies extended \dempar for $S$ if and only if: $P_{\hat{Y},S}=P_{\hat{Y}}\otimes P_{S}$. +\end{definition} +This definition is the same as the statistical parity introduced for fair regression~\cite{fairreg}. +Note that we can not derive a quantity similar to \demparlevel with this definition but this extended \dempar assures indistinguishably of the sensitive attribute when looking at the soft labels. +We have the following theorem: +\begin{theorem}\label{th:advdebias} + The following propositions are equivalent: ``$\hat{Y}_s$ is independent of $S$'' and ``Balanced accuracy of \aia in \ref{tm:soft} is $\frac{1}{2}$'' +\end{theorem} +\begin{proof} +Let's show that it is equivalent to say "all attack models have a balanced accuracy of 0.5" and "the target model satisfies extended demographic parity". +{\footnotesize + \begin{align*} + &\forall a~P(\hat{Y}\in a^{-1}(\{0\})|S=0)+P(\hat{Y}\in a^{-1}(\{1\})|S=1) = 1\\ + \Leftrightarrow&\forall a~P(\hat{Y}\in a^{-1}(\{0\})|S=0)=P(\hat{Y}\in a^{-1}(\{0\})|S=1)\\ + \Leftrightarrow&\forall A~P(\hat{Y}\in A)|S=0)=P(\hat{Y}\in A|S=1) \\ + \Leftrightarrow &P_{\hat{Y},S}=P_{\hat{Y}}\otimes P_{S} + \end{align*} + } +\end{proof} + +%In conclusion, with extended \dempar we can not unconditionally bound the balanced accuracy of the attack without introducing distances in the space of distributions, but it gives us a condition to protect the sensitive attribute in case of an adversary gaining access to soft labels (AS). \ No newline at end of file diff --git a/ACSAC/proofs/proof_egd_dp.tex b/ACSAC/proofs/proof_egd_dp.tex new file mode 100644 index 0000000..d0f23f6 --- /dev/null +++ b/ACSAC/proofs/proof_egd_dp.tex @@ -0,0 +1,33 @@ +\begin{theorem} +\label{th:dpgood} +Maximum attack accuracy achievable by \aia in \ref{tm:hard} is equal to $\frac{1}{2}(1+\text{\demparlevel of }\targetmodel)$. +\end{theorem} +\begin{proof} +The set $B$ of function from $\{0,1\}$ to $\{0,1\}$ contains four elements: $b_0=0$, $b_1=id$, $b_2=1-id$ and $b,3=1$, where $\forall x, id(x) = x$. +For every $b\in B$ the balanced \aia accuracy is +$BA(b) = \frac{1}{2}(P(b\circ \hat{Y}=0|S=0) + P(b\circ \hat{Y}=1|S=1))$. +We have $BA(b_0) = BA(b_3) = \frac{1}{2}$, hence, we can discard those elements when solving the attack optimisation problem. +This problem writes $\text{max}_{b\in B}B(A(b)) = \text{max}(BA(b_1), BA(b_2))$. +We remark that $b_1\circ \hat{Y}=\hat{Y}$ and $b_2\circ \hat{Y}=1 - \hat{Y}$. +Hence, +{\footnotesize +\begin{align*} + BA(b_1) &= \frac{1}{2}(P(\hat{Y}=0|S=0) + P(\hat{Y}=1|S=1))\\ + &=\frac{1}{2}(1+P(\hat{Y}=1|S=1) - P(\hat{Y}=1|S=0))\\ + BA(b_2)&=\frac{1}{2}(1+P(\hat{Y}=1|S=0) - P(\hat{Y}=1|S=1)) +\end{align*} +} +Thus, +{\footnotesize +\begin{align*} + &\text{max}_{b\in B}BA(b) + = \frac{1}{2}\left(1+\text{max}\left( + \begin{matrix} + P(\hat{Y}=0|S=0) -P(\hat{Y}=1|S=1)\\ + P(\hat{Y}=1|S=0) -P(\hat{Y}=0|S=1) + \end{matrix} + \right)\right)\\ + =&\frac{1}{2}(1+|P(\hat{Y}=1|S=1) - P(\hat{Y}=1|S=0)|) +\end{align*} +} +\end{proof} diff --git a/ACSAC/proofs/proof_egd_eo.tex b/ACSAC/proofs/proof_egd_eo.tex new file mode 100644 index 0000000..435add2 --- /dev/null +++ b/ACSAC/proofs/proof_egd_eo.tex @@ -0,0 +1,35 @@ +\begin{theorem} +\label{th:eoo} +If $\hat{Y}$ satisfies \eo for $Y$ and $S$ then the balanced accuracy of \aia in \ref{tm:hard} is $\frac{1}{2}$ iff $Y$ is independent of $S$ or $\hat{Y}$ is independent of $Y$. +\end{theorem} + +\begin{proof} +Let $\attackmodel$ be the attack model trained for AS: $\hat{S}=a\circ \hat{Y}$. +By the total probability formula +{\footnotesize +\begin{align*} +P(\hat{S}=0|S=0)=&P(\hat{S}=0|S=0Y=0)P(Y=0|S=0)\\ ++&P(\hat{S}=0|S=0Y=1)P(Y=1|S=0) +\end{align*} +} +and as well +{\footnotesize +\begin{align*} +P(\hat{S}=1|S=1)=&P(\hat{S}=1|S=1Y=0)P(Y=0|S=1)\\ + +&P(\hat{S}=1|S=1Y=1)P(Y=1|S=1) +\end{align*} +} +Then we substitute those terms in the definition of the balanced accuracy of $\targetmodel$. +{\footnotesize +\begin{align*} + &\frac{P(\hat{S}=0|S=0)+P(\hat{S}=1|S=1)}{2}\\ + =&\frac{1}{2}+\frac{1}{2}\left(P(Y=0|S=0)-P(Y=0|S=1)\right)\\ + &\left(P(\hat{Y}\in \attackmodel^{-1}(\{1\})|S=1Y=0) - + P(\hat{Y}\in \attackmodel^{-1}(\{1\})|S=1Y=1)\right) +\end{align*} +} +The balanced accuracy is equal to 0.5 if and only if $P(Y=0|S=0)=P(Y=0|S=1)$ +or $\forall \attackmodel~P(\hat{Y}\in \attackmodel^{-1}(\{1\})|S=1Y=0)=P(\hat{Y}\in \attackmodel^{-1}(\{1\})|S=1Y=1)$. +The first term indicates that $Y$ is independent of $S$ and the second term indicates that $S=1$ the $\targetmodel$ random guess utility. +We can do the same computing for $S=0$ and obtain a similar conclusion. +\end{proof} \ No newline at end of file diff --git a/ACSAC/tables/tab_attack.tex b/ACSAC/tables/tab_attack.tex new file mode 100644 index 0000000..51974df --- /dev/null +++ b/ACSAC/tables/tab_attack.tex @@ -0,0 +1,30 @@ +\begin{table}[!htb] +%\vspace{-3mm} +\caption{\adaptiveAIAHard and \adaptiveAIASoft outperform their respective baselines. We report attack accuracy over ten runs.} +\begin{center} +%\footnotesize +\scriptsize +\begin{tabular}{ l | c | c } +\hline +\rowcolor{LightCyan} & \multicolumn{2}{c}{\ref{tm:hard}}\\ +\rowcolor{LightCyan} \textbf{Dataset} & \textbf{Baseline ($\upsilon$=0.50)} & \textbf{\adaptiveAIAHard}\\ +\rowcolor{LightCyan} & \textbf{\race} | \textbf{\sex}& \textbf{\race} | \textbf{\sex}\\ +\textbf{\census} & 0.50 $\pm$ 0.00 | 0.50 $\pm$ 0.00& \textbf{0.56 $\pm$ 0.01} | \textbf{0.58 $\pm$ 0.01} \\ +\textbf{\compas}& \textbf{0.62 $\pm$ 0.03} | 0.50 $\pm$ 0.00& \textbf{0.62 $\pm$ 0.03} | \textbf{0.57 $\pm$ 0.03} \\ +\textbf{\meps} & 0.51 $\pm$ 0.01 | \textbf{0.55 $\pm$ 0.02} & \textbf{0.53 $\pm$ 0.01} | \textbf{0.55 $\pm$ 0.01} \\ +\textbf{\lfw} & 0.59 $\pm$ 0.00 | 0.64 $\pm$ 0.15& \textbf{0.61 $\pm$ 0.11} | \textbf{0.78 $\pm$ 0.05} \\ +\hline +\rowcolor{LightCyan} & \multicolumn{2}{c}{\ref{tm:soft}} \\ +\rowcolor{LightCyan} \textbf{Dataset} & \textbf{Baseline ($\upsilon$=0.50)} & \textbf{\adaptiveAIASoft} \\ + \rowcolor{LightCyan} & \textbf{\race} | \textbf{\sex} & \textbf{\race} | \textbf{\sex}\\ +\hline +\textbf{\census}& 0.50 $\pm$ 0.02 | 0.56 $\pm$ 0.04 & \textbf{0.61 $\pm$ 0.02} | \textbf{0.68 $\pm$ 0.01} \\ +\textbf{\compas}& \textbf{0.62 $\pm$ 0.03} | 0.50 $\pm$ 0.00 & \textbf{0.62 $\pm$ 0.03} | \textbf{0.57 $\pm$ 0.03} \\ +\textbf{\meps} & 0.52 $\pm$ 0.02 | 0.55 $\pm$ 0.02 & \textbf{0.60 $\pm$ 0.02} | \textbf{0.62 $\pm$ 0.02}\\ +\textbf{\lfw} & 0.50 $\pm$ 0.10 | \textbf{0.77 $\pm$ 0.07} & \textbf{0.61 $\pm$ 0.10} | \textbf{0.79 $\pm$ 0.05}\\ +\hline +\end{tabular} +\end{center} +\label{tab:global_threshold_withoutsattr} +%\vspace{-5mm} +\end{table} \ No newline at end of file diff --git a/ACSAC/tables/tab_datasets.tex b/ACSAC/tables/tab_datasets.tex new file mode 100644 index 0000000..3dfe024 --- /dev/null +++ b/ACSAC/tables/tab_datasets.tex @@ -0,0 +1,17 @@ +\begin{table}[htb] +\caption{Summary of dataset splits: $\traindata$ to train $\targetmodel$, $\testdata$ to evaluate $\targetmodel$, $\auxtraindata$ to train $\attackmodel$, and $\auxtestdata$ to evaluate $\attackmodel$.} +\footnotesize +\begin{center} +\begin{tabular}{ l | c | c | c | c} +\hline + \textbf{Dataset} & $\traindata$ & $\testdata$ & $\auxtraindata$ & $\auxtestdata$\\ + \hline + \textbf{\census} & 24,752 & 6,188 & 4,950 & 1,238 \\ + \textbf{\compas} & 4,937 & 1,235 & 988 & 247\\ + \textbf{\meps} & 12,664 & 3,166 & 2,532 & 634\\ + \textbf{\lfw} & 10514 & 2629 & 2103 & 526\\ + \hline +\end{tabular} +\end{center} +\label{tab:summary} +\end{table} \ No newline at end of file diff --git a/ACSAC/tables/tab_summary.tex b/ACSAC/tables/tab_summary.tex new file mode 100644 index 0000000..f9598a4 --- /dev/null +++ b/ACSAC/tables/tab_summary.tex @@ -0,0 +1,32 @@ +\setlength\tabcolsep{3pt} +\begin{table*}[!htb] +\caption{Comparison of prior \aia{s}: attack vector exploited (e.g., $\targetmodel(X(\omega))$, $X(\omega)$, $Y(\omega)$, distribution over $S$ ($P_S$) and confusion matrix $C(Y,\targetmodel\circ X)$), whether $S$ is censored, i.e., included in $\traindata$ and inputs, whether \aia{s} account for class imbalance in $S$, whether \adv is active or passive and whether the threat model is blackbox or whitebox.} +\begin{center} +\footnotesize +% \resizebox{\textwidth}{!}{% +\begin{tabular}{ |c|c|c|c|c|c| } + \hline + \rowcolor{LightCyan} + \textbf{Literature} & \textbf{Attack Vector} & \textbf{Is $S$ censored?} & \textbf{Imbalance in $S$?} & \textbf{\adv} & \textbf{Threat Model} \\ + \hline + \rowcolor{LightCyan} + \multicolumn{6}{|c|}{\textbf{Imputation-based Attacks}}\\ + \hline + \textbf{Fredrikson et al.}~\cite{fredrikson2} & $X$, $Y$, $\targetmodel\circ X$, \textbf{$P_S$}, $C(Y,\targetmodel\circ X$) & $\checkmark$ & $\times$ & Passive & Blackbox\\ + \textbf{Yeom et al.}~\cite{yeom} & $X$, $Y$, $\targetmodel$, \textbf{$P_S$} & $\checkmark$ & $\times$ & Passive & Blackbox\\ + \textbf{Mehnaz et al.}~\cite{MehnazAttInf} & $X$, $Y$, $\targetmodel$, \textbf{$P_S$}, $C(Y,\targetmodel\circ X)$ & $\checkmark$ & $\times$ & Passive & Blackbox\\ + \textbf{Jayaraman and Evans}~\cite{jayaraman2022attribute} & $X$, $Y$, $\targetmodel$, $P_S$, $C(Y,\targetmodel\circ X)$ & $\times$, $\checkmark$ & $\times$ & Passive & Whitebox\\ + \hline + \rowcolor{LightCyan} + \multicolumn{6}{|c|}{\textbf{Representation-based Attacks}}\\ + \hline + \textbf{Song et al.}~\cite{Song2020Overlearning} & $\targetmodel\circ X$ & $\times$ & $\times$ & Passive & Both\\ + \textbf{Mahajan et al.}~\cite{Mahajan2020DoesLS} & $\targetmodel\circ X$ & $\checkmark$ & $\times$ & Passive & Blackbox\\ + \textbf{Malekzadeh et al.}~\cite{malekzadeh2021honestbutcurious} & $\targetmodel\circ X$ & $\times$ & $\times$ & Active & Blackbox\\ + % \textbf{Our Work} & $\targetmodel\circ X$ & $\times$, $\checkmark$ & $\checkmark$ & Passive & Blackbox \\ + \hline +\end{tabular} +% } +\end{center} +\label{tab:summary} +\end{table*} \ No newline at end of file diff --git a/aia/fair_reg.tex b/aia/fair_reg.tex new file mode 100644 index 0000000..2f2a0e0 --- /dev/null +++ b/aia/fair_reg.tex @@ -0,0 +1,46 @@ +A la Section~\ref{sec:background-eq} nous avons introduits la notion de \textit{demographic parity} (DemPar). +Dans le cas d'un classifieur binaire ($\hat{Y}$) avec attribut binaire ($S$), nous pouvons calculer à quel point le classifieur est proche d'être DemPar avec la quantité suivante : +\begin{equation*} + \text{DemParLvl} = |P(\hat{Y}=1|S=0) - P(\hat{Y}=1|S=1)| +\end{equation*} +C'est l'écart de prédiction positive entre la classe majoritair(par exemple les blancs, le hommes, ...) et la classe minoritaire (les noirs, les femmes, ...). +\begin{propriete} + \label{prop:aia-dpl0} + Un classifieur qui satisfat la \textit{demographic parity} a n DemParLvl égale à zéro. +\end{propriete} +La démonstration est triviale à partir de la Définition~\ref{def:background-eq-dp}. + +DemPar est équivalante à dire que la prédiction du modèle est idépendante de l'attribut sensible. +Nous remarquons que cette définition n'est ni restrainte à des problème de classification, ni à des attribute senssibles binaires ni même à des attribut sensibles qui prennent leurs valeur dans un ensemble fini. +Ainsi nous définissons la notion suivante: +\begin{definition}{\textit{Démographic parity} généralisée.} + \label{def:aia-dempargen} +Soit $(\Omega,\mathcal{T},P$) un espace probabilisé. +Soient $(E,\mathcal{E})$, $(F,\mathcal{F})$ et $(G,\mathcal{G})$ des espaces mesurables. +Soient les variables aléatoires suivantes : +\begin{itemize} + \item $X:(\Omega,\mathcal{T})\rightarrow (E,\mathcal{E})$ + \item $Y:(\Omega,\mathcal{T})\rightarrow (F,\mathcal{F})$ + \item $S:(\Omega,\mathcal{T})\rightarrow (G,\mathcal{G})$ + \item $f:(E,\mathcal{E})\rightarrow (F,\mathcal{F})$ +\end{itemize} +Alors $f$ satisfait la \textit{demographic parity} généralisée si et seulement si +\begin{equation*} + P_{f\circ X,S} = P_{f\circ X}\otimes P_S +\end{equation*} +Dit autrement, si et seulement si le classifieur $f$ est un CCA pour prédire $S$ à partire de $X$. +\end{definition} + +\begin{propriete} + Si un classifieur binaire satisfait la \textit{demographic parity} généralisée alors il satisfait la démographic parity. +\end{propriete} + +\begin{proof} + En gardant les objets définits dans la Définition~\ref{def:aia-dempargen}, supposons que $f$ satisfasse la \textit{demographic parity} généralisée. + Alors, en notant $\hat{Y} = f\circ X$, comme $\mathcal{G} = \mathcal{F}=\mathcal{P}(\{0,1\})$, nous avons bien + \begin{equation*} + P(\hat{Y}=1\mid S=0) = P(\hat{Y}=1\mid S=1) + \end{equation*} +\end{proof} + +Ainsi grâce à la Propriété~\ref{prop:aia-dpl0} nous savons que si un classifieur satisfait la \textit{demographic parity} généralisée, alors il a un DemParLvl égale à 0. diff --git a/aia/intro.tex b/aia/intro.tex new file mode 100644 index 0000000..b921ffc --- /dev/null +++ b/aia/intro.tex @@ -0,0 +1,20 @@ +Nous avons vu à la Section~\ref{} que, pour imposer l'équitée à un modèle, nous pouvons utiliser différentes méthodes qui agissent lors de l'entraînement. +Utiliser ces méthodes peut causer une augmentation de certain risque liée à la confidentialité des donnée d'entraînement, ainsi il est admis qu'il y ai un compromis à faire enre equitée et confidentialitée~\cite{dudu2023sok}. +Cependant ce compromis ne concerne que les risquées liée aux attaque de MIA et rentre en coflit avec la confidentialité diférentielles~\cite{chang2021privacy,cummings,ijcai2022p766}. + +Dans ce chapitre nous allons étudier les intéractions entre ces mécanismes d'équitée et l'attaque AIA. +Nous allons montrer que sous cet angle, l'équitée et la confidentialitée travailent de concert. +Cette étude peut être vue sous deux angles. +Le premier aspect consiste à étudier comment les mécanisme d'équitée peuvent être utilisé pour mitiger différent types d'AIA. +Le second aspect, en lien avec le primer, est d'utiliser les AIA pour contrôler dans un environement boîte noire le niveau d'équitée d'un modèle. + +\subsection{Contributions} +Dans ce chapitre nous apportons les contributions suivante : +\begin{itemize} + \item Une définition de l'équitée qui généralise la \textit{demographic parity} à la regression. + \item Diverse relations analytique et synthétques entre AIA, \textit{demographic parity} et \textit{equality of odds} qui remplissent les objectifs de: + calcul de niveau d'équitée en boîte noire et + garanties théoriques sur le niveau de confidentialité des donnée des utilisateurs de modèles. + \item La construction de deux nouvelles attaque AIA efficaces quand l'attribut sensible présente un déséquilibre. + \item Une étude empirique des relations entre niveau d'équitée, utilisation d'algorithmes imposants l'équitée et succès des attaques AIA. +\end{itemize} diff --git a/aia/main.tex b/aia/main.tex index 07f5b67..8e6059c 100644 --- a/aia/main.tex +++ b/aia/main.tex @@ -1,17 +1,24 @@ +\section{Introduction} +\input{aia/intro} -\section{AIA} -\section{Modèle de menace} -threat model -\label{sec:aia-tm} +\section{Equitée en regression} +\input{aia/fair_reg} -\section{Classification} -\input{aia/classif} +\section{Etude théorique de la relation entre AIA et équitée} +\input{aia/theo} \section{Regression} \label{sec:aia-soft} +\section{AIA} +\section{Modèle de menace} +threat model +\label{sec:aia-tm} \section{Méthodologie} \subsection{Jeux de donné} \label{sec:aia-methodo-jeu} The US census is a snapshot of the US adult population that is done every ten year by the US government\footnote{www.census.gov}. It produces a database where each row is an individual and each column is an attribute that describe people. + +\section{Résultats} +\input{aia/resultats} diff --git a/aia/resultats.tex b/aia/resultats.tex new file mode 100644 index 0000000..efe0060 --- /dev/null +++ b/aia/resultats.tex @@ -0,0 +1,119 @@ + +\begin{figure} + \centering + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/egd/census/census_egd_attack_hard_race.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/egd/census/census_egd_attack_hard_sex.pdf} + \caption{Census (sex)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/egd/compas/compas_egd_attack_hard_race.pdf} + \caption{Compas (race)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/egd/compas/compas_egd_attack_hard_sex.pdf} + \caption{Compas (sex)} + \end{subfigure} +\centering + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/egd/meps/meps_egd_attack_hard_race.pdf} + \caption{Meps (race)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/egd/meps/meps_egd_attack_hard_sex.pdf} + \caption{Meps (sex)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/egd/lfw/lfw_egd_attack_hard_race.pdf} + \caption{Lfw (race)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/egd/lfw/lfw_egd_attack_hard_sex.pdf} + \caption{Lfw (sex)} + \end{subfigure} + + \caption{For \AIAHard, we observe that EGD reduces the attack accuracy to random guess ($\sim$50\%)} + \label{fig:AdaptAIAEGD} +\end{figure} + + + +\begin{figure}[!htb] + \centering + \footnotesize + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_race.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_sex.pdf} + \caption{Census (sex)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_race.pdf} + \caption{Compas (race)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_sex.pdf} + \caption{Compas (sex)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_race.pdf} + \caption{Meps (race)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_sex.pdf} + \caption{Meps (sex)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_race.pdf} + \caption{Lfw (race)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_sex.pdf} + \caption{Lfw (sex)} + \end{subfigure} + + \caption{For both \AIASoft and \AIAHard, Adversarial debisaing reduces the attack accuracy to random guess ($\sim$50\%). For \AIAHard, the theoretical bound on attack accuracy matches with the empirical results.} + \label{fig:AdaptAIADebias} +\end{figure} + +\begin{figure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_hard_race.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_hard_sex.pdf} + \caption{Census (sex)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_race.pdf} + \caption{Compas (race)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_sex.pdf} + \caption{Compas (sex)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_race.pdf} + \caption{Meps (race)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_sex.pdf} + \caption{Meps (sex)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_race.pdf} + \caption{Lfw (race)} + \end{subfigure} + \begin{subfigure}{0.24\linewidth} + \includegraphics[width=\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_sex.pdf} + \caption{Lfw (sex)} + \end{subfigure} + \caption{adverarial debiasing hard} + \label{fig:aia-adv-hard} +\end{figure} diff --git a/aia/theo.tex b/aia/theo.tex new file mode 100644 index 0000000..2a826b1 --- /dev/null +++ b/aia/theo.tex @@ -0,0 +1,89 @@ +\subsection{Utiliser l'équitée pour mitiger les AIA} +Commencons par présenter le résultat le plus générale, qui fonctionne aussi bien pour des modèle de classification que pour des regression. +Ce résultats est aussi indépendant du type d'attribut binaire, quantitatif au qualitatif. + +\begin{theorem} + \label{th:aia-dpgood} + Les deux propositions suivantes sont équivalantes : + \begin{enumerate} + \item Le modèle cible satisfait la démographic parity + \item Toutes les attaques utilisant la prédiction pour inférer l'attribut sensible sont des CCA. + \end{enumerate} + + Et aussi, les deux propositions suivantes sont équivalantes : + \begin{enumerate} + \item Le modèle cible satisfait la démographic parity généraliée + \item Toutes les attaques utilisants le logit pour inférer l'attribut sensible sont des CCA. + \end{enumerate} +\end{theorem} + +\begin{proof} + Par définition, la \textit{demographic parity} (respectivement généralisée) est equivalante à l'inpépendance entre l'attribut sensible et la prediction (respectivement le logit). + Ainsi, d'après le Lemme~\ref{lemme:aia-xycca} dire que tout classifieur de l'attribute sensible utilisant la prédiction (respectivement le logit) est un CCA est équivalant à dire que le modèle cible respecte la \textit{demographic parity} (respectivement généralisée). +\end{proof} + +Ce résultat nous apprend que s'assurer que le modèle cible satisfait la \textit{demographic parity} permet de s'assurer que les attribut sensible des utilisateur soient protégé lors de l'utilisation du modèle. +Dans le cas d'un modèle cible qui réalise une classifiction binaire et en considérant un attribut binaire nous avons une propriété plus précise. + +\begin{propriete} + Soit $(\Omega,\mathcal{T},P)$ un espace probabilisé et $(\{0,1\}$, $\mathcal{P}(\{0,1\}))$ des espaces mesurables. + Soit les variables aléatoires suivantes + \begin{itemize} + \item L'étiquette $Y:(\Omega,\mathcal{T})\rightarrow (\{0,1\},\mathcal{P}(\{0,1\})$ + \item La donnée d'entrée $X:(\Omega,\mathcal{T})\rightarrow (F,\mathcal{F})$ + \item L'attribute sensible $S:(\Omega,\mathcal{T})\rightarrow(\{0,1\},\mathcal{P}(\{0,1\}))$ + \item L'attaque $a:(\Omega,\mathcal{T})\rightarrow\mathcal{P}(\{0,1\}))$ + \item Le modèle cible $f:(\Omega,\mathcal{T})\rightarrow\mathcal{P}(\{0,1\}))$ + \end{itemize} + Alors nous avons + \begin{equation*} + \text{max}_{a}BA(a) = \frac{1}{2}(1+\text(DemParLvl(f))) + \end{equation*} +\end{propriete} + +\begin{proof} + On pause $\hat{Y}=f\circ X$. + L'ensemble $A$ des fonction de $\{0,1\}$ vers $\{0,1\}$ contient quatre éléments : +$a_0=0$, $a_1=id$, $a_2=1-id$ et $a,3=1$. + Pour chaque attaque $a\in A$ la \textit{balanced accuracy} de $a$ est +$BA(a) = \frac{1}{2}(P(a\circ \hat{Y}=0|S=0) + P(a\circ \hat{Y}=1|S=1))$. +Nous avons $BA(b_0) = BA(b_3) = \frac{1}{2}$ il n'est donc pas nécessaire de considérer ces éléments pour résoudre le problème d'optimisation. +Ce problème s'écrit $\text{max}_{a\in A}BA(a)) = \text{max}(BA(a_1), BA(a_2))$. +Nous remarquon que $a_1\circ \hat{Y}=\hat{Y}$ et $a_2\circ \hat{Y}=1 - \hat{Y}$. +Ainsi, +{ +\begin{align*} + BA(a_1) &= \frac{1}{2}(P(\hat{Y}=0|S=0) + P(\hat{Y}=1|S=1))\\ + &=\frac{1}{2}(1+P(\hat{Y}=1|S=1) - P(\hat{Y}=1|S=0)) +\end{align*} +} +et +{ +\begin{align*} + BA(a_2)=\frac{1}{2}(1+P(\hat{Y}=1|S=0) - P(\hat{Y}=1|S=1)) +\end{align*} +} +Donc, +{ +\begin{align*} + &\text{max}_{a\in B}BA(a) \\ + = &\frac{1}{2}\left(1+\text{max}\left( + \begin{matrix} + P(\hat{Y}=0|S=0) -P(\hat{Y}=1|S=1)\\ + P(\hat{Y}=1|S=0) -P(\hat{Y}=0|S=1) + \end{matrix} + \right)\right)\\ + =&\frac{1}{2}(1+|P(\hat{Y}=1|S=1) - P(\hat{Y}=1|S=0)|) +\end{align*} +} +\end{proof} + +Ainsi pour le classifieur binaire avec attribut sensbile binaire, il est suffisant de calculer le DemParLvl du modèle cible pour connaitre le maximum de \textit{balanced accuracy} ateignable par n'importe quelle attaque. +De plus, nous voyons que la \textit{balanced accuracy} maximial d'attaque vaut ${1}{2}$ si et seulement si $\text{DemParLvl}=0$. +C'est à dire que $f$ satisfait DemPar est équivalant à dire que tout attaque à une \textit{balanced accuracy} égale à $\frac{1}{2}$. + +Grâce au Théorème~\ref{th:aia-dpgood} nous savons aussi que tout autre définition d'équtiée qui n'implique pas la paritée démographique ne permet pas de mitiger les AIA. +Par exemple, nous allons montrer que l'égalitée de chances de la Définition~\ref{def:background-eq-eoo} en permet pas de mitiger l'AIA dans le cas binaire que nous avons étuié précédement. + +\subsection{Utiliser l'AIA pour contrôler le niveau d'équitée}. + diff --git a/background/eq.tex b/background/eq.tex index 8a76ee7..446ad95 100644 --- a/background/eq.tex +++ b/background/eq.tex @@ -1,22 +1,24 @@ \label{sec:bck_fair} -Algorithmic fairness aims at reducing biases in ML model predictions. -Indeed, data records belonging to certain subgroups influence $targetmodel$'s predictions more than others. -For instance in criminal justice, the ethnicity of a culprit plays a non-negligible role in the prediction of them reoffending~\cite{fairjustice}. Generally, data records in the minority subgroup face unfair prediction behaviour compared to data records in the majority subgroup. These subgroups are identified based on a sensitive attribute (e.g., race or sex). -Those biases are learnt by $targetmodel$ as they are part of the distribution of the training dataset. -There is two main categories of fairness of a ML model: +L'équitée algorithmique à pour but de réduire les bias dans le modèle prédictif. +En effet, le fait qu'une donnée d'entraînement appratienne à certainne minorité peut avoir un impacte sur la qualitée de la prédiction. +Par exemple en justice prédictie, la couleur de peau d'un peau d'un coupable jou un rôle qui n'est pas négligable dans la prédiction du récidivisme au Etats Unis~\cite{fairjustice}. +Les minoritée sont identifié par un attribut sensible comme la couleur de peau, le genre ou l'orientation sexuelle. +Pour savoir si un attribut est sensible ou non, nous pouvons nous référer à l'observatoire de inégalités. +Ces bias sont appris par le modèle car ils sont présent dans les donnés d'entraînement qui reflète la population dans laquelle ces donnée ont été prélevés. -\textbf{Individual fairness} ensures that two data records with same attributes except for $S$ have the same model prediction. -This notion does not dwell on sensitive attribute and as such is not really useful in our goal of mitigating attribute inference attack at inference time. -So we set it aside for the rest of the paper. +L'équitée en apprantissag automatique se présente sous deux aspect qui mettent lumière deux visions différentes : -\textbf{Group fairness} comes from the idea that different subgroups defined by an attribute such a skin color or gender should be treated equally. -We focus our study on group fairness where $S$ represents either sex or race (i.e., $S(i)$ equals to 0 for woman, 1 for man, and 0 for black, 1 for white, respectively). -There are different definitions of group fairness which have been introduced in prior work. -We discuss two well-established and commonly used metrics: demographic parity and equality of odds. +\textbf{L'équitée individuelle}\footnote{Individual fairness} +cherche à faire en sorte que deux donnée, à toutes choses égale exepté l'attribut sensible, produisent la même prédiction. + +\textbf{L'équitée de groupe}\footnote{Group fairness} +Vient de l'idée que different sous groupes défini par un critère de discrimination devrait être traite de manière similaire. +Il y a différentes définitions mathématiques de l'équite de groupe. +Nous allons en regarder deux qui sont bien établis dans la litérature et souvant utilisé : la paritée demographique\footnote{Demographic parity} et l'équitée de chances\footnote{Equality of odds}. \begin{definition} -\label{def:dp} +\label{def:background-eq-dp} $\hat{Y}$ satisfies demparity for $S$ if and only if: $P(\hat{Y}=0 | S=0) = P(\hat{Y}=0 | S=1)$. From that, we will call $|P(\hat{Y}=0 | S=0) - P(\hat{Y}=0 | S=1)|$ the demPar-level of $\hat{Y}$. \end{definition} @@ -28,7 +30,7 @@ However, this may result in different false positive and true positive rates if Hardt et al.~\cite{fairmetric2} proposed eo as a modification of demparity to ensure that both the true positive rate and false positive rate will be the same for each population. \begin{definition} - \label{def:eo} + \label{def:background-eq-eoo} $\hat{Y}$, classifier of $Y$, satisfies equality of odds for $S$ if and only if: $\forall (\hat{y},y)\in\{0,1\}^2 \quad P(\hat{Y}=\hat{y} | S=0,Y=y) = P(\hat{Y}=\hat{y} | S=1,Y=y)$. \end{definition} diff --git a/biblio.bib b/biblio.bib index fc03fdc..696e6c7 100644 --- a/biblio.bib +++ b/biblio.bib @@ -1,3 +1,10 @@ +######################"" +#Notes +@misc{dati2024declaration, + title={Déclaration de Mme Rachida Dati, ministre de la culture, lors de l'installation de la Commission d'enrichissement de la langue française, le 27 mai 2024.} + author={Dati, Rachida}, + year={2024} +} ######################################" #Background @BOOK{lecun2019quand, @@ -1336,3 +1343,1234 @@ series = {NIPS'14} year={2017}, organization={IEEE} } + +@misc{carlini2022membership, + title={Membership Inference Attacks From First Principles}, + author={Nicholas Carlini and Steve Chien and Milad Nasr and Shuang Song and Andreas Terzis and Florian Tramer}, + year={2022}, + eprint={2112.03570}, + archivePrefix={arXiv}, + primaryClass={cs.CR} +} + +@inproceedings{salem2023sok, + title={SoK: Let the privacy games begin! A unified treatment of data inference privacy in machine learning}, + author={Salem, Ahmed and Cherubin, Giovanni and Evans, David and K{\"o}pf, Boris and Paverd, Andrew and Suri, Anshuman and Tople, Shruti and Zanella-B{\'e}guelin, Santiago}, + booktitle={Security \& Privacy}, + pages={327--345}, + year={2023}, +} +% + organization={IEEE} + + +@inproceedings{ijcai2022p766, + title = {Differential Privacy and Fairness in Decisions and Learning Tasks: A Survey}, + author = {Fioretto, Ferdinando and Tran, Cuong and Van Hentenryck, Pascal and Zhu, Keyu}, + booktitle = {International Joint Conference on + Artificial Intelligence}, + + pages = {5470--5477}, + year = {2022}, + month = {7}, + +} +%publisher = {International Joint Conferences on Artificial Intelligence Organization}, + editor = {Lud De Raedt}, +note = {Survey Track}, + doi = {10.24963/ijcai.2022/766}, + url = {https://doi.org/10.24963/ijcai.2022/766}, + + +@article{accfairtradeoff, +author = {Pinzon, Carlos and Palamidessi, Catuscia and Piantanida, Pablo and Valencia, Frank}, +year = {2023}, +month = {05}, +pages = {1-30}, +title = {On the incompatibility of accuracy and equal opportunity}, +journal = {Machine Learning}, +} +% +doi = {10.1007/s10994-023-06331-y} + +@article{rodolfa2021empirical, + title={Empirical observation of negligible fairness--accuracy trade-offs in machine learning for public policy}, + author={Rodolfa, Kit T and Lamba, Hemank and Ghani, Rayid}, + journal={Nature Machine Intelligence}, + volume={3}, + number={10}, + pages={896--904}, + year={2021}, +} +% + publisher={Nature Publishing Group UK London} + +@article{zhai2022understanding, + title={Understanding why generalized reweighting does not improve over ERM}, + author={Zhai, Runtian and Dan, Chen and Kolter, Zico and Ravikumar, Pradeep}, + booktitle={International Conference on Learning Representation}, + year={2023} +} + +@article{ +veldanda2022fairness, +title={Fairness via In-Processing in the Over-parameterized Regime: A Cautionary Tale with MinDiff Loss}, +author={Akshaj Kumar Veldanda and Ivan Brugere and Jiahao Chen and Sanghamitra Dutta and Alan Mishler and Siddharth Garg}, +journal={Transactions on Machine Learning Research}, +issn={2835-8856}, +year={2023}, + +} +%url={https://openreview.net/forum?id=f4VyYhkRvi}, +note={} + +% general +% url = {https://arxiv.org/abs/2206.10923}, +@misc{arxivmichael, + doi = {10.48550/ARXIV.2206.10923}, + author = {Maheshwari, Gaurav and Perrot, Michaël}, + title = {FairGrad: Fairness Aware Gradient Descent}, + publisher = {arXiv}, + year = {2022}, +} + + +@InProceedings{classIMb1, + title = {Class-Imbalanced Semi-Supervised Learning with Adaptive Thresholding}, + author = {Guo, Lan-Zhe and Li, Yu-Feng}, + booktitle = {International Conference on Machine Learning}, + pages = {8082--8094}, + year = {2022}, + editor = {Chaudhuri, Kamalika and Jegelka, Stefanie and Song, Le and Szepesvari, Csaba and Niu, Gang and Sabato, Sivan}, + volume = {162}, + month = {17--23 Jul}, + +} +% + pdf = {https://proceedings.mlr.press/v162/guo22e/guo22e.pdf}, + url = {https://proceedings.mlr.press/v162/guo22e.html} +series = {Proceedings of Machine Learning Research}, + publisher = {PMLR}, + +@article{classIMb2, + title={Deep learning model calibration for improving performance in class-imbalanced medical image classification tasks}, + author={Sivaramakrishnan Rajaraman and Prasanth Ganesan and Sameer K. Antani}, + journal={PLoS ONE}, + year={2021}, + volume={17}, +} +% + url={https://api.semanticscholar.org/CorpusID:238259577} + +@misc{classIMb3, + author = {Jason Brownlee}, + title = {{A} {G}entle {I}ntroduction to {T}hreshold-{M}oving for {I}mbalanced {C}lassification - {M}achine{L}earning{M}astery.com}, + year = {}, + note = {[Accessed 31-08-2023]}, +} +%issn = {0022-0000}, +%url = {https://www.sciencedirect.com/science/article/pii/S002200009791504X}, +@article{saddlepointsolve, +title = {A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting}, +journal = {Journal of Computer and System Sciences}, +volume = {55}, +number = {1}, +pages = {119-139}, +year = {1997}, +author = {Yoav Freund and Robert E Schapire} +} +% +doi = {10.1006/jcss.1997.1504}, + + +%isbn = {1595933832}, +%address = {New York, NY, USA}, +@inproceedings{curves, +author = {Davis, Jesse and Goadrich, Mark}, +title = {The Relationship between Precision-Recall and ROC Curves}, +year = {2006}, +booktitle = {International Conference on Machine Learning}, +pages = {233–240}, + +} +% +publisher = {Association for Computing Machinery}, +doi = {10.1145/1143844.1143874}, +location = {Pittsburgh, Pennsylvania, USA}, +series = {ICML '06} + +@inproceedings{cormode, +author = {Cormode, Graham}, +title = {Personal Privacy vs Population Privacy: Learning to Attack Anonymization}, +year = {2011}, +booktitle = {International Conference on Knowledge Discovery and Data Mining}, +pages = {1253–1261}, +} +%doi = {10.1145/2020408.2020598}, +%location = {San Diego, California, USA}, +series = {KDD '11} +%publisher = {Association for Computing Machinery}, + +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%issn = {0360-0300}, +%url = {https://doi.org/10.1145/3457607}, +@article{surveyfair, +author = {Mehrabi, Ninareh and Morstatter, Fred and Saxena, Nripsuta and Lerman, Kristina and Galstyan, Aram}, +title = {A Survey on Bias and Fairness in Machine Learning}, +year = {2021}, +volume = {54}, +number = {6}, +journal = {Comput. Surv.}, +month = {jul}, +articleno = {115}, +numpages = {35}, +} +% +doi = {10.1145/3457607}, + +@article{attinfSocial1, +author = {Gong, Neil Zhenqiang and Talwalkar, Ameet and Mackey, Lester and Huang, Ling and Shin, Eui Chul Richard and Stefanov, Emil and Shi, Elaine (Runting) and Song, Dawn}, +title = {Joint Link Prediction and Attribute Inference Using a Social-Attribute Network}, +year = {2014}, +volume = {5}, +number = {2}, +journal = {Trans. Intell. Syst. Technol.}, +} +% +doi = {10.1145/2594455}, +publisher = {Association for Computing Machinery}, + +%address = {New York, NY, USA}, + +%issn = {2471-2566}, +%url = {https://doi.org/10.1145/3154793}, +%numpages = {30}, +%%month = {jan}, +@article{attinfSocial2, +author = {Gong, Neil Zhenqiang and Liu, Bin}, +title = {Attribute Inference Attacks in Online Social Networks}, +year = {2018}, +volume = {21}, +number = {1}, +journal = {Trans. Priv. Secur.}, +articleno = {3}, +} +% +doi = {10.1145/3154793}, +publisher = {Association for Computing Machinery}, + +%isbn = {978-1-931971-32-4}, +%address = {Austin, TX}, +%url = {https://www.usenix.org/conference/usenixsecurity16/technical-sessions/presentation/gong}, +%publisher = {USENIX Association}, +%month = aug, +@inproceedings {attinfSocial3, +author = {Neil Zhenqiang Gong and Bin Liu}, +title = {You Are Who You Know and How You Behave: Attribute Inference Attacks via Users{\textquoteright} Social Friends and Behaviors}, +booktitle = {USENIX Security Symposium }, +year = {2016}, +pages = {979--995}, +} + + + %URL = {https://hal.inria.fr/hal-00748162}, + %ADDRESS = {San Diego, United States}, + %MONTH = Feb, +@inproceedings{attinfSocial4, + TITLE = {{You Are What You Like! Information Leakage Through Users' Interests}}, + YEAR = {2012}, + AUTHOR = {Chaabane, Abdelberi and Acs, Gergely and Kaafar, Mohamed Ali}, + BOOKTITLE = {Network and Distributed System Security Symposium}, + PAGES = {1-14}, +} + + + + +@inproceedings{attinfSocial5, + author={Elena Zheleva and Lise Getoor}, + title={To join or not to join: the illusion of privacy in social networks with mixed public and private user profiles}, + year={2009}, + BOOKTITLE = {International Conference on World Wide Web}, + pages={531-540}, + doi={10.1145/1526709.1526781}, +} + + + +%isbn = {9781450349130}, +%publisher = {International World Wide Web Conferences Steering Committee}, +%address = {Republic and Canton of Geneva, CHE}, +%url = {https://doi.org/10.1145/3038912.3052695}, +@inproceedings{attinfSocial6, +author = {Jia, Jinyuan and Wang, Binghui and Zhang, Le and Gong, Neil Zhenqiang}, +title = {AttriInfer: Inferring User Attributes in Online Social Networks Using Markov Random Fields}, +year = {2017}, +booktitle = {International Conference on World Wide Web}, +pages = {1561–1569}, +location = {Perth, Australia}, +series = {WWW '17} +} +% +doi = {10.1145/3038912.3052695}, + + +%isbn = {9781450382878}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +@inbook{dysan, +author = {Boutet, Antoine and Frindel, Carole and Gambs, S\'{e}bastien and Jourdan, Th\'{e}o and Ngueveu, Rosin Claude}, +title = {DySan: Dynamically Sanitizing Motion Sensor Data Against Sensitive Inferences through Adversarial Networks}, +year = {2021}, +doi = {10.1145/3433210.3453095}, +booktitle = {Asia Conference on Computer and Communications Security}, +pages = {672–686}, +} +%serie = {ASIA CCS '21} + +@inproceedings{attprivacy, +author = {Zhang, Wanrong and Ohrimenko, Olga and Cummings, Rachel}, +title = {Attribute Privacy: Framework and Mechanisms}, +year = {2022}, +isbn = {9781450393522}, +booktitle = {Fairness, Accountability, and Transparency}, +pages = {757–766}, +numpages = {10}, + +} +%url = {https://doi.org/10.1145/3531146.3533139}, +doi = {10.1145/3531146.3533139}, +keywords = {Pufferfish privacy, attribute privacy, formal privacy frameworks, privacy-preserving mechanisms}, +series = {FAccT '22} +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, + + +%differential privacy and fairness +@inproceedings{dispvuln, +author = {Mohammad Yaghini and Bogdan Kulynych and Carmela Troncoso}, +title = {Disparate Vulnerability: on the Unfairness of Privacy Attacks Against Machine Learning}, +year = {2022}, +booktitle = {Privacy Enhancing Technologies Symposium} +} + + +%isbn = {9781450391405}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +@inproceedings{GongMIAUnfair, +author = {Zhong, Da and Sun, Haipei and Xu, Jun and Gong, Neil and Wang, Wendy Hui}, +title = {Understanding Disparate Effects of Membership Inference Attacks and Their Countermeasures}, +year = {2022}, +booktitle = {Asia Conference on Computer and Communications Security}, +pages = {959–974}, +} +%location = {Nagasaki, Japan}, +series = {ASIA CCS '22} +doi = {10.1145/3488932.3501279}, + + +%sbn = {9781450311151}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%url = {https://doi.org/10.1145/2090236.2090255}, +@inproceedings{indivfairness, +author = {Dwork, Cynthia and Hardt, Moritz and Pitassi, Toniann and Reingold, Omer and Zemel, Richard}, +title = {Fairness through Awareness}, +year = {2012}, +booktitle = {Innovations in Theoretical Computer Science}, +pages = {214–226}, +} +%doi = {10.1145/2090236.2090255}, +location = {Cambridge, Massachusetts}, +series = {ITCS '12} + +@inproceedings{outIndist, +author = {Dwork, Cynthia and Kim, Michael P. and Reingold, Omer and Rothblum, Guy N. and Yona, Gal}, +title = {Outcome indistinguishability}, +year = {2021}, +booktitle = {Symposium on Theory of Computing}, +pages = {1095–1108}, +numpages = {14}, +} +%isbn = {9781450380539}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +url = {https://doi.org/10.1145/3406325.3451064}, +doi = {10.1145/3406325.3451064}, +keywords = {Prediction, Fairness, Computational Indistinguishability}, +location = {Virtual, Italy}, +series = {STOC 2021} + + + +%isbn = {9781450369367}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%url = {https://doi.org/10.1145/3351095.3372872}, +@inproceedings{dpfair, +author = {Pujol, David and McKenna, Ryan and Kuppam, Satya and Hay, Michael and Machanavajjhala, Ashwin and Miklau, Gerome}, +title = {Fair Decision Making Using Privacy-Protected Data}, +year = {2020}, +booktitle = {Fairness, Accountability, and Transparency}, +pages = {189–199}, +} +% +doi = {10.1145/3351095.3372872}, +location = {Barcelona, Spain}, +series = {FAT* '20} + +%url={https://ojs.aaai.org/index.php/AAAI/article/view/17193}, +%month={May}, +@article{fairprivatelagrangian, +title={Differentially Private and Fair Deep Learning: A Lagrangian Dual Approach}, +volume={35}, +number={11}, +journal={AAAI Conference on Artificial Intelligence}, +author={Tran, Cuong and Fioretto, Ferdinando and Van Hentenryck, Pascal}, +year={2021}, +pages={9932-9939} +} + +%editor = {Chaudhuri, Kamalika and Salakhutdinov, Ruslan}, + %series = {Proceedings of Machine Learning Research}, + %month = {09--15 Jun}, + %publisher = {PMLR}, + %pdf = {http://proceedings.mlr.press/v97/jagielski19a/jagielski19a.pdf}, + %url = {https://proceedings.mlr.press/v97/jagielski19a.html} +@InProceedings{dpfairlearn, + title = {Differentially Private Fair Learning}, + author = {Jagielski, Matthew and Kearns, Michael and Mao, Jieming and Oprea, Alina and Roth, Aaron and -Malvajerdi, Saeed Sharifi and Ullman, Jonathan}, + booktitle = {International Conference on Machine Learning}, + pages = {3000--3008}, + year = {2019}, + volume = {97}, +} + +@incollection{dpaccdisp, +title = {Differential Privacy Has Disparate Impact on Model Accuracy}, +author = {Bagdasaryan, Eugene and Poursaeed, Omid and Shmatikov, Vitaly}, +booktitle = {Advances in Neural Information Processing Systems}, +pages = {15479--15488}, +year = {2019}} + +%isbn = {978-1-939133-06-9}, +%address = {Santa Clara, CA}, +%url = {https://www.usenix.org/conference/usenixsecurity19/presentation/jayaraman}, +%publisher = {USENIX Association}, +%month = aug, +@inproceedings {dpVacc, +author = {Bargav Jayaraman and David Evans}, +title = {Evaluating Differentially Private Machine Learning in Practice}, +booktitle = {USENIX Security Symposium}, +year = {2019}, +pages = {1895--1912}, +} + +%isbn = {9781450367110}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%url = {https://doi.org/10.1145/3314183.3323847}, +@inproceedings{cummings, +author = {Cummings, Rachel and Gupta, Varun and Kimpara, Dhamma and Morgenstern, Jamie}, +title = {On the Compatibility of Privacy and Fairness}, +year = {2019}, +booktitle = {Conference on User Modeling, Adaptation and Personalization}, +pages = {309–315}, + +} +%doi = {10.1145/3314183.3323847}, +series = {UMAP'19 Adjunct} +location = {Larnaca, Cyprus}, + +@techreport{ec2019ethics, + address = {Brussels}, + author = {{High-Level Expert Group on AI}}, + institution = {European Commission}, + language = {eng}, + month = apr, + title = {Ethics guidelines for trustworthy AI}, + type = {Report}, + year = {2019} +} +% + url = {https://ec.europa.eu/digital-single-market/en/news/ethics-guidelines-trustworthy-ai}, + +@inproceedings{nist, + title={A Taxonomy and Terminology of Adversarial Machine Learning}, + author={Elham Tabassi and Kevin J. Burns and M. Hadjimichael and Andres Molina-Markham and Julian Sexton}, + year={2019}, + booktitle = {NIST Interagency/Internal Report} +} +% + url = {https://nvlpubs.nist.gov/nistpubs/ir/2019/NIST.IR.8269-draft.pdf}, + +@inproceedings{dpia, +title={Art. 35 {GDPR} Data protection impact assessment}, +url={https://gdpr-info.eu/art-35-gdpr/}, +author={European Union Law}, +year={2018}, +booktitle={General Data Protection Regulation (GDPR)} } + +@article{ico, +title={{AI} auditing and impact assessment: according to the UK information commissioner’s office}, +journal={AI and Ethics}, +author={Kazim, Emre and Denny, Danielle Mendes Thame and Koshiyama, Adriano}, +year={2021}, +month={Feb} } +%ISSN={2730-5953, 2730-5961}, url={http://link.springer.com/10.1007/s43681-021-00039-2}, DOI={10.1007/s43681-021-00039-2}, + +@inproceedings{whitehouse, +title={Guidance for Regulation of Artificial Intelligence Applications}, +author={White House}, +year = {2020}, +booktitle={Memorandum For The Heads Of Executive Departments And Agencies} } +%url={https://www.whitehouse.gov/wp-content/uploads/2020/11/M-21-06.pdf}, +%metrics + +@INPROCEEDINGS{memprivNattpriv, + author={Zhao, Benjamin Zi Hao and Agrawal, Aviral and Coburn, Catisha and Asghar, Hassan Jameel and Bhaskar, Raghav and Kaafar, Mohamed Ali and Webb, Darren and Dickinson, Peter}, + booktitle={European Security \& Privacy}, + title={On the (In)Feasibility of Attribute Inference Attacks on Machine Learning Models}, + year={2021}, + pages={232-251}, + doi={10.1109/EuroSP51992.2021.00025} +} + +@article{duddu2023sok, + title={SoK: Unintended Interactions among Machine Learning Defenses and Risks}, + author={Duddu, Vasisht and Szyller, Sebastian and Asokan, N}, + journal={arXiv preprint arXiv:2312.04542}, + year={2023} +} + + +@inproceedings{suri2023dissecting, + title={Dissecting distribution inference}, + author={Suri, Anshuman and Lu, Yifu and Chen, Yanjin and Evans, David}, + booktitle={Conference on Secure and Trustworthy Machine Learning}, + pages={150--164}, + year={2023}, +} +% + organization={IEEE} + + +@article{de2020overview, + title={An overview of privacy in machine learning}, + author={De Cristofaro, Emiliano}, + journal={arXiv preprint arXiv:2005.08679}, + year={2020} +} + + +@article{pate2021fairness, + title={A Fairness Analysis on Private Aggregation of Teacher Ensembles}, + author={Tran, Cuong and Dinh, My H and Beiter, Kyle and Fioretto, Ferdinando}, + journal={arXiv preprint arXiv:2109.08630}, + year={2021} +} + +@article{fioretto2022differential, + title={Differential Privacy and Fairness in Decisions and Learning Tasks: A Survey}, + author={Fioretto, Ferdinando and Tran, Cuong and Van Hentenryck, Pascal and Zhu, Keyu}, + journal={arXiv preprint arXiv:2202.08187}, + year={2022} +} + + +% attribute inference attacks in ML +%publisher = "Institute of Electrical and Electronics Engineers (IEEE)", +%address = "United States", +@inproceedings{zhao2021infeasibility, +title = "On the (in)feasibility of attribute inference attacks on machine learning models", +author = "Zhao, {Benjamin Zi Hao} and Aviral Agrawal and Catisha Coburn and Asghar, {Hassan Jameel} and Raghav Bhaskar and Kaafar, {Mohamed Ali} and Darren Webb and Peter Dickinson", +year = "2021", +pages = "232--251", +booktitle = "European Security \& Privacy", +} +% +doi = "10.1109/EuroSP51992.2021.00025", +serie = {EuroS&P '2021}, + +%isbn = {978-1-939133-31-1}, +%address = {Boston, MA}, +%url = {https://www.usenix.org/conference/usenixsecurity22/presentation/mehnaz}, +%publisher = {USENIX Association}, +%month = aug, +@inproceedings{MehnazAttInf, +author = {Shagufta Mehnaz and Sayanton V. Dibbo and Ehsanul Kabir and Ninghui Li and Elisa Bertino}, +title = {Are Your Sensitive Attributes Private? Novel Model Inversion Attribute Inference Attacks on Classification Models}, +booktitle = {USENIX Security Symposium}, +year = {2022}, +pages = {4579--4596}, +} + +%isbn = {9781450338325}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%%url = {https://doi.org/10.1145/2810103.2813677}, +@inproceedings{fredrikson1, +author = {Fredrikson, Matt and Jha, Somesh and Ristenpart, Thomas}, +title = {Model Inversion Attacks That Exploit Confidence Information and Basic Countermeasures}, +year = {2015}, +booktitle = {Conference on Computer and Communications Security}, +pages = {1322–1333}, + +} +% +doi = {10.1145/2810103.2813677}, +location = {Denver, Colorado, USA}, +series = {CCS '15} + + +%isbn = {9781931971157}, +@inproceedings{fredrikson2, +author = {Fredrikson, Matthew and Lantz, Eric and Jha, Somesh and Lin, Simon and Page, David and Ristenpart, Thomas}, +title = {Privacy in Pharmacogenetics: An End-to-End Case Study of Personalized Warfarin Dosing}, +year = {2014}, +booktitle = {USENIX Conference on Security Symposium}, +pages = {17–32}, +} +% +location = {San Diego, CA}, +series = {SEC'14} + +@inproceedings{Song2020Overlearning, +title={Overlearning Reveals Sensitive Attributes}, +author={Congzheng Song and Vitaly Shmatikov}, +booktitle={International Conference on Learning Representations}, +year={2020} +} + + +%isbn = {9781450384544}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%url = {https://doi.org/10.1145/3460120.3484533}, +@inproceedings{malekzadeh2021honestbutcurious, +author = {Malekzadeh, Mohammad and Borovykh, Anastasia and G\"{u}nd\"{u}z, Deniz}, +title = {Honest-but-Curious Nets: Sensitive Attributes of Private Inputs Can Be Secretly Coded into the Classifiers' Outputs}, +year = {2021}, +booktitle = {Conference on Computer and Communications Security}, +pages = {825–844}, +} +%location = {Virtual Event, Republic of Korea}, +series = {CCS '21} +doi = {10.1145/3460120.3484533}, + +@article{jayaraman2022attribute, + title={Are Attribute Inference Attacks Just Imputation?}, + author={Jayaraman, Bargav and Evans, David}, + journal={arXiv preprint arXiv:2209.01292}, + year={2022} +} + + +@inproceedings{yeom, + author={Yeom, Samuel and Giacomelli, Irene and Fredrikson, Matt and Jha, Somesh}, + booktitle={Computer Security Foundations Symposium}, + title={Privacy Risk in Machine Learning: Analyzing the Connection to Overfitting}, + year={2018}, + pages={268-282}, +} +% + doi={10.1109/CSF.2018.00027} + +@inproceedings{Mahajan2020DoesLS, + title={Does Learning Stable Features Provide Privacy Benefits for Machine Learning Models?}, + author={Divyat Mahajan, Shruti Tople, Amit Sharma}, + booktitle = {NeurIPS PPML Workshop}, + year={2020} +} + +@inproceedings{Malekzadeh_2021, + + year = 2021, month = {nov}, + author = {Mohammad Malekzadeh and Anastasia Borovykh and Deniz Gündüz}, + title = {Honest-but-Curious Nets: Sensitive Attributes of Private Inputs Can Be Secretly Coded into the Classifiers{\textquotesingle} Outputs}, + booktitle = {Conference on Computer and Communications Security}} +% + publisher = {{ACM}}, +doi = {10.1145/3460120.3484533}, + url = {https://doi.org/10.1145%2F3460120.3484533}, + + +@INPROCEEDINGS{meminf, + author={Shokri, Reza and Stronati, Marco and Song, Congzheng and Shmatikov, Vitaly}, + booktitle={Security \& Privacy}, + title={Membership Inference Attacks Against Machine Learning Models}, + year={2017}, + pages={3-18},} +% + doi={10.1109/SP.2017.41} + +@article{chang2021privacy, + title={On the Privacy Risks of Algorithmic Fairness}, + author={Hongyang Chang and R. Shokri}, + journal={European Security \& Privacy}, + year={2021}, + pages={292-303} +} + +@article{duddu2022inferring, + title={Inferring Sensitive Attributes from Model Explanations}, + author={Duddu, Vasisht and Boutet, Antoine}, + journal={arXiv preprint arXiv:2208.09967}, + year={2022} +} + +%editor = {H. Larochelle and M. Ranzato and R. Hadsell and M. F. Balcan and H. Lin}, + %publisher = {Curran Associates, Inc.}, + %url = {https://proceedings.neurips.cc/paper/2020/file/6b8b8e3bd6ad94b985c1b1f1b7a94cb2-Paper.pdf}, +@inproceedings{NEURIPS2020_6b8b8e3b, + author = {Zhao, Han and Chi, Jianfeng and Tian, Yuan and Gordon, Geoffrey J}, + booktitle = {Advances in Neural Information Processing Systems}, + pages = {9485--9496}, + title = {Trade-offs and Guarantees of Adversarial Representation Learning for Information Obfuscation}, + volume = {33}, + year = {2020} +} + + + +@ARTICLE{8515092, +author={S. A. {Osia} and A. {Taheri} and A. S. {Shamsabadi} and K. {Katevas} and H. {Haddadi} and H. R. {Rabiee}}, +journal={Transactions on Knowledge and Data Engineering}, +title={Deep Private-Feature Extraction}, +year={2020}, +volume={32}, +number={1}, +pages={54-66}, +} + + + +%eprint = {1707.00075} +@article{advfair, + author = {Alex Beutel and Jilin Chen and Zhe Zhao and Ed H. Chi}, + title = {Data Decisions and Theoretical Implications when Adversarially Learning Fair Representations}, + year = {2017}, + publisher = {arXiv}, + doi = {10.48550/ARXIV.1707.00075}, +} + +%property inference attack + +@article{propinf, + title={Dataset-Level Attribute Leakage in Collaborative Learning}, + author={Zhang, Wanrong and Tople, Shruti and Ohrimenko, Olga}, + journal={arXiv:2006.07267}, + year={2020} +} + +%month = sep, +@article{propinf2, +author = {Ateniese, Giuseppe and Mancini, Luigi V. and Spognardi, Angelo and Villani, Antonio and Vitali, Domenico and Felici, Giovanni}, +title = {Hacking Smart Machines with Smarter Ones: How to Extract Meaningful Data from Machine Learning Classifiers}, +year = {2015}, +volume = {10}, +number = {3}, +journal = {Int. J. Secur. Netw.}, +pages = {137–150} +} + + +%isbn = {9781450356930}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%url = {https://doi.org/10.1145/3243734.3243834}, +@inproceedings{propinf3, +author = {Ganju, Karan and Wang, Qi and Yang, Wei and Gunter, Carl A. and Borisov, Nikita}, +title = {Property Inference Attacks on Fully Connected Neural Networks Using Permutation Invariant Representations}, +year = {2018}, +booktitle = {Conference on Computer and Communications Security}, +pages = {619–633}, + +} +%location = {Toronto, Canada}, +series = {CCS '18} +doi = {10.1145/3243734.3243834}, + + +@article{propinf4, + title={Formalizing and Estimating Distribution Inference Risks}, + author={Suri, Anshuman and Evans, David}, + journal={Privacy Enhancing Technologies}, + year={2022} +} + +@inproceedings{fedinference, +author={L. {Melis} and C. {Song} and E. {De Cristofaro} and V. {Shmatikov}}, +booktitle={Security \& Privacy}, +title={Exploiting Unintended Feature Leakage in Collaborative Learning}, +year={2019}, +pages={691-706} +} + +@INPROCEEDINGS {ferryExploit, +author = {J. Ferry and U. Aivodji and S. Gambs and M. Huguet and M. Siala}, +booktitle = {Conference on Secure and Trustworthy Machine Learning}, +title = {Exploiting Fairness to Enhance Sensitive Attributes Reconstruction}, +year = {2023}, +volume = {}, +issn = {}, +pages = {18-41}, +month = {feb} +} +%keywords = {training;measurement;learning systems;privacy;pipelines;training data;machine learning}, +doi = {10.1109/SaTML54575.2023.00012}, +url = {https://doi.ieeecomputersociety.org/10.1109/SaTML54575.2023.00012}, +publisher = {IEEE Computer Society}, +address = {Los Alamitos, CA, USA}, + + + +% defences against attribute inference attacks + +@inproceedings{10.5555/3042817.3042973, +author = {Zemel, Richard and Wu, Yu and Swersky, Kevin and Pitassi, Toniann and Dwork, Cynthia}, +title = {Learning Fair Representations}, +year = {2013}, +booktitle = {International Conference on Machine Learning}, +} +%serie = {ICML '13}, + +%month = jan, +@article{10.5555/3122009.3208010, +author = {Hamm, Jihun}, +title = {Minimax Filter: Learning to Preserve Privacy from Inference Attacks}, +year = {2017}, +volume = {18}, +number = {1}, +journal = {J. Mach. Learn. Res.}, +pages = {4704–4734} +} + +@inproceedings{10.5555/3327546.3327583, +author = {Moyer, Daniel and Gao, Shuyang and Brekelmans, Rob and Steeg, Greg Ver and Galstyan, Aram}, +title = {Invariant Representations without Adversarial Training}, +year = {2018}, +booktitle = {Advances in Neural Information Processing Systems} +} + +@inproceedings{10.5555/3294771.3294827, +author = {Xie, Qizhe and Dai, Zihang and Du, Yulun and Hovy, Eduard and Neubig, Graham}, +title = {Controllable Invariance through Adversarial Feature Learning}, +year = {2017}, +booktitle = {Advances in Neural Information Processing Systems} +} + +@InProceedings{pmlr-v80-madras18a, + title = {Learning Adversarially Fair and Transferable Representations}, + author = {Madras, David and Creager, Elliot and Pitassi, Toniann and Zemel, Richard}, + pages = {3384--3393}, + year = {2018}, + volume = {80}, + booktitle = {Proceedings of Machine Learning Research}, +} + +@inproceedings{censoringadv, +title = "Censoring Representations with an Adversary", +author = "Harrison Edwards and Amos Storkey", +year = "2016", +booktitle = {International Conference on Learning Representations} +} +@inproceedings{NIPS2017_48ab2f9b, + author = {Louppe, Gilles and Kagan, Michael and Cranmer, Kyle}, + booktitle = {Advances in Neural Information Processing Systems}, + editor = {I. Guyon and U. Von Luxburg and S. Bengio and H. Wallach and R. Fergus and S. Vishwanathan and R. Garnett}, + pages = {}, + publisher = {Curran Associates, Inc.}, + title = {Learning to Pivot with Adversarial Networks}, + volume = {30}, + year = {2017} +} +%url = {https://proceedings.neurips.cc/paper_files/paper/2017/file/48ab2f9b45957ab574cf005eb8a76760-Paper.pdf}, + +%isbn = {9781450360128}, +%publisher = {Association for Computing Machinery}, +%address = {New York, NY, USA}, +%url = {https://doi.org/10.1145/3278721.3278779}, +@inproceedings{debiase, +author = {Zhang, Brian Hu and Lemoine, Blake and Mitchell, Margaret}, +title = {Mitigating Unwanted Biases with Adversarial Learning}, +year = {2018}, +booktitle = {Conference on AI, Ethics, and Society}, +pages = {335–340}, +} +% location = {New Orleans, LA, USA}, +series = {AIES '18} +doi = {10.1145/3278721.3278779}, + + %month = {10}, +%pages = {}, +@article{preprocessing, +author = {Kamiran, Faisal and Calders, Toon}, +year = {2011}, +title = {Data Pre-Processing Techniques for Classification without Discrimination}, +volume = {33}, +journal = {Knowledge and Information Systems}, +} +%doi = {10.1007/s10115-011-0463-8} + +%series = {Proceedings of Machine Learning Research}, + %month = {10--15 Jul}, + %publisher = {PMLR}, + %pdf = {http://proceedings.mlr.press/v80/agarwal18a/agarwal18a.pdf}, + %url = {https://proceedings.mlr.press/v80/agarwal18a.html}, +@InProceedings{reductions, + title = {A Reductions Approach to Fair Classification}, + author = {Agarwal, Alekh and Beygelzimer, Alina and Dudik, Miroslav and Langford, John and Wallach, Hanna}, + booktitle = {International Conference on Machine Learning}, + pages = {60--69}, + year = {2018}, + volume = {80}, +} + +@article{kifer2014pufferfish, +author = {Kifer, Daniel and Machanavajjhala, Ashwin}, +title = {Pufferfish: A framework for mathematical privacy definitions}, +year = {2014}, +issue_date = {January 2014}, +volume = {39}, +number = {1}, +issn = {0362-5915}, +journal = {Trans. Database Syst.}, +month = {jan}, +articleno = {3}, +numpages = {36}, +keywords = {Privacy, differential privacy} +} +%url = {https://doi.org/10.1145/2514689}, +doi = {10.1145/2514689}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, + +@inproceedings{song2017pufferfish, + title={Pufferfish privacy mechanisms for correlated data}, + author={Song, Shuang and Wang, Yizhen and Chaudhuri, Kamalika}, + booktitle={International Conference on Management of Data}, + pages={1291--1306}, + year={2017} +} + +@article{grinsztajn2022tree, + title={Why do tree-based models still outperform deep learning on typical tabular data?}, + author={Grinsztajn, L{\'e}o and Oyallon, Edouard and Varoquaux, Ga{\"e}l}, + journal={Advances in neural information processing systems}, + volume={35}, + pages={507--520}, + year={2022} +} + + + +@inproceedings {attriguard, +author = {Jinyuan Jia and Neil Zhenqiang Gong}, +title = {AttriGuard: A Practical Defense Against Attribute Inference Attacks via Adversarial Machine Learning}, +booktitle = {USENIX Security}, +year = {2018}, +pages = {513--529}, +} + + +% fairness metrics + +@article{fairmetric, +author = {Muhammad Bilal Zafar and Isabel Valera and Manuel Gomez-Rodriguez and Krishna P. Gummadi}, +title = {Fairness Constraints: A Flexible Approach for Fair Classification}, +journal = {Journal of Machine Learning Research}, +year = {2019}, +volume = {20}, +number = {75}, +pages = {1-42} +} + +@inproceedings{fairmetric2, +author = {Hardt, Moritz and Price, Eric and Srebro, Nathan}, +title = {Equality of Opportunity in Supervised Learning}, +year = {2016}, +booktitle = {Advances in Neural Information Processing Systems}, +pages = {3323–3331} +} + +@article{fairjustice, +author = {Alikhademi, Kiana and Drobina, Emma and Prioleau, Diandra and Richardson, Brianna and Purves, Duncan and Gilbert, Juan E.}, +title = {A Review of Predictive Policing from the Perspective of Fairness}, +year = {2022}, +issue_date = {Mar 2022}, +publisher = {Kluwer Academic Publishers}, +address = {USA}, +volume = {30}, +number = {1}, +issn = {0924-8463}, +journal = {Artif. Intell. Law}, +month = {mar}, +pages = {1–17}, +numpages = {17}, +keywords = {Predictive policing, Algorithmic fairness, Fairness, AI in criminal justice} +} +%url = {https://doi.org/10.1007/s10506-021-09286-4}, +doi = {10.1007/s10506-021-09286-4}, + +@article{folk, + title={Retiring Adult: New Datasets for Fair Machine Learning}, + author={Ding, Frances and Hardt, Moritz and Miller, John and Schmidt, Ludwig}, + journal={Advances in Neural Information Processing Systems}, + volume={34}, + year={2021} +} + +@inproceedings{ + SDV, + title={The Synthetic data vault}, + author={Patki, Neha and Wedge, Roy and Veeramachaneni, Kalyan}, + booktitle={International Conference on Data Science and Advanced Analytics}, + year={2016}, + pages={399-410}, + month={Oct} +} +% + doi={10.1109/DSAA.2016.49}, + +%misc{dpbad, +% + + author = {Dwork, Cynthia and Hardt, Moritz and Pitassi, Toniann and Reingold, Omer and Zemel, Rich}, + + title = {Fairness Through Awareness}, + + eprint={1104.3913}, + archivePrefix={arXiv}, + year = {2011}, + primaryClass={cs.CY} + + +} +%keywords = {Computational Complexity (cs.CC), Computers and Society (cs.CY), FOS: Computer and information sciences, FOS: Computer and information sciences}, +%doi = {10.48550/ARXIV.1104.3913}, + url = {https://arxiv.org/abs/1104.3913}, +copyright = {arXiv.org perpetual, non-exclusive license} + +@INPROCEEDINGS{fairlog, + + author={Radovanović, Sandro and Petrović, Andrija and Delibašić, Boris and Suknović, Milija}, + + booktitle={International Conference on INnovations in Intelligent SysTems and Applications}, + + title={Enforcing fairness in logistic regression algorithm}, + + year={2020}, + + volume={}, + + number={}, + + pages={1-7}, +} +%doi={10.1109/INISTA49547.2020.9194676} + + +@misc{fairreg, + title={Fair Regression: Quantitative Definitions and Reduction-based Algorithms}, + author={Alekh Agarwal and Miroslav Dudík and Zhiwei Steven Wu}, + year={2019}, + eprint={1905.12843}, + archivePrefix={arXiv}, + primaryClass={cs.LG} +} + + + +@InProceedings{fairaudit1, + title = {Blind Justice: Fairness with Encrypted Sensitive Attributes}, + author = {Kilbertus, Niki and Gascon, Adria and Kusner, Matt and Veale, Michael and Gummadi, Krishna and Weller, Adrian}, + booktitle = {International Conference on Machine Learning}, + pages = {2630--2639}, + year = {2018}, + editor = {Dy, Jennifer and Krause, Andreas}, + volume = {80}, + + month = {10--15 Jul}, + publisher = {PMLR}, + +} +%series = {Proceedings of Machine Learning Research}, +pdf = {http://proceedings.mlr.press/v80/kilbertus18a/kilbertus18a.pdf}, + url = {https://proceedings.mlr.press/v80/kilbertus18a.html}, + + + +@inproceedings{fairaudit2, +author = {Park, Saerom and Kim, Seongmin and Lim, Yeon-sup}, +title = {Fairness Audit of Machine Learning Models with Confidential Computing}, +year = {2022}, +isbn = {9781450390965}, +booktitle = {Web Conference 2022}, +pages = {3488–3499}, +numpages = {12}, +keywords = {Confidential computing, Algorithmic audit, Security and privacy, Fairness}, +} +%publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +url = {https://doi.org/10.1145/3485447.3512244}, +doi = {10.1145/3485447.3512244}, +location = {Virtual Event, Lyon, France}, +series = {WWW '22} + +@inproceedings{fairaudit3, +author = {Segal, Shahar and Adi, Yossi and Pinkas, Benny and Baum, Carsten and Ganesh, Chaya and Keshet, Joseph}, +title = {Fairness in the Eyes of the Data: Certifying Machine-Learning Models}, +year = {2021}, +booktitle = {Conference on AI, Ethics, and Society}, +pages = {926–935}, +numpages = {10}, +keywords = {machine-learning, cryptography, privacy, fairness}, +} +%publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +url = {https://doi.org/10.1145/3461702.3462554}, +doi = {10.1145/3461702.3462554}, +location = {Virtual Event, USA}, +series = {AIES '21} +isbn = {9781450384735}, + +@article{yadav2024fairproof, + title={FairProof: Confidential and Certifiable Fairness for Neural Networks}, + author={Yadav, Chhavi and Chowdhury, Amrita Roy and Boneh, Dan and Chaudhuri, Kamalika}, + journal={arXiv preprint arXiv:2402.12572}, + year={2024} +} + +@inproceedings{khedr2023certifair, + title={Certifair: A framework for certified global fairness of neural networks}, + author={Khedr, Haitham and Shoukry, Yasser}, + booktitle={AAAI Conference on Artificial Intelligence}, + volume={37}, + number={7}, + pages={8237--8245}, + year={2023} +} + +@article{urban20, +author = {Urban, Caterina and Christakis, Maria and W\"{u}stholz, Valentin and Zhang, Fuyuan}, +title = {Perfectly parallel fairness certification of neural networks}, +year = {2020}, +issue_date = {November 2020}, +volume = {4}, +number = {OOPSLA}, +journal = {Program. Lang.}, +month = {nov}, +articleno = {185}, +numpages = {30}, +keywords = {Static Analysis, Neural Networks, Fairness, Abstract Interpretation} +} +%publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, + +@inproceedings{ +chugg2023auditing, +title={Auditing Fairness by Betting}, +author={Ben Chugg and Santiago Cortes-Gomez and Bryan Wilder and Aaditya Ramdas}, +booktitle={Conference on Neural Information Processing Systems}, +year={2023}, +} +% +url={https://openreview.net/forum?id=EEVpt3dJQj} + +@inproceedings{yan2022active, + title={Active fairness auditing}, + author={Yan, Tom and Zhang, Chicheng}, + booktitle={International Conference on Machine Learning}, + pages={24929--24962}, + year={2022}, + organization={PMLR} +} + +@article{de2024fairness, + title={Fairness Auditing with Multi-Agent Collaboration}, + author={de Vos, Martijn and Dhasade, Akash and Bourr{\'e}e, Jade Garcia and Kermarrec, Anne-Marie and Merrer, Erwan Le and Rottembourg, Benoit and Tredan, Gilles}, + journal={arXiv preprint arXiv:2402.08522}, + year={2024} +} + +@inproceedings{ghosh2022algorithmic, + title={Algorithmic fairness verification with graphical models}, + author={Ghosh, Bishwamittra and Basu, Debabrota and Meel, Kuldeep S}, + booktitle={AAAI Conference on Artificial Intelligence}, + volume={36}, + number={9}, + pages={9539--9548}, + year={2022} +} + +@inproceedings{ghosh2023biased, + title={“How Biased are Your Features?”: Computing Fairness Influence Functions with Global Sensitivity Analysis}, + author={Ghosh, Bishwamittra and Basu, Debabrota and Meel, Kuldeep S}, + booktitle={Fairness, Accountability, and Transparency}, + pages={138--148}, + year={2023} +} + +@article{FairSquare, +author = {Albarghouthi, Aws and D'Antoni, Loris and Drews, Samuel and Nori, Aditya V.}, +title = {FairSquare: probabilistic verification of program fairness}, +year = {2017}, +issue_date = {October 2017}, +volume = {1}, +number = {OOPSLA}, +journal = {Program. Lang.}, +month = {oct}, +articleno = {80}, +numpages = {30}, +keywords = {Algorithmic Fairness, Probabilistic Inference, Probabilistic Programming} +} +%publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +url = {https://doi.org/10.1145/3133904}, +doi = {10.1145/3133904}, + +@article{saleiro2018aequitas, + title={Aequitas: A bias and fairness audit toolkit}, + author={Saleiro, Pedro and Kuester, Benedict and Hinkson, Loren and London, Jesse and Stevens, Abby and Anisfeld, Ari and Rodolfa, Kit T and Ghani, Rayid}, + journal={arXiv preprint arXiv:1811.05577}, + year={2018} +} + +@article{bastani2019probabilistic, + title={Probabilistic verification of fairness properties via concentration}, + author={Bastani, Osbert and Zhang, Xin and Solar-Lezama, Armando}, + journal={Programming Languages}, + volume={3}, + number={OOPSLA}, + pages={1--27}, + year={2019}, +} +% + publisher={ACM New York, NY, USA} + +@article{adler2018auditing, + title={Auditing black-box models for indirect influence}, + author={Adler, Philip and Falk, Casey and Friedler, Sorelle A and Nix, Tionney and Rybeck, Gabriel and Scheidegger, Carlos and Smith, Brandon and Venkatasubramanian, Suresh}, + journal={Knowledge and Information Systems}, + volume={54}, + pages={95--122}, + year={2018}, +} +% publisher={Springer} + +@inproceedings{black2020fliptest, + title={Fliptest: fairness testing via optimal transport}, + author={Black, Emily and Yeom, Samuel and Fredrikson, Matt}, + booktitle={Fairness, Accountability, and Transparency}, + pages={111--121}, + year={2020} +} + +@article{Justicia, +title={Justicia: A Stochastic SAT Approach to Formally Verify Fairness}, +volume={35}, +number={9}, journal={Conference on Artificial Intelligence}, author={Ghosh, Bishwamittra and Basu, Debabrota and Meel, Kuldeep S.}, year={2021}, month={May}, pages={7554-7563} } +%url={https://ojs.aaai.org/index.php/AAAI/article/view/16925}, DOI={10.1609/aaai.v35i9.16925}, diff --git a/notations.tex b/notations.tex new file mode 100644 index 0000000..90b70aa --- /dev/null +++ b/notations.tex @@ -0,0 +1,14 @@ +Toutes les notations utilisés sont définies le première fois quelle sont introduites. +Pour faciliter la lecture nous fournissons ici un liste des notations avec la referecence de leur définitions. + +\begin{table} +\centering +\begin{tabular}{|c|c|c|} + \hline + \textbf{Symbole}&\textbf{Description}&\textbf{Définition}\\ + \hline + $f^{1}$&Fonction inverse ou image reciproque&\\ + \hline +\end{tabular} +\caption{Liste de notations} +\end{table} diff --git a/notes.tex b/notes.tex new file mode 100644 index 0000000..3d7d3c5 --- /dev/null +++ b/notes.tex @@ -0,0 +1,6 @@ +Nous avons souaité rédiger ce manuscrit en français pour plusieurs raison qu'il nous semble important de mettre en avant. +Le sujet premier de ce manuscrit, l'intelligence artificielle est un sujet majeur de souveraineté nationale~\cite{villani2018donner}. +Cette souevraineté est intimement lié à la francophonie car comme l'explique Rachida Dati, ministre de la culture, +\textquote{la langue doit vivre au même rythme pour restituer la création, l'invention, l'innovation, pour nous permettre de penser et d'exprimer toutes les réalités du monde contemporain. Et pour rester une grande langue internationale, il faut pouvoir tout dire, tout nommer, tout traduire}~\cite{dati2024declaration}. +Ainsi nous nous somme efforcé de traduire les termes techniques de l'apprentissage automatique qui viennet tous de l'anglais. +Pour éviter que notre traduction soit trop confuse pour les lecteurs habitué aux terme anglais, pour chaque terme traduit nous indiquons son originie anglaise en note de bas de page à se premiètre occurence. diff --git a/remerciements.tex b/remerciements.tex index 225a1a0..0e869c4 100644 --- a/remerciements.tex +++ b/remerciements.tex @@ -1,24 +1,40 @@ -Merci à ma épouse, Emeline, pour son soutien, ses conseils, ses rélectures de mon orthopgraphe et pour m'avoir aidé avec le Théorème~\ref{th:fini-em}. +Merci à mon épouse, Emeline, pour son soutien, ses conseils, ses rélectures de mon orthopgraphe et pour m'avoir aidé avec le Théorème~\ref{th:fini-em}. Merci à Antoine Boutet et Mathieu Cunche pour leur encadrement. -Merci les copains Samuel, Thomas, Léo, Bastien, Rémi, Adrien, Nathan, Amine, Abhi. +Merci à ma mère Joëlle et mon père Pieter pour ne m'avoir jamais laché. Merci à toute l'équipe Privatics de l'INRIA pour les super séminaires toujour passionants. Merci à Frederic LeMouel, à Linda Soumari, et à tout le laboratoir CITI de l'INSA Lyon pour leur accompagnement. -Merci à Sébastien Gambs pour son acceuil chaleureux à l'Université de Québec à Montréal. - Merci à Cécile Mercadier et Clément Marteau d'avoir cru en moi. -Merci à Mr.Noyer, Romain Bondil, Ludovic Menneteau, Bijan Mohammadi et Andro Mikelic ainsi que tous les enseignants qui ont su me montrer la beauté des mathématiques. +Merci à Sébastien Gambs pour son accueil chaleureux à l'Université de Québec à Montréal. -Merci à ma mère Joëlle et mon père Pieter pour ne m'avoir jamais laché. +Merci à Mr.Noyer, Romain Bondil, Ludovic Menneteau, Bijan Mohammadi et Andro Mikelic ainsi que tous les enseignants qui ont su me montrer la beauté des mathématiques. Merci à ma petite soeur Claire pour avoir activement contribué à faire de moi qui je suis. -Merci à Maryse et Jean-Claude pour leur bienveillance. +Merci les copains : +Abhi, +Adrien, +Amine, +Anthonin, +Bastien, +Benoit, +Benoît, +Celestin, +Léo, +Nathan, +Rémi, +Samuel, +Thomas, +Virgile. + +Merci à Maryse, Jean-Claude et Patricia pour leur bienveillance. + +Merci à tous les habitants de Saint-Jean-De-Cuculles pour leur accueil. Merci à Raclette et Cookie pour leur mignonerie. diff --git a/template_these_INSA_cotut.tex b/template_these_INSA_cotut.tex index dc1d568..2293564 100644 --- a/template_these_INSA_cotut.tex +++ b/template_these_INSA_cotut.tex @@ -1,6 +1,7 @@ \documentclass[a4paper,titlepage,12pt,french,twoside,openright]{report} -\usepackage{graphicx} +%\usepackage{graphicx} +\usepackage[draft]{graphicx} \usepackage{xcolor} \usepackage[paper=a4paper,margin=2.5cm]{geometry}% http://ctan.org/pkg/geometry \usepackage[pdftex,colorlinks=false]{hyperref} @@ -79,6 +80,10 @@ pdfsubject={Th\`ese} %sous Acrobat. \input{remerciements} \chapter*{Avertissement} \input{avertissement} +\chapter*{Notes} +\input{notes} +\chapter*{Notations} +\input{notations} \chapter{Introduction} \section{Qu'est-ce que l'Intelligence Artificielle ?} \label{sec:contexte-ckoi} -- cgit v1.2.3 From 391e6017f893d22b0c1c6394d8f77c03701c8a69 Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Thu, 19 Sep 2024 10:44:15 +0200 Subject: most of the ref --- biblio.bib | 381 +++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 343 insertions(+), 38 deletions(-) diff --git a/biblio.bib b/biblio.bib index 696e6c7..e4ee078 100644 --- a/biblio.bib +++ b/biblio.bib @@ -1,10 +1,65 @@ ######################"" +@misc{chatgpt, + title={ChatGPT}, + howpublished={\url{https://openai.com/chatgpt/}}, + note={Dernier accès: 2024-09-19} +} +@misc{stabledi, + title={Stable Diffusion}, + howpublished={\url{https://stablediffusion.fr/france}}, + note={Dernier accès: 2024-09-19} +} +@inproceedings{maghded2020novel, + title={A novel AI-enabled framework to diagnose coronavirus COVID-19 using smartphone embedded sensors: design study}, + author={Maghded, Halgurd S and Ghafoor, Kayhan Zrar and Sadiq, Ali Safaa and Curran, Kevin and Rawat, Danda B and Rabie, Khaled}, + booktitle={2020 IEEE 21st international conference on information reuse and integration for data science (IRI)}, + pages={180--187}, + year={2020}, + organization={IEEE} +} + + + +@misc{yeom2018privacy, + title={Privacy Risk in Machine Learning: Analyzing the Connection to Overfitting}, + author={Samuel Yeom and Irene Giacomelli and Matt Fredrikson and Somesh Jha}, + year={2018} +} #Notes @misc{dati2024declaration, title={Déclaration de Mme Rachida Dati, ministre de la culture, lors de l'installation de la Commission d'enrichissement de la langue française, le 27 mai 2024.} author={Dati, Rachida}, year={2024} } +@misc{wise2024, + title={Wise 2024}, + howpublished={\url{wise2024-qatar.com}}, + note={Dernier accès: 2024-09-13} +} + +###########################" +#Contexte +#Legal +@misc{defenseur2015emploi, + title={Recruter avec des outils numériques sans discriminer}, + year={2015}, + howpublished={\url{https://juridique.defenseurdesdroits.fr/doc_num.php?explnum_id=18909}}, + note={Dernier accès: 2024-09-13} +} + +@misc{defenseure2024lutter, + title={Lutter contre les discriminations produites par les algorithmes et l’IA}, + year={2024}, + howpublished={\url{https://www.defenseurdesdroits.fr/sites/default/files/2024-02/FICHE7_AlgoIA_0.pdf}}, + note={Dernier accès: 2024-09-13} +} + +@misc{defenseure, + title={Lutter contre les discriminations et promouvoir l'égalité}, + howpublished={\url{defenseurdesdroits.fr/lutter-contre-les-discriminations-et-promouvoir-legalite-185}}, + note={Dernier accès: 2024-09-13} +} + ######################################" #Background @BOOK{lecun2019quand, @@ -154,6 +209,38 @@ +#Equitée + +@misc{servicepubdiscrimination, + title="Qu'est-ce que la discrimination ?", + howpublished={https://www.service-public.fr/particuliers/vosdroits/F38175}, + note={Dernier accès: 2024-09-13} +} + + +@BOOK{biddle2006adverse, + title = "Adverse impact and test validation", + author = "Biddle, Dan", + publisher = "Gower Publishing", + edition = 2, + month = jul, + year = 2006, + address = "London, England", + language = "en" +} + + +@article{scikit-learn, + title={Scikit-learn: Machine Learning in {P}ython}, + author={Pedregosa, F. and Varoquaux, G. and Gramfort, A. and Michel, V. + and Thirion, B. and Grisel, O. and Blondel, M. and Prettenhofer, P. + and Weiss, R. and Dubourg, V. and Vanderplas, J. and Passos, A. and + Cournapeau, D. and Brucher, M. and Perrot, M. and Duchesnay, E.}, + journal={Journal of Machine Learning Research}, + volume={12}, + pages={2825--2830}, + year={2011} +} @@ -164,6 +251,62 @@ ############################################"" #Enjeux + +#Explicabilite +@article{yuan2022explainability, + title={Explainability in graph neural networks: A taxonomic survey}, + author={Yuan, Hao and Yu, Haiyang and Gui, Shurui and Ji, Shuiwang}, + journal={IEEE transactions on pattern analysis and machine intelligence}, + volume={45}, + number={5}, + pages={5782--5799}, + year={2022}, + publisher={IEEE} +} +@article{du2019techniques, + title={Techniques for interpretable machine learning}, + author={Du, Mengnan and Liu, Ninghao and Hu, Xia}, + journal={Communications of the ACM}, + volume={63}, + number={1}, + pages={68--77}, + year={2019}, + publisher={ACM New York, NY, USA} +} + +@article{rai2020explainable, + title={Explainable AI: From black box to glass box}, + author={Rai, Arun}, + journal={Journal of the Academy of Marketing Science}, + volume={48}, + pages={137--141}, + year={2020}, + publisher={Springer} +} + +@article{ucoglu2020current, + title={Current machine learning applications in accounting and auditing}, + author={Ucoglu, Derya}, + journal={PressAcademia Procedia}, + volume={12}, + number={1}, + pages={1--7}, + year={2020}, + publisher={Pressacademia} +} + +@article{choi2020identifying, + title={Identifying machine learning techniques for classification of target advertising}, + author={Choi, Jin-A and Lim, Kiho}, + journal={ICT Express}, + volume={6}, + number={3}, + pages={175--180}, + year={2020}, + publisher={Elsevier} +} + + #Securité #Backdoor @article{gao2020backdoor, @@ -190,7 +333,17 @@ } - +#Fairness +@article{dressel2018accuracy, + title={The accuracy, fairness, and limits of predicting recidivism}, + author={Dressel, Julia and Farid, Hany}, + journal={Science advances}, + volume={4}, + number={1}, + pages={eaao5580}, + year={2018}, + publisher={American Association for the Advancement of Science} +} @@ -422,6 +575,60 @@ series = {AIES '18} ####################################"" #Stratégie AI de la France +@article{touvron2023llama, + title={Llama 2: Open foundation and fine-tuned chat models}, + author={Touvron, Hugo and Martin, Louis and Stone, Kevin and Albert, Peter and Almahairi, Amjad and Babaei, Yasmine and Bashlykov, Nikolay and Batra, Soumya and Bhargava, Prajjwal and Bhosale, Shruti and others}, + journal={arXiv preprint arXiv:2307.09288}, + year={2023} +} +@misc{g5k, + title={Grid5000}, + howpublished={\url{www.grid5000.fr}}, + note={Dernier accès: 2024-09-18} +} +@misc{jeanzay, + title={Jean Zay, le supercalculateur le plus puissant de France pour la recherche} + howpublished={\url{https://www.cnrs.fr/fr/presse/jean-zay-le-supercalculateur-le-plus-puissant-de-france-pour-la-recherche}}, + note={Dernier accès: 2024-09-18} +} +@misc{2030phase, + title={La stratégie nationale pour l'intelligence artificielle}, + howpublished={\url{https://www.entreprises.gouv.fr/fr/numerique/enjeux/la-strategie-nationale-pour-l-ia}}, + note={Dernier accès: 2024-09-18} +} +@misc{coordinateur, + title={France 2030 | Nomination du coordinateur national pour l’intelligence artificielle}, + howpublished={\url{https://www.info.gouv.fr/actualite/france-2030-nomination-du-coordinateur-national-pour-l-intelligence-artificielle}}, + note={Dernier accès: 2024-09-17} +} + +@misc{loinumerique, + title={LOI n° 2016-1321 du 7 octobre 2016 pour une République numérique}, + howpublished={\url{https://www.legifrance.gouv.fr/jorf/id/JORFSCTA000033202935}} + note={Dernier accès: 2024-09-17} +} +@misc{kaggle, + title={Kaggle}, + howpublished={\url{kaggle.com}}, + note={Dernier accès: 2024-09-17} +} +@misc{2030sante, + title={Data Challenges en santé}, + howpublished={\url{https://www.bpifrance.fr/nos-appels-a-projets-concours/appel-a-projets-data-challenges-en-sante}}, + note={Dernier accès: 2024-09-17} +} + +@misc{iabooster, + title={IA Booster}, + howpublished={\url{https://www.bpifrance.fr/catalogue-offres/ia-booster-france-2030}}, + note={Dernier accès: 2024-09-17} +} +@misc{2030generatif, + title={Accélérer l’usage de l’intelligence artificielle générative dans l’économie}, + howpublished={\url{https://www.bpifrance.fr/nos-appels-a-projets-concours/appel-a-projets-accelerer-lusage-de-lintelligence-artificielle-generative-dans-leconomie}}, + note={Dernier accès: 2024-09-17} +} + @misc{france2030, title={France 2030}, howpublished={\url{https://www.info.gouv.fr/grand-dossier/france-2030}}, @@ -1144,18 +1351,6 @@ abstract = {This paper explores the use of metaphorical personification (anthrop } - - - -@misc{song2020overlearning, - title={Overlearning Reveals Sensitive Attributes}, - author={Congzheng Song and Vitaly Shmatikov}, - year={2020}, - eprint={1905.11742}, - archivePrefix={arXiv}, - primaryClass={cs.LG} -} - @article{EO, author = {Moritz Hardt and Eric Price and @@ -1183,14 +1378,6 @@ abstract = {This paper explores the use of metaphorical personification (anthrop publisher={ACS Publications} } -@misc{yeom, - title={Privacy Risk in Machine Learning: Analyzing the Connection to Overfitting}, - author={Samuel Yeom and Irene Giacomelli and Matt Fredrikson and Somesh Jha}, - year={2018}, - eprint={1709.01604}, - archivePrefix={arXiv}, - primaryClass={cs.CR} -} @misc{vgg16, title={Very Deep Convolutional Networks for Large-Scale Image Recognition}, @@ -1968,16 +2155,6 @@ doi = {10.1145/3460120.3484533}, } -@inproceedings{yeom, - author={Yeom, Samuel and Giacomelli, Irene and Fredrikson, Matt and Jha, Somesh}, - booktitle={Computer Security Foundations Symposium}, - title={Privacy Risk in Machine Learning: Analyzing the Connection to Overfitting}, - year={2018}, - pages={268-282}, -} -% - doi={10.1109/CSF.2018.00027} - @inproceedings{Mahajan2020DoesLS, title={Does Learning Stable Features Provide Privacy Benefits for Machine Learning Models?}, author={Divyat Mahajan, Shruti Tople, Amit Sharma}, @@ -2335,19 +2512,13 @@ doi = {10.1007/s10506-021-09286-4}, % doi={10.1109/DSAA.2016.49}, -%misc{dpbad, -% - +@misc{dpbad, author = {Dwork, Cynthia and Hardt, Moritz and Pitassi, Toniann and Reingold, Omer and Zemel, Rich}, - title = {Fairness Through Awareness}, - eprint={1104.3913}, archivePrefix={arXiv}, year = {2011}, primaryClass={cs.CY} - - } %keywords = {Computational Complexity (cs.CC), Computers and Society (cs.CY), FOS: Computer and information sciences, FOS: Computer and information sciences}, %doi = {10.48550/ARXIV.1104.3913}, @@ -2574,3 +2745,137 @@ title={Justicia: A Stochastic SAT Approach to Formally Verify Fairness}, volume={35}, number={9}, journal={Conference on Artificial Intelligence}, author={Ghosh, Bishwamittra and Basu, Debabrota and Meel, Kuldeep S.}, year={2021}, month={May}, pages={7554-7563} } %url={https://ojs.aaai.org/index.php/AAAI/article/view/16925}, DOI={10.1609/aaai.v35i9.16925}, +} + +####################AIA +@article{ofverstedt2022fast, + title={Fast computation of mutual information in the frequency domain with applications to global multimodal image alignment}, + author={{\"O}fverstedt, Johan and Lindblad, Joakim and Sladoje, Nata{\v{s}}a}, + journal={Pattern Recognition Letters}, + volume={159}, + pages={196--203}, + year={2022}, + publisher={Elsevier} +} + + +@article{dai2022comprehensive, + title={A comprehensive survey on trustworthy graph neural networks: Privacy, robustness, fairness, and explainability}, + author={Dai, Enyan and Zhao, Tianxiang and Zhu, Huaisheng and Xu, Junjie and Guo, Zhimeng and Liu, Hui and Tang, Jiliang and Wang, Suhang}, + journal={arXiv preprint arXiv:2204.08570}, + year={2022} +} + +@article{franco2021toward, + title={Toward learning trustworthily from data combining privacy, fairness, and explainability: an application to face recognition}, + author={Franco, Danilo and Oneto, Luca and Navarin, Nicol{\`o} and Anguita, Davide}, + journal={Entropy}, + volume={23}, + number={8}, + pages={1047}, + year={2021}, + publisher={MDPI} +} + +@article{grant2020show, + title={Show us the data: Privacy, explainability, and why the law can't have both}, + author={Grant, Thomas D and Wischik, Damon J}, + journal={Geo. Wash. L. Rev.}, + volume={88}, + pages={1350}, + year={2020}, + publisher={HeinOnline} +} + +@article{pielke2005hurricanes, + title={Hurricanes and global warming}, + author={Pielke Jr, Roger A and Landsea, Chris and Mayfield, Max and Layer, J and Pasch, Richard}, + journal={Bulletin of the American Meteorological Society}, + volume={86}, + number={11}, + pages={1571--1576}, + year={2005}, + publisher={American Meteorological Society} +} +@article{khasnis2005global, + title={Global warming and infectious disease}, + author={Khasnis, Atul A and Nettleman, Mary D}, + journal={Archives of medical research}, + volume={36}, + number={6}, + pages={689--696}, + year={2005}, + publisher={Elsevier} +} +@article{houghton2005global, + title={Global warming}, + author={Houghton, John}, + journal={Reports on progress in physics}, + volume={68}, + number={6}, + pages={1343}, + year={2005}, + publisher={IOP Publishing} +} + +@misc{mcnutt2013climate, + title={Climate change impacts}, + author={McNutt, Marcia}, + journal={Science}, + volume={341}, + number={6145}, + pages={435--435}, + year={2013}, + publisher={American Association for the Advancement of Science} +} + +@article{melillo2014climate, + title={Climate change impacts in the United States}, + author={Melillo, Jerry M and Richmond, TT and Yohe, Gary and others}, + journal={Third national climate assessment}, + volume={52}, + pages={150--174}, + year={2014}, + publisher={US Global Change Research Program, Washington, DC} +} + + +@misc{carbonfr, + title={L’empreinte carbone de la France de 1995 à 2022}, + howpublished={\url{https://www.statistiques.developpement-durable.gouv.fr/lempreinte-carbone-de-la-france-de-1995-2022}}, + note={Dernier accès: 2024-09-18} +} + +@article{shadrin2019designing, + title={Designing future precision agriculture: Detection of seeds germination using artificial intelligence on a low-power embedded system}, + author={Shadrin, Dmitrii and Menshchikov, Alexander and Ermilov, Dmitry and Somov, Andrey}, + journal={IEEE Sensors Journal}, + volume={19}, + number={23}, + pages={11573--11582}, + year={2019}, + publisher={IEEE} +} +@article{schwartz2020green, + title={Green ai}, + author={Schwartz, Roy and Dodge, Jesse and Smith, Noah A and Etzioni, Oren}, + journal={Communications of the ACM}, + volume={63}, + number={12}, + pages={54--63}, + year={2020}, + publisher={ACM New York, NY, USA} +} + + +@article{verdecchia2023systematic, + title={A systematic review of Green AI}, + author={Verdecchia, Roberto and Sallou, June and Cruz, Lu{\'\i}s}, + journal={Wiley Interdisciplinary Reviews: Data Mining and Knowledge Discovery}, + volume={13}, + number={4}, + pages={e1507}, + year={2023}, + publisher={Wiley Online Library} +} + -- cgit v1.2.3 From 4aae3ea0427a6c9e9a8519a38d9d9d0ac5f0ec9c Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Sat, 21 Sep 2024 16:27:27 +0200 Subject: fin intro --- ACSAC/tables/tab_datasets.tex | 2 +- UDLISNA/ED.aux | 25 + UDLISNA/ED.tex | 215 +++++++ UDLISNA/INSA.png | Bin 0 -> 64064 bytes UDLISNA/UDL_INSA_couverture_these_latex.zip | Bin 0 -> 198403 bytes UDLISNA/folio.aux | 25 + UDLISNA/folio.tex | 57 ++ UDLISNA/garde.aux | 25 + UDLISNA/garde.tex | 68 ++ UDLISNA/partenaire.png | Bin 0 -> 4610 bytes UDLISNA/template_these_INSA_cotut.aux | 19 + UDLISNA/template_these_INSA_cotut.log | 714 +++++++++++++++++++++ UDLISNA/template_these_INSA_cotut.out | 2 + UDLISNA/template_these_INSA_cotut.pdf | Bin 0 -> 152970 bytes UDLISNA/template_these_INSA_cotut.tcp | 12 + UDLISNA/template_these_INSA_cotut.tex | 61 ++ UDLISNA/template_these_INSA_cotut.toc | 3 + UDLISNA/template_these_INSA_cotut.tps | 80 +++ aia/< | 14 + aia/a.tex | 72 +++ aia/aia.tex | 46 ++ aia/b.tex | 36 ++ aia/conclusion.tex | 0 aia/figure/rocr.pdf | Bin 0 -> 15450 bytes aia/figure/tikz/data.tex | 15 + aia/main.tex | 26 +- aia/methodo.tex | 50 ++ aia/related.tex | 0 aia/theo.tex | 146 ++++- annexe/crit_discri.tex | 27 + avertissement.tex | 12 +- background/alg.tex | 99 +++ background/dif.tex | 95 +++ background/eq | 0 background/eq.tex | 99 ++- background/figure/eq/reg_unfair.pdf | Bin 0 -> 17023 bytes background/main.tex | 21 +- background/ml.tex | 63 +- background/opti.tex | 59 +- background/proba.tex | 22 + background/set.tex | 17 + classification_finie/ba.tex | 3 +- classification_finie/figure/ba/COMPAS.pdf | Bin 0 -> 13097 bytes classification_finie/figure/ba/LAW.pdf | Bin 0 -> 12684 bytes .../figure/cezanne/cezanne/colage.png | Bin 0 -> 27809765 bytes .../figure/cezanne/cezanne/collage.svg | 77 +++ classification_finie/figure/cezanne/colage.png | Bin 0 -> 27809765 bytes classification_finie/figure/cezanne/collage.svg | 77 +++ classification_finie/figure/time/COMPAS.pdf | Bin 0 -> 12220 bytes classification_finie/figure/time/LAW.pdf | Bin 0 -> 12458 bytes classification_finie/main.tex | 1 + classification_finie/tabular.tex | 16 +- conclusion.tex | 20 +- contexte/< | 106 +++ contexte/background | 0 contexte/ckoi.tex | 4 +- contexte/enjeux.tex | 67 +- contexte/figure/g5k-backbone.pdf | Bin 0 -> 40313 bytes contexte/figure/g5k.svg | 123 ++++ contexte/legal.tex | 113 +++- contexte/philo/anthro.tex | 8 +- contexte/philo/mu.tex | 0 contexte/strat.tex | 124 +++- introduction.tex | 26 + main.tex | 7 +- notations.tex | 55 +- notes.tex | 20 +- perspectives.tex | 1 + remerciements.tex | 9 +- template_these_INSA_cotut.pdf | Bin 5219296 -> 45804005 bytes template_these_INSA_cotut.tex | 39 +- theorem.tex | 1 + 72 files changed, 2945 insertions(+), 179 deletions(-) create mode 100644 UDLISNA/ED.aux create mode 100644 UDLISNA/ED.tex create mode 100644 UDLISNA/INSA.png create mode 100644 UDLISNA/UDL_INSA_couverture_these_latex.zip create mode 100644 UDLISNA/folio.aux create mode 100644 UDLISNA/folio.tex create mode 100644 UDLISNA/garde.aux create mode 100644 UDLISNA/garde.tex create mode 100644 UDLISNA/partenaire.png create mode 100644 UDLISNA/template_these_INSA_cotut.aux create mode 100644 UDLISNA/template_these_INSA_cotut.log create mode 100644 UDLISNA/template_these_INSA_cotut.out create mode 100644 UDLISNA/template_these_INSA_cotut.pdf create mode 100644 UDLISNA/template_these_INSA_cotut.tcp create mode 100644 UDLISNA/template_these_INSA_cotut.tex create mode 100644 UDLISNA/template_these_INSA_cotut.toc create mode 100644 UDLISNA/template_these_INSA_cotut.tps create mode 100644 aia/< create mode 100644 aia/a.tex create mode 100644 aia/aia.tex create mode 100644 aia/b.tex create mode 100644 aia/conclusion.tex create mode 100644 aia/figure/rocr.pdf create mode 100644 aia/figure/tikz/data.tex create mode 100644 aia/methodo.tex create mode 100644 aia/related.tex create mode 100644 annexe/crit_discri.tex create mode 100644 background/alg.tex create mode 100644 background/dif.tex create mode 100644 background/eq create mode 100644 background/figure/eq/reg_unfair.pdf create mode 100644 classification_finie/figure/ba/COMPAS.pdf create mode 100644 classification_finie/figure/ba/LAW.pdf create mode 100644 classification_finie/figure/cezanne/cezanne/colage.png create mode 100644 classification_finie/figure/cezanne/cezanne/collage.svg create mode 100644 classification_finie/figure/cezanne/colage.png create mode 100644 classification_finie/figure/cezanne/collage.svg create mode 100644 classification_finie/figure/time/COMPAS.pdf create mode 100644 classification_finie/figure/time/LAW.pdf create mode 100644 contexte/< create mode 100644 contexte/background create mode 100644 contexte/figure/g5k-backbone.pdf create mode 100644 contexte/figure/g5k.svg delete mode 100644 contexte/philo/mu.tex create mode 100644 introduction.tex create mode 100644 perspectives.tex diff --git a/ACSAC/tables/tab_datasets.tex b/ACSAC/tables/tab_datasets.tex index 3dfe024..8b8e675 100644 --- a/ACSAC/tables/tab_datasets.tex +++ b/ACSAC/tables/tab_datasets.tex @@ -14,4 +14,4 @@ \end{tabular} \end{center} \label{tab:summary} -\end{table} \ No newline at end of file +\end{table} diff --git a/UDLISNA/ED.aux b/UDLISNA/ED.aux new file mode 100644 index 0000000..1901cd8 --- /dev/null +++ b/UDLISNA/ED.aux @@ -0,0 +1,25 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\@setckpt{ED}{ +\setcounter{page}{3} +\setcounter{equation}{0} +\setcounter{enumi}{0} +\setcounter{enumii}{0} +\setcounter{enumiii}{0} +\setcounter{enumiv}{0} +\setcounter{footnote}{0} +\setcounter{mpfootnote}{0} +\setcounter{part}{0} +\setcounter{chapter}{0} +\setcounter{section}{0} +\setcounter{subsection}{0} +\setcounter{subsubsection}{0} +\setcounter{paragraph}{0} +\setcounter{subparagraph}{0} +\setcounter{figure}{0} +\setcounter{table}{0} +\setcounter{section@level}{0} +\setcounter{Item}{0} +\setcounter{Hfootnote}{0} +\setcounter{bookmark@seq@number}{0} +} diff --git a/UDLISNA/ED.tex b/UDLISNA/ED.tex new file mode 100644 index 0000000..bea74ca --- /dev/null +++ b/UDLISNA/ED.tex @@ -0,0 +1,215 @@ +\pagestyle{empty} + +\begin{center} +\large\textbf{Département FEDORA – INSA Lyon - Ecoles Doctorales} +\end{center} + +%\scriptsize +\fontsize{7.2pt}{7.2pt}\selectfont +\begin{center} +\begin{tabular}{|>{\centering}>{\columncolor[rgb]{0.90, 0.87, 0.93}}>{\color{txtED}}b{1.9cm}|b{7.2cm}|b{6.9cm}|} +\hline\vspace{.05cm} +\textbf{SIGLE}&\textbf{ECOLE DOCTORALE}&\textbf{NOM ET COORDONNEES DU RESPONSABLE}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 206\\ + \\ + CHIMIE\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{CHIMIE DE LYON}}\\[.2cm] + \textcolor{siteED}{\textbf{https://www.edchimie-lyon.fr}}\\ + Sec. : Renée EL MELHEM\\ + Bât. Blaise PASCAL, 3e étage\\ + \textcolor{blue}{\underline{\textbf{secretariat@edchimie-lyon.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{M. Stéphane DANIELE}}\\ + C2P2-CPE LYON-UMR 5265\\ + Bâtiment F308, BP 2077\\ + 43 Boulevard du 11 novembre 1918\\ + 69616 Villeurbanne\\ + \textcolor{blue}{\underline{\textbf{directeur@edchimie-lyon.fr}}}\\ + \end{tabular}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 341\\ + \\ + E2M2\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{ÉVOLUTION, ÉCOSYSTÈME, MICROBIOLOGIE, MODÉLISATION}}\\[.2cm] + \textcolor{siteED}{\textbf{http://e2m2.universite-lyon.fr }}\\ + Sec. : Bénédicte LANZA\\ + Bât. Atrium, UCB Lyon 1\\ + Tél : 04.72.44.83.62\\ + \textcolor{blue}{\underline{\textbf{secretariat.e2m2@univ-lyon1.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{Mme Sandrine CHARLES }}\\ + Université Claude Bernard Lyon 1\\ + UFR Biosciences\\ + Bâtiment Mendel\\ + 43, boulevard du 11 Novembre 1918\\ + 69622 Villeurbanne CEDEX\\ + \textcolor{blue}{\underline{\textbf{e2m2.codir@listes.univ-lyon1.fr}}}\\ + \end{tabular}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 205\\ + \\ + EDISS\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{INTERDISCIPLINAIRE SCIENCES-SANTÉ}}\\[.2cm] + \textcolor{siteED}{\textbf{http://ediss.universite-lyon.fr}}\\ + Sec. : Bénédicte LANZA\\ + Bât. Atrium, UCB Lyon 1\\ + Tél : 04.72.44.83.62\\ + \textcolor{blue}{\underline{\textbf{secretariat.ediss@univ-lyon1.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{Mme Sylvie RICARD-BLUM}}\\ + Laboratoire ICBMS - UMR 5246 CNRS - Université Lyon 1\\ + Bâtiment Raulin - 2ème étage Nord\\ + 43 Boulevard du 11 novembre 1918\\ + 69622 Villeurbanne Cedex\\ + Tél : +33(0)4 72 44 82 32\\ + \textcolor{blue}{\underline{\textbf{sylvie.ricard-blum@univ-lyon1.fr}}}\\ + \end{tabular}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 34\\ + \\ + EDML\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{MATÉRIAUX DE LYON}}\\[.2cm] + \textcolor{siteED}{\textbf{http://ed34.universite-lyon.fr}}\\ + Sec. : Yann DE ORDENANA\\ + Tél : 04.72.18.62.44\\ + \\ + \textcolor{blue}{\underline{\textbf{yann.de-ordenana@ec-lyon.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{M. Stéphane BENAYOUN}}\\ + Ecole Centrale de Lyon\\ + Laboratoire LTDS\\ + 36 avenue Guy de Collongue\\ + 69134 Ecully CEDEX\\ + Tél : 04.72.18.64.37\\ + \textcolor{blue}{\underline{\textbf{stephane.benayoun@ec-lyon.fr}}}\\ + \end{tabular}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 160\\ + \\ + EEA\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{ÉLECTRONIQUE, ÉLECTROTECHNIQUE, AUTOMATIQUE}}\\[.2cm] + \textcolor{siteED}{\textbf{https://edeea.universite-lyon.fr}}\\ + Sec. : Philomène TRECOURT\\ + Bâtiment Direction INSA Lyon\\ + Tél : 04.72.43.71.70\\ + \\ + \textcolor{blue}{\underline{\textbf{secretariat.edeea@insa-lyon.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{M. Philippe DELACHARTRE}}\\ + INSA LYON\\ + Laboratoire CREATIS\\ + Bâtiment Blaise Pascal, 7 avenue Jean Capelle\\ + 69621 Villeurbanne CEDEX\\ + Tél : 04.72.43.88.63\\ + \textcolor{blue}{\underline{\textbf{philippe.delachartre@insa-lyon.fr}}}\\ + \end{tabular}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 512\\ + \\ + INFOMATHS\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{INFORMATIQUE ET MATHÉMATIQUES}}\\[.2cm] + \textcolor{siteED}{\textbf{http://edinfomaths.universite-lyon.fr}}\\ + Sec. : Renée EL MELHEM\\ + Bât. Blaise PASCAL, 3e étage\\ + Tél : 04.72.43.80.46\\ + \textcolor{blue}{\underline{\textbf{infomaths@univ-lyon1.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{M. Hamamache KHEDDOUCI}}\\ + Université Claude Bernard Lyon 1\\ + Bât. Nautibus\\ + 43, Boulevard du 11 novembre 1918\\ + 69 622 Villeurbanne Cedex France\\ + Tél : 04.72.44.83.69\\ + \textcolor{blue}{\underline{\textbf{direction.infomaths@listes.univ-lyon1.fr}}}\\ + \end{tabular}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 162\\ + \\ + MEGA\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{MÉCANIQUE, ÉNERGÉTIQUE, GÉNIE CIVIL, ACOUSTIQUE}}\\[.2cm] + \textcolor{siteED}{\textbf{http://edmega.universite-lyon.fr}}\\ + Sec. : Philomène TRECOURT\\ + Tél : 04.72.43.71.70\\ + Bâtiment Direction INSA Lyon\\ + \textcolor{blue}{\underline{\textbf{mega@insa-lyon.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{M. Etienne PARIZET}}\\ + INSA Lyon\\ + Laboratoire LVA\\ + Bâtiment St. Exupéry\\ + 25 bis av. Jean Capelle\\ + 69621 Villeurbanne CEDEX\\ + \textcolor{blue}{\underline{\textbf{etienne.parizet@insa-lyon.fr}}}\\ + \end{tabular}\\ + +\hline + \begin{tabular}{@{}c@{}} + ED 483\\ + \\ + ScSo\end{tabular}& + \begin{tabular}{@{}l@{}} + \\ + \textbf{\underline{ScSo}}\footnotemark[1]\\[.2cm] + \textcolor{siteED}{\textbf{https://edsciencessociales.universite-lyon.fr}}\\ + Sec. : Mélina FAVETON\\ + Tél : 04.78.69.77.79\\ + \textcolor{blue}{\underline{\textbf{melina.faveton@univ-lyon2.fr}}}\\ + \\ + \end{tabular}& + \begin{tabular}{@{}l@{}} + \textcolor{txtED}{\textbf{M. Bruno MILLY}} (INSA : J.Y. TOUSSAINT)\\ + Univ. Lyon 2 Campus Berges du Rhône\\ + 18, quai Claude Bernard\\ + 69365 LYON CEDEX 07\\ + Bureau BEL 319\\ + \textcolor{blue}{\underline{\textbf{bruno.milly@univ-lyon2.fr}}}\\ + \end{tabular}\\ + + \hline +\end{tabular} +\end{center} + +\footnotetext[1]{\scriptsize ScSo : Histoire, Géographie, Aménagement, Urbanisme, Archéologie, Science politique, Sociologie, Anthropologie } diff --git a/UDLISNA/INSA.png b/UDLISNA/INSA.png new file mode 100644 index 0000000..b4055ca Binary files /dev/null and b/UDLISNA/INSA.png differ diff --git a/UDLISNA/UDL_INSA_couverture_these_latex.zip b/UDLISNA/UDL_INSA_couverture_these_latex.zip new file mode 100644 index 0000000..945c365 Binary files /dev/null and b/UDLISNA/UDL_INSA_couverture_these_latex.zip differ diff --git a/UDLISNA/folio.aux b/UDLISNA/folio.aux new file mode 100644 index 0000000..822f8a0 --- /dev/null +++ b/UDLISNA/folio.aux @@ -0,0 +1,25 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\@setckpt{folio}{ +\setcounter{page}{13} +\setcounter{equation}{0} +\setcounter{enumi}{0} +\setcounter{enumii}{0} +\setcounter{enumiii}{0} +\setcounter{enumiv}{0} +\setcounter{footnote}{0} +\setcounter{mpfootnote}{0} +\setcounter{part}{0} +\setcounter{chapter}{1} +\setcounter{section}{1} +\setcounter{subsection}{0} +\setcounter{subsubsection}{0} +\setcounter{paragraph}{0} +\setcounter{subparagraph}{0} +\setcounter{figure}{0} +\setcounter{table}{0} +\setcounter{section@level}{1} +\setcounter{Item}{0} +\setcounter{Hfootnote}{0} +\setcounter{bookmark@seq@number}{2} +} diff --git a/UDLISNA/folio.tex b/UDLISNA/folio.tex new file mode 100644 index 0000000..03dadf4 --- /dev/null +++ b/UDLISNA/folio.tex @@ -0,0 +1,57 @@ + +\newgeometry{top=.8cm,bottom=1cm,right=1.5cm,left=1.5cm} + +\begin{center} +\includegraphics[height=1.9cm]{INSA.png} +\end{center} + +\vspace{.3cm} +\footnotesize +\centering +\begin{tabular}{|p{8.6cm}p{8.6cm}|} + \multicolumn{2}{p{17.2cm}}{\center{\normalsize{\underline{FOLIO ADMINISTRATIF}}}}\\[-.2cm] + \multicolumn{2}{p{17.2cm}}{\center{\normalsize{\dotuline{THESE DE L’INSA LYON, MEMBRE DE L’UNIVERSITE DE LYON}}}}\\ + \multicolumn{2}{p{17.2cm}}{}\\ + \hline + &\\ + NOM : \textbf{(NOM)}&DATE de SOUTENANCE : \textbf{(Date)}\\ + (avec précision du nom de jeune fille, le cas échéant)&\\ + &\\ + Prénoms : \textbf{(Prénoms)}&\\ + &\\ + \multicolumn{2}{|p{17.2cm}|}{TITRE : \textbf{(TITRE)}}\\ + &\\ + &\\ + &\\ + &\\ + NATURE : \textbf{Doctorat}&Numéro d'ordre : \textbf{(donné au moment du dépôt)}\\ + &\\ + \multicolumn{2}{|p{17.2cm}|}{\'Ecole Doctorale : \textbf{\'Electronique, \'Electrotechnique et Automatique de Lyon}}\\ + &\\ + Spécialité : \textbf{\'Energie et Syst\`emes}&\\ + &\\ + &\\ + R\'ESUM\'E :&\\ + \multicolumn{2}{|p{17.2cm}|}{\lipsum[4]}\\ + \multicolumn{2}{|p{17.2cm}|}{\lipsum[3]}\\ + \multicolumn{2}{|p{17.2cm}|}{\lipsum[2]}\\ + &\\ + \multicolumn{2}{|p{17.2cm}|}{MOTS-CL\'ES : \textbf{(mots-clés)}}\\ + &\\ + &\\ + \multicolumn{2}{|p{17.2cm}|}{ + \begin{tabular}{@{}ll}%@{} pour avoir aucune bordure + Laboratoire(s) de recherche : &\textbf{(laboratoire(s))}\\ + \end{tabular}}\\ + &\\ + &\\ + \multicolumn{2}{|p{17.2cm}|}{Directeur de thèse : \textbf{(Directeur)}}\\ + &\\ + &\\ + \multicolumn{2}{|p{17.2cm}|}{Président du Jury : \textbf{(président, nommé au moment de la soutenance)}}\\ + &\\ + \multicolumn{2}{|p{17.2cm}|}{Composition du Jury :}\\ + \multicolumn{2}{|p{17.2cm}|}{\hspace{1cm}\textbf{(Jury)}}\\ + &\\ + \hline +\end{tabular} diff --git a/UDLISNA/garde.aux b/UDLISNA/garde.aux new file mode 100644 index 0000000..a9f4860 --- /dev/null +++ b/UDLISNA/garde.aux @@ -0,0 +1,25 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\@setckpt{garde}{ +\setcounter{page}{2} +\setcounter{equation}{0} +\setcounter{enumi}{0} +\setcounter{enumii}{0} +\setcounter{enumiii}{0} +\setcounter{enumiv}{0} +\setcounter{footnote}{0} +\setcounter{mpfootnote}{0} +\setcounter{part}{0} +\setcounter{chapter}{0} +\setcounter{section}{0} +\setcounter{subsection}{0} +\setcounter{subsubsection}{0} +\setcounter{paragraph}{0} +\setcounter{subparagraph}{0} +\setcounter{figure}{0} +\setcounter{table}{0} +\setcounter{section@level}{0} +\setcounter{Item}{0} +\setcounter{Hfootnote}{0} +\setcounter{bookmark@seq@number}{0} +} diff --git a/UDLISNA/garde.tex b/UDLISNA/garde.tex new file mode 100644 index 0000000..0950dbe --- /dev/null +++ b/UDLISNA/garde.tex @@ -0,0 +1,68 @@ +\newgeometry{top=1.85cm,bottom=2.5cm,right=1.6cm,left=1.85cm} + + +\begin{titlepage} + +\begin{tabular}{cc} + \includegraphics[height=3cm]{INSA.png} + \includegraphics[height=3cm]{partenaire.png} +\end{tabular} + +\vspace{1cm} + +\small +N° d'ordre NNT : $xxx$\\[-.4cm] + + +\begin{center} + +\Large + +\scalebox{1}[.9]{\textbf{THESE de DOCTORAT DE L’INSA LYON,}}\\[-.2cm] +\scalebox{1}[.9]{\textbf{membre de l’Université de Lyon}}\\[.5cm] + +\normalsize + +délivré en partenariat international avec\\ +\textbf{(Nom Etablissement)}\\[.5cm] + +\textbf{Ecole Doctorale} N° accréditation\\ +\textbf{(Nom complet Ecole Doctorale)}\\[.4cm] +\textbf{Spécialité/ discipline de doctorat :}\\[2.1cm] + + +\normalsize +Soutenue publiquement/à huis clos le jj/mm/aaaa, par :\\ +\Large +\scalebox{1}[.9]{\textbf{(Prénoms Nom)}}\\[.7cm] + +\hrulefill\\[.3cm] +\Huge +\textbf{Titre de la thèse} + +\hrulefill\\[2cm] + + +\end{center} + +\normalsize +Devant le jury composé de :\\[.3cm] + +\small + +\begin{tabular}{lllll} +&&&&\\ +NOM&Prénom&grade/qualité&établissement/entreprise&\textcolor{red}{Président.e (à préciser après la soutenance)} \\ +NOM&Prénom&grade/qualité&établissement/entreprise&\textcolor{red}{Rapporteur.e}\\ +NOM&Prénom&grade/qualité&établissement/entreprise&\textcolor{red}{Rapporteur.e}\\ +NOM&Prénom&grade/qualité&établissement/entreprise&\textcolor{red}{Examinateur.rice}\\ +NOM&Prénom&grade/qualité&établissement/entreprise&\textcolor{red}{Examinateur.rice}\\ +&&&&\\ +NOM&Prénom&grade/qualité&établissement/entreprise&Directeur.rice de thèse\\ +NOM&Prénom&grade/qualité&établissement/entreprise&\textcolor{red}{Co-directeur.rice de thèse}\\ +NOM&Prénom&grade/qualité&établissement/entreprise&\textcolor{red}{Invité.e}\\ +\end{tabular} + + + +\end{titlepage} diff --git a/UDLISNA/partenaire.png b/UDLISNA/partenaire.png new file mode 100644 index 0000000..8c8fa9f Binary files /dev/null and b/UDLISNA/partenaire.png differ diff --git a/UDLISNA/template_these_INSA_cotut.aux b/UDLISNA/template_these_INSA_cotut.aux new file mode 100644 index 0000000..65e8375 --- /dev/null +++ b/UDLISNA/template_these_INSA_cotut.aux @@ -0,0 +1,19 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\providecommand\babel@aux[2]{} +\@nameuse{bbl@beforestart} +\catcode `:\active +\catcode `;\active +\catcode `!\active +\catcode `?\active +\@input{garde.aux} +\babel@aux{french}{} +\@input{ED.aux} +\@writefile{toc}{\contentsline {chapter}{\numberline {1}Titre chapitre}{5}{chapter.1}\protected@file@percent } +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {section}{\numberline {1.1}Titre section}{6}{section.1.1}\protected@file@percent } +\@input{folio.aux} +\gdef \@abspage@last{12} diff --git a/UDLISNA/template_these_INSA_cotut.log b/UDLISNA/template_these_INSA_cotut.log new file mode 100644 index 0000000..7910941 --- /dev/null +++ b/UDLISNA/template_these_INSA_cotut.log @@ -0,0 +1,714 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.26 (TeX Live 2024/Arch Linux) (preloaded format=pdflatex 2024.6.8) 5 SEP 2024 14:00 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**template_these_INSA_cotut.tex +(./template_these_INSA_cotut.tex +LaTeX2e <2023-11-01> patch level 1 +L3 programming layer <2024-02-20> +(/usr/share/texmf-dist/tex/latex/base/report.cls +Document Class: report 2023/05/17 v1.4n Standard LaTeX document class +(/usr/share/texmf-dist/tex/latex/base/size12.clo +File: size12.clo 2023/05/17 v1.4n Standard LaTeX file (size option) +) +\c@part=\count188 +\c@chapter=\count189 +\c@section=\count190 +\c@subsection=\count191 +\c@subsubsection=\count192 +\c@paragraph=\count193 +\c@subparagraph=\count194 +\c@figure=\count195 +\c@table=\count196 +\abovecaptionskip=\skip48 +\belowcaptionskip=\skip49 +\bibindent=\dimen140 +) +(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/share/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2022/05/29 v1.15 key=value parser (DPC) +\KV@toks@=\toks17 +) +(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) + +(/usr/share/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2021/08/11 v1.11 sin cos tan (DPC) +) +(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: pdftex.def on input line 107. + +(/usr/share/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex +)) +\Gin@req@height=\dimen141 +\Gin@req@width=\dimen142 +) +(/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2023/11/15 v3.01 LaTeX color extensions (UK) + +(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg +File: color.cfg 2016/01/02 v1.6 sample color configuration +) +Package xcolor Info: Driver file: pdftex.def on input line 274. + +(/usr/share/texmf-dist/tex/latex/graphics/mathcolor.ltx) +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1350. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1354. +Package xcolor Info: Model `RGB' extended on input line 1366. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1368. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1369. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1370. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1371. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1372. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1373. +) +(/usr/share/texmf-dist/tex/latex/geometry/geometry.sty +Package: geometry 2020/01/02 v5.9 Page Geometry + +(/usr/share/texmf-dist/tex/generic/iftex/ifvtex.sty +Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. + +(/usr/share/texmf-dist/tex/generic/iftex/iftex.sty +Package: iftex 2022/02/03 v1.0f TeX engine tests +)) +\Gm@cnth=\count197 +\Gm@cntv=\count198 +\c@Gm@tempcnt=\count199 +\Gm@bindingoffset=\dimen143 +\Gm@wd@mp=\dimen144 +\Gm@odd@mp=\dimen145 +\Gm@even@mp=\dimen146 +\Gm@layoutwidth=\dimen147 +\Gm@layoutheight=\dimen148 +\Gm@layouthoffset=\dimen149 +\Gm@layoutvoffset=\dimen150 +\Gm@dimlist=\toks18 +) +(/usr/share/texmf-dist/tex/latex/hyperref/hyperref.sty +Package: hyperref 2024-01-20 v7.01h Hypertext links for LaTeX + +(/usr/share/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty +Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) +) +(/usr/share/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) +) +(/usr/share/texmf-dist/tex/generic/pdfescape/pdfescape.sty +Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) + +(/usr/share/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO) +) +(/usr/share/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO +) + +(/usr/share/texmf-dist/tex/generic/infwarerr/infwarerr.sty +Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) +) +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +Package pdftexcmds Info: \pdfdraftmode found. +)) +(/usr/share/texmf-dist/tex/latex/hycolor/hycolor.sty +Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) +) +(/usr/share/texmf-dist/tex/latex/auxhook/auxhook.sty +Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO) +) +(/usr/share/texmf-dist/tex/latex/hyperref/nameref.sty +Package: nameref 2023-11-26 v2.56 Cross-referencing by name of section + +(/usr/share/texmf-dist/tex/latex/refcount/refcount.sty +Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) +) +(/usr/share/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) + +(/usr/share/texmf-dist/tex/latex/kvoptions/kvoptions.sty +Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) +)) +\c@section@level=\count266 +) +(/usr/share/texmf-dist/tex/latex/etoolbox/etoolbox.sty +Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) +\etb@tempcnta=\count267 +) +\@linkdim=\dimen151 +\Hy@linkcounter=\count268 +\Hy@pagecounter=\count269 + +(/usr/share/texmf-dist/tex/latex/hyperref/pd1enc.def +File: pd1enc.def 2024-01-20 v7.01h Hyperref: PDFDocEncoding definition (HO) +Now handling font encoding PD1 ... +... no UTF-8 mapping file for font encoding PD1 +) +(/usr/share/texmf-dist/tex/generic/intcalc/intcalc.sty +Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) +) +\Hy@SavedSpaceFactor=\count270 + +(/usr/share/texmf-dist/tex/latex/hyperref/puenc.def +File: puenc.def 2024-01-20 v7.01h Hyperref: PDF Unicode definition (HO) +Now handling font encoding PU ... +... no UTF-8 mapping file for font encoding PU +) +Package hyperref Info: Option `colorlinks' set `false' on input line 4062. +Package hyperref Info: Hyper figures OFF on input line 4179. +Package hyperref Info: Link nesting OFF on input line 4184. +Package hyperref Info: Hyper index ON on input line 4187. +Package hyperref Info: Plain pages OFF on input line 4194. +Package hyperref Info: Backreferencing OFF on input line 4199. +Package hyperref Info: Implicit mode ON; LaTeX internals redefined. +Package hyperref Info: Bookmarks ON on input line 4446. +\c@Hy@tempcnt=\count271 + +(/usr/share/texmf-dist/tex/latex/url/url.sty +\Urlmuskip=\muskip16 +Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. +) +LaTeX Info: Redefining \url on input line 4784. +\XeTeXLinkMargin=\dimen152 + +(/usr/share/texmf-dist/tex/generic/bitset/bitset.sty +Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) + +(/usr/share/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO +) +)) +\Fld@menulength=\count272 +\Field@Width=\dimen153 +\Fld@charsize=\dimen154 +Package hyperref Info: Hyper figures OFF on input line 6063. +Package hyperref Info: Link nesting OFF on input line 6068. +Package hyperref Info: Hyper index ON on input line 6071. +Package hyperref Info: backreferencing OFF on input line 6078. +Package hyperref Info: Link coloring OFF on input line 6083. +Package hyperref Info: Link coloring with OCG OFF on input line 6088. +Package hyperref Info: PDF/A mode OFF on input line 6093. + +(/usr/share/texmf-dist/tex/latex/base/atbegshi-ltx.sty +Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi +package with kernel methods +) +\Hy@abspage=\count273 +\c@Item=\count274 +\c@Hfootnote=\count275 +) +Package hyperref Info: Driver: hpdftex. + +(/usr/share/texmf-dist/tex/latex/hyperref/hpdftex.def +File: hpdftex.def 2024-01-20 v7.01h Hyperref driver for pdfTeX + +(/usr/share/texmf-dist/tex/latex/base/atveryend-ltx.sty +Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend pac +kage +with kernel methods +) +\Fld@listcount=\count276 +\c@bookmark@seq@number=\count277 + +(/usr/share/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO) + +(/usr/share/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) +) +Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 +85. +) +\Hy@SectionHShift=\skip50 +) +(/usr/share/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2024/02/07 v24.2 The Babel package +\babel@savecnt=\count278 +\U@D=\dimen155 +\l@unhyphenated=\language7 + +(/usr/share/texmf-dist/tex/generic/babel/txtbabel.def) +\bbl@readstream=\read2 +\bbl@dirlevel=\count279 + +(/usr/share/texmf-dist/tex/generic/babel-french/french.ldf +Language: french 2024-02-29 v3.5s French support from the babel system +Package babel Info: Hyphen rules for 'acadian' set to \l@french +(babel) (\language6). Reported on input line 91. +Package babel Info: Hyphen rules for 'canadien' set to \l@french +(babel) (\language6). Reported on input line 92. +\FB@stdchar=\count280 +Package babel Info: Making : an active character on input line 420. +Package babel Info: Making ; an active character on input line 421. +Package babel Info: Making ! an active character on input line 422. +Package babel Info: Making ? an active character on input line 423. +\FBguill@level=\count281 +\FBold@everypar=\toks19 +\FB@Mht=\dimen156 +\mc@charclass=\count282 +\mc@charfam=\count283 +\mc@charslot=\count284 +\std@mcc=\count285 +\dec@mcc=\count286 +\FB@parskip=\dimen157 +\listindentFB=\dimen158 +\descindentFB=\dimen159 +\labelindentFB=\dimen160 +\labelwidthFB=\dimen161 +\leftmarginFB=\dimen162 +\parindentFFN=\dimen163 +\FBfnindent=\dimen164 +)) +(/usr/share/texmf-dist/tex/generic/babel/locale/fr/babel-french.tex +Package babel Info: Importing font and identification data for french +(babel) from babel-fr.ini. Reported on input line 11. +) +(/usr/share/texmf-dist/tex/latex/carlisle/scalefnt.sty) +(/usr/share/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2021/04/29 v2.0v Standard LaTeX package +) +(/usr/share/texmf-dist/tex/latex/psnfss/helvet.sty +Package: helvet 2020/03/25 PSNFSS-v9.3 (WaS) +) +(/usr/share/texmf-dist/tex/latex/colortbl/colortbl.sty +Package: colortbl 2024/02/20 v1.0g Color table columns (DPC) + +(/usr/share/texmf-dist/tex/latex/tools/array.sty +Package: array 2023/10/16 v2.5g Tabular extension package (FMi) +\col@sep=\dimen165 +\ar@mcellbox=\box51 +\extrarowheight=\dimen166 +\NC@list=\toks20 +\extratabsurround=\skip51 +\backup@length=\skip52 +\ar@cellbox=\box52 +) +\everycr=\toks21 +\minrowclearance=\skip53 +\rownum=\count287 +) +(/usr/share/texmf-dist/tex/generic/ulem/ulem.sty +\UL@box=\box53 +\UL@hyphenbox=\box54 +\UL@skip=\skip54 +\UL@hook=\toks22 +\UL@height=\dimen167 +\UL@pe=\count288 +\UL@pixel=\dimen168 +\ULC@box=\box55 +Package: ulem 2019/11/18 +\ULdepth=\dimen169 +) +(/usr/share/texmf-dist/tex/latex/lipsum/lipsum.sty +(/usr/share/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +(/usr/share/texmf-dist/tex/latex/l3kernel/expl3.sty +Package: expl3 2024-02-20 L3 programming layer (loader) + +(/usr/share/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +File: l3backend-pdftex.def 2024-02-20 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count289 +\l__pdf_internal_box=\box56 +)) +Package: l3keys2e 2024-02-18 LaTeX2e option processing using LaTeX3 keys +) +Package: lipsum 2021-09-20 v2.7 150 paragraphs of Lorem Ipsum dummy text +\g__lipsum_par_int=\count290 +\l__lipsum_a_int=\count291 +\l__lipsum_b_int=\count292 + +(/usr/share/texmf-dist/tex/latex/lipsum/lipsum.ltd.tex)) +LaTeX Font Info: Trying to load font information for T1+phv on input line 21 +. + +(/usr/share/texmf-dist/tex/latex/psnfss/t1phv.fd +File: t1phv.fd 2020/03/25 scalable font definitions for T1/phv. +) +LaTeX Font Info: Font shape `T1/phv/m/n' will be +(Font) scaled to size 11.39996pt on input line 21. + +No file template_these_INSA_cotut.aux. +\openout1 = `template_these_INSA_cotut.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count293 +\scratchdimen=\dimen170 +\scratchbox=\box57 +\nofMPsegments=\count294 +\nofMParguments=\count295 +\everyMPshowfont=\toks23 +\MPscratchCnt=\count296 +\MPscratchDim=\dimen171 +\MPnumerator=\count297 +\makeMPintoPDFobject=\count298 +\everyMPtoPDFconversion=\toks24 +) (/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf +Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 +85. + +(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +*geometry* driver: auto-detecting +*geometry* detected driver: pdftex +*geometry* verbose mode - [ preamble ] result: +* driver: pdftex +* paper: a4paper +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: twoside +* h-part:(L,W,R)=(71.13188pt, 455.24411pt, 71.13188pt) +* v-part:(T,H,B)=(71.13188pt, 702.78308pt, 71.13188pt) +* \paperwidth=597.50787pt +* \paperheight=845.04684pt +* \textwidth=455.24411pt +* \textheight=702.78308pt +* \oddsidemargin=-1.1381pt +* \evensidemargin=-1.1381pt +* \topmargin=-38.1381pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=12.0pt +* \footskip=30.0pt +* \marginparwidth=85.0pt +* \marginparsep=10.0pt +* \columnsep=10.0pt +* \skip\footins=10.8pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidetrue +* \@mparswitchtrue +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +Package hyperref Info: Link coloring OFF on input line 21. +\@outlinefile=\write3 +\openout3 = `template_these_INSA_cotut.out'. + +LaTeX Info: Redefining \degres on input line 21. +LaTeX Info: Redefining \up on input line 21. +\openout2 = `garde.aux'. + +(./garde.tex +*geometry* verbose mode - [ newgeometry ] result: +* driver: pdftex +* paper: a4paper +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: twoside +* h-part:(L,W,R)=(52.63777pt, 499.34552pt, 45.52458pt) +* v-part:(T,H,B)=(52.63777pt, 721.27719pt, 71.13188pt) +* \paperwidth=597.50787pt +* \paperheight=845.04684pt +* \textwidth=499.34552pt +* \textheight=721.27719pt +* \oddsidemargin=-19.63222pt +* \evensidemargin=-26.7454pt +* \topmargin=-56.63222pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=12.0pt +* \footskip=30.0pt +* \marginparwidth=85.0pt +* \marginparsep=10.0pt +* \columnsep=10.0pt +* \skip\footins=10.8pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidetrue +* \@mparswitchtrue +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <12> on input line 6. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <8> on input line 6. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <6> on input line 6. + +File: INSA.png Graphic file (type png) + +Package pdftex.def Info: INSA.png used on input line 7. +(pdftex.def) Requested size: 301.19356pt x 85.35826pt. + +File: partenaire.png Graphic file (type png) + +Package pdftex.def Info: partenaire.png used on input line 8. +(pdftex.def) Requested size: 190.23538pt x 85.35826pt. + +Overfull \hbox (24.8773pt too wide) in paragraph at lines 6--10 +[][] + [] + +LaTeX Font Info: Font shape `T1/phv/m/n' will be +(Font) scaled to size 10.40245pt on input line 13. +LaTeX Font Info: Trying to load font information for TS1+phv on input line 1 +4. +(/usr/share/texmf-dist/tex/latex/psnfss/ts1phv.fd +File: ts1phv.fd 2020/03/25 scalable font definitions for TS1/phv. +) +LaTeX Font Info: Font shape `TS1/phv/m/n' will be +(Font) scaled to size 10.40245pt on input line 14. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <10.95> on input line 14. + +Underfull \hbox (badness 10000) in paragraph at lines 14--15 + + [] + +LaTeX Font Info: Font shape `T1/phv/m/n' will be +(Font) scaled to size 16.41594pt on input line 19. +LaTeX Font Info: Font shape `T1/phv/b/n' will be +(Font) scaled to size 16.41594pt on input line 21. +LaTeX Font Info: Font shape `T1/phv/b/n' will be +(Font) scaled to size 11.39996pt on input line 27. +LaTeX Font Info: Font shape `TS1/phv/m/n' will be +(Font) scaled to size 11.39996pt on input line 29. +LaTeX Font Info: Font shape `T1/phv/m/n' will be +(Font) scaled to size 23.63593pt on input line 40. +LaTeX Font Info: Font shape `T1/phv/b/n' will be +(Font) scaled to size 23.63593pt on input line 41. + +Underfull \hbox (badness 10000) in paragraph at lines 49--50 + + [] + + +Overfull \hbox (16.81996pt too wide) in paragraph at lines 53--65 +[][] + [] + +[1 + + + +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}{/usr/share/texmf-dist/fonts +/enc/dvips/base/8r.enc} <./INSA.png> <./partenaire.png>]) +*geometry* verbose mode - [ newgeometry ] result: +* driver: pdftex +* paper: a4paper +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: twoside +* h-part:(L,W,R)=(71.13188pt, 455.24411pt, 71.13188pt) +* v-part:(T,H,B)=(71.13188pt, 702.78308pt, 71.13188pt) +* \paperwidth=597.50787pt +* \paperheight=845.04684pt +* \textwidth=455.24411pt +* \textheight=702.78308pt +* \oddsidemargin=-1.1381pt +* \evensidemargin=-1.1381pt +* \topmargin=-38.1381pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=12.0pt +* \footskip=30.0pt +* \marginparwidth=85.0pt +* \marginparsep=10.0pt +* \columnsep=10.0pt +* \skip\footins=10.8pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidetrue +* \@mparswitchtrue +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +\openout2 = `ED.aux'. + + (./ED.tex +LaTeX Font Info: Font shape `T1/phv/m/n' will be +(Font) scaled to size 13.67995pt on input line 4. +LaTeX Font Info: Font shape `T1/phv/b/n' will be +(Font) scaled to size 13.67995pt on input line 4. +LaTeX Font Info: Font shape `T1/phv/m/n' will be +(Font) scaled to size 6.83997pt on input line 8. +LaTeX Font Info: Calculating math sizes for size <7.2> on input line 10. + + +LaTeX Font Warning: Font shape `OT1/cmr/m/n' in size <3.59999> not available +(Font) size <5> substituted on input line 10. + + +LaTeX Font Warning: Font shape `OML/cmm/m/it' in size <3.59999> not available +(Font) size <5> substituted on input line 10. + + +LaTeX Font Warning: Font shape `OMS/cmsy/m/n' in size <3.59999> not available +(Font) size <5> substituted on input line 10. + +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <7.2> on input line 10. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <5.03996> on input line 10. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <3.59999> on input line 10. +LaTeX Font Info: Font shape `T1/phv/b/n' will be +(Font) scaled to size 6.83997pt on input line 12. + +Overfull \hbox (1.5543pt too wide) in paragraph at lines 42--51 +[]|[]| + [] + +LaTeX Font Info: Font shape `T1/phv/m/n' will be +(Font) scaled to size 4.78795pt on input line 195. + +Overfull \hbox (37.5995pt too wide) in paragraph at lines 10--213 + [] + [] + +LaTeX Font Info: Font shape `T1/phv/m/n' will be +(Font) scaled to size 9.49997pt on input line 215. +LaTeX Font Info: Font shape `T1/phv/m/n' will be +(Font) scaled to size 7.59998pt on input line 215. +) [2 + + + + +] +No file template_these_INSA_cotut.toc. +\tf@toc=\write4 +\openout4 = `template_these_INSA_cotut.toc'. + +[3 + + + +] [4 + +] +Chapitre 1. + +Package lipsum Warning: Unknown language 'latin'. Hyphenation patterns for +(lipsum) 'french' will be used instead. + +[5{/usr/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc}] [6] +[7] [8 + +] [9] [10 + +] [11] +\openout2 = `folio.aux'. + + (./folio.tex +*geometry* verbose mode - [ newgeometry ] result: +* driver: pdftex +* paper: a4paper +* layout: +* layoutoffset:(h,v)=(0.0pt,0.0pt) +* modes: twoside +* h-part:(L,W,R)=(42.67912pt, 512.14963pt, 42.67912pt) +* v-part:(T,H,B)=(22.76228pt, 793.83182pt, 28.45274pt) +* \paperwidth=597.50787pt +* \paperheight=845.04684pt +* \textwidth=512.14963pt +* \textheight=793.83182pt +* \oddsidemargin=-29.59087pt +* \evensidemargin=-29.59087pt +* \topmargin=-86.5077pt +* \headheight=12.0pt +* \headsep=25.0pt +* \topskip=12.0pt +* \footskip=30.0pt +* \marginparwidth=85.0pt +* \marginparsep=10.0pt +* \columnsep=10.0pt +* \skip\footins=10.8pt plus 4.0pt minus 2.0pt +* \hoffset=0.0pt +* \voffset=0.0pt +* \mag=1000 +* \@twocolumnfalse +* \@twosidetrue +* \@mparswitchtrue +* \@reversemarginfalse +* (1in=72.27pt=25.4mm, 1cm=28.453pt) + +File: INSA.png Graphic file (type png) + +Package pdftex.def Info: INSA.png used on input line 5. +(pdftex.def) Requested size: 190.75993pt x 54.06006pt. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <7> on input line 11. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <5> on input line 11. +LaTeX Font Info: Font shape `T1/phv/b/n' will be +(Font) scaled to size 9.49997pt on input line 17. +) +Overfull \hbox (2.03809pt too wide) in paragraph at lines 11--58 + [][] + [] + +[12 + + +] (./template_these_INSA_cotut.aux (./garde.aux) (./ED.aux) (./folio.aux)) + *********** +LaTeX2e <2023-11-01> patch level 1 +L3 programming layer <2024-02-20> + *********** + + +LaTeX Font Warning: Size substitutions with differences +(Font) up to 1.40001pt have occurred. + + +Package rerunfilecheck Warning: File `template_these_INSA_cotut.out' has change +d. +(rerunfilecheck) Rerun to get outlines right +(rerunfilecheck) or use package `bookmark'. + +Package rerunfilecheck Info: Checksums for `template_these_INSA_cotut.out': +(rerunfilecheck) Before: +(rerunfilecheck) After: 060BC25C280311525CA4FC023B16CA27;238. + ) +Here is how much of TeX's memory you used: + 12205 strings out of 476047 + 192749 string characters out of 5792627 + 1955187 words of memory out of 5000000 + 34135 multiletter control sequences out of 15000+600000 + 602829 words of font info for 80 fonts, out of 8000000 for 9000 + 14 hyphenation exceptions out of 8191 + 79i,21n,93p,277b,517s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on template_these_INSA_cotut.pdf (12 pages, 152970 bytes). +PDF statistics: + 96 PDF objects out of 1000 (max. 8388607) + 69 compressed objects within 1 object stream + 18 named destinations out of 1000 (max. 500000) + 11 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/UDLISNA/template_these_INSA_cotut.out b/UDLISNA/template_these_INSA_cotut.out new file mode 100644 index 0000000..4d50a5f --- /dev/null +++ b/UDLISNA/template_these_INSA_cotut.out @@ -0,0 +1,2 @@ +\BOOKMARK [0][-]{chapter.1}{\376\377\000T\000i\000t\000r\000e\000\040\000c\000h\000a\000p\000i\000t\000r\000e}{}% 1 +\BOOKMARK [1][-]{section.1.1}{\376\377\000T\000i\000t\000r\000e\000\040\000s\000e\000c\000t\000i\000o\000n}{chapter.1}% 2 diff --git a/UDLISNA/template_these_INSA_cotut.pdf b/UDLISNA/template_these_INSA_cotut.pdf new file mode 100644 index 0000000..3b06508 Binary files /dev/null and b/UDLISNA/template_these_INSA_cotut.pdf differ diff --git a/UDLISNA/template_these_INSA_cotut.tcp b/UDLISNA/template_these_INSA_cotut.tcp new file mode 100644 index 0000000..fa003ab --- /dev/null +++ b/UDLISNA/template_these_INSA_cotut.tcp @@ -0,0 +1,12 @@ +[FormatInfo] +Type=TeXnicCenterProjectInformation +Version=4 + +[ProjectInfo] +MainFile=template_these_INSA_cotut.tex +UseBibTeX=0 +UseMakeIndex=0 +ActiveProfile=LaTeX ⇨ PDF +ProjectLanguage=en +ProjectDialect=US + diff --git a/UDLISNA/template_these_INSA_cotut.tex b/UDLISNA/template_these_INSA_cotut.tex new file mode 100644 index 0000000..bcb90b9 --- /dev/null +++ b/UDLISNA/template_these_INSA_cotut.tex @@ -0,0 +1,61 @@ +\documentclass[a4paper,titlepage,12pt,french,twoside,openright]{report} + +\usepackage{graphicx} +\usepackage{xcolor} +\usepackage[paper=a4paper,margin=2.5cm]{geometry}% http://ctan.org/pkg/geometry +\usepackage[pdftex,colorlinks=false]{hyperref} +\usepackage[french]{babel} +\usepackage[T1]{fontenc} +\usepackage[scaled]{helvet} +\renewcommand*{\familydefault}{\sfdefault} +\usepackage{colortbl} +\usepackage{ulem} +\usepackage{lipsum} + +\definecolor{tabED}{rgb}{0.90, 0.87, 0.93} +\definecolor{txtED}{rgb}{0.60, 0.28, 0.02} +\definecolor{siteED}{rgb}{0.04, 0.27, 0.47} + + + +\begin{document} + +\hypersetup{ +pdftitle={Titre de la thèse}, %informations dans le titre +pdfauthor={Auteur}, %dans les informations du document +pdfsubject={Th\`ese} %sous Acrobat. +} + +\include{garde} + +\newgeometry{top=2.5cm,bottom=2.5cm,right=2.5cm,left=2.5cm} + + +\include{ED} + +\normalsize +\normalfont +\rmfamily + +\tableofcontents +\newpage + +\chapter{Titre chapitre} +\textit{\lipsum[1-2]} + +\newpage +\section{Titre section} +\lipsum[3-12] + +\newpage +\chapter*{Liste des figures} + +\newpage +\chapter*{Liste des tableaux} + +\newpage +\sffamily +\include{folio} + + +\end{document} diff --git a/UDLISNA/template_these_INSA_cotut.toc b/UDLISNA/template_these_INSA_cotut.toc new file mode 100644 index 0000000..2a14803 --- /dev/null +++ b/UDLISNA/template_these_INSA_cotut.toc @@ -0,0 +1,3 @@ +\babel@toc {french}{}\relax +\contentsline {chapter}{\numberline {1}Titre chapitre}{5}{chapter.1}% +\contentsline {section}{\numberline {1.1}Titre section}{6}{section.1.1}% diff --git a/UDLISNA/template_these_INSA_cotut.tps b/UDLISNA/template_these_INSA_cotut.tps new file mode 100644 index 0000000..5aaed3b --- /dev/null +++ b/UDLISNA/template_these_INSA_cotut.tps @@ -0,0 +1,80 @@ +[FormatInfo] +Type=TeXnicCenterProjectSessionInformation +Version=2 + +[Frame0] +Flags=0 +ShowCmd=1 +MinPos.x=-1 +MinPos.y=-1 +MaxPos.x=-1 +MaxPos.y=-1 +NormalPos.left=4 +NormalPos.top=26 +NormalPos.right=1635 +NormalPos.bottom=601 +Class=LaTeXView +Document=template_these_INSA_cotut.tex + +[Frame0_View0,0] +TopLine=7 +Cursor=845 + +[Frame1] +Flags=0 +ShowCmd=1 +MinPos.x=-1 +MinPos.y=-1 +MaxPos.x=-1 +MaxPos.y=-1 +NormalPos.left=4 +NormalPos.top=26 +NormalPos.right=1635 +NormalPos.bottom=601 +Class=LaTeXView +Document=garde.tex + +[Frame1_View0,0] +TopLine=9 +Cursor=460 + +[Frame2] +Flags=0 +ShowCmd=1 +MinPos.x=-1 +MinPos.y=-1 +MaxPos.x=-1 +MaxPos.y=-1 +NormalPos.left=4 +NormalPos.top=26 +NormalPos.right=1635 +NormalPos.bottom=601 +Class=LaTeXView +Document=ED.tex + +[Frame2_View0,0] +TopLine=0 +Cursor=0 + +[Frame3] +Flags=0 +ShowCmd=1 +MinPos.x=-1 +MinPos.y=-1 +MaxPos.x=-1 +MaxPos.y=-1 +NormalPos.left=4 +NormalPos.top=26 +NormalPos.right=1635 +NormalPos.bottom=601 +Class=LaTeXView +Document=folio.tex + +[Frame3_View0,0] +TopLine=0 +Cursor=0 + +[SessionInfo] +FrameCount=4 +ActiveFrame=1 + diff --git a/aia/< b/aia/< new file mode 100644 index 0000000..9b2b48a --- /dev/null +++ b/aia/< @@ -0,0 +1,14 @@ +Nous avons vu à la Section~\ref{} que, pour imposer l'équitée à un modèle, nous pouvons utiliser différentes méthodes qui agissent lors de l'entraînement. +Utiliser ces méthodes peut causer une augmentation de certain risque liée à la confidentialité des donnée d'entraînement, ainsi il est admis qu'il y ai un compromis à faire enre equitée et confidentialitée~\cite{dudu2023sok}. +Cependant ce compromis ne concerne que les risquées liée aux attaque de MIA et rentre en coflit avec la confidentialité diférentielles~\cite{chang2021privacy,cummings,ijcai2022p766}. + +Dans ce chapitre nous allons étudier les intéractions entre ces mécanismes d'équitée et l'attaque AIA. +Nous allons montrer que sous cet angle, l'équitée et la confidentialitée travailent de concert. +Cette étude peut être vue sous deux angles. +Le premier aspect consiste à étudier comment les mécanisme d'équitée peuvent être utilisé pour mitiger différent types d'AIA. +Le second aspect, en lien avec le primer, est d'utiliser les AIA pour contrôler dans un environement boîte noire le niveau d'équitée d'un modèle. + +\subsection{Contributions} +Dans ce chaptre nous apportons les contributions suivante : +\begin{itemize} + \itme diff --git a/aia/a.tex b/aia/a.tex new file mode 100644 index 0000000..5d25e64 --- /dev/null +++ b/aia/a.tex @@ -0,0 +1,72 @@ + +\begin{figure*}[!htb] + \centering + \footnotesize + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_race.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_soft_experimental_sex.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_hard_race.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_hard_sex.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_race.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_soft_experimental_sex.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_race.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_sex.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_race.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_soft_experimental_sex.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_race.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_sex.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_race.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_soft_experimental_sex.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_race.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewdith} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_sex.pdf} + \caption{Census (race)} + \end{subfigure} + + \caption{For both \AIASoft and \AIAHard, Adversarial debisaing reduces the attack accuracy to random guess ($\sim$50\%). For \AIAHard, the theoretical bound on attack accuracy matches with the empirical results.} + \label{fig:AdaptAIADebias} +\end{figure*} diff --git a/aia/aia.tex b/aia/aia.tex new file mode 100644 index 0000000..39db20b --- /dev/null +++ b/aia/aia.tex @@ -0,0 +1,46 @@ +\subsection{Modèle de menace}\footnote{\textit{Threat model}} +Nous considéront qu'un adversaire souhatie conduire une AIA pour un attribute sensible sur un modèle cible. +Le but de l'adversaire est d'inférer l'attribut sensible à partir uniquement des prédictions du modèle cible. +L'adversaire a accès une base de donnée que nous appelons auxillière et qui ne contient pas d'individu en commun avec la base de donée d'entraînement du modèle cible que nous appelon base cible. +La base cible ne contiens pas l'attribut sensible qui n'a donc pas été utilisé à l'entraînement. +La base auxilière contiens l'attribut sensible et des prédictions du modèle cible correspondantes à ces attributs sensibles. +La base auxilmière ne contient pas les donnés d'entrée car sinon l'adversaire pourrait simplement entraîner un modèle pour inférer l'attribut sensible à partir des données d'entrée et le modèle cible n'aporterai pas plus d'informations~\cite{jayaraman2022attribute}. +Il n'est pas du ressort de cette étude d'étudier commen un adversaire pourrait avoir accès à une telle base de donnée. +Cela pourrait être le cas après une fuite de donnée ou une attaque de type homme du milieu\footnote{\textit{Man in the middle}}. + +\subsection{AIA pour les modèles de classification} +Considérons que le modèle cible prennet ses valeurs dans $F$, un ensemble fini. +C'est à dire que le modèle cible ne donne accès à l'attaquant que des prédictions d'étiquette. +Cela peut-être le cas après application d'un seuil sur un logit par exemple. +Alors le but de l'attaquant est de trouver une fonction mesutable de $(F,\mathcal{P}(F))$ dans $(G,\mathcal{P}(G))$ qui maximise l'exactitude équilibrée. +Où $G$ est l'ensemble dans lequel l'attribut sensible prend ces valeurs. +Cela est un cas d'application parfait pour l'algorithme que nous avons construit au Chapitre~\ref{sec:fini}. +Nous allons l'utiliser pour construir une AIA qui donne la garantie théorique d'être le meilleur modèle qui permette de classifier l'attribut sensible en utilisant la prédiction du modèle. +Nous appelons cette AIA : \AIAHard. + +\subsection{AIA pour les modèles de regression} +Dans le cas d'un modèle cible qui effectu une regression nous avons $\#F$ infini donc nous ne pouvons pas utiliser \AIAHard. +Ce cas où l'adversaire a accès un modèle de regression prend en compte le cas où le modèle cible de prédiction divulgue un logit par exemple. +C'est le modèle de menace qu'applique Song et. al~\cite{Song2020Overlearning} dans leur AIA. + +Nous utiliserons comme modèle d'AIA une forêt aléatoire puis nous optimiserons son seuil en utilisant la courbe ROC pour prendre en compte le déséquilibre de classses dans l'attribut sensible. +Cette methode fonctione uniquement pour des attributs binaires. +C'est-à dire que pour une prédiction dans l'espace mesurable $(F,\mathcal{F})$ et un attribut sensible dans $(\{0,1\},\mathcal{P}(\{0,1\})$ +la forêt aléatoire construit une fonction de mesurbale +$a : (F,\mathcal{F})\rightarrow ([0,1],\mathcal{B}([0,1]))$. +$a$ modélise le logit de la prédiction du modèle AIA. +Ensuite nous calculons, la courbe ROC de $a$ comme nous l'avons défini à la Section~\ref{sec:background-ml-classif} et nous choisis $\upsilon^*$ tel que, pour la prédiction $a_\upsilon = 1_{[\upsilon,1]}\circ a$ : +\begin{equation*} + \upsilon^* = \text{argmin}_{\upsilon\in [0,1]} + (1-tpr(\upsilon))^2 + fpr^2(\upsilon) +\end{equation*} +Nous réprésenton sur la Figure~\ref{fig:aia-rocopt} le choix du seuil optimal et du seuil par rapport au seuil par défaut fixé à $0,5$. +\begin{figure} + \centering + \includegraphics[width=0.45\linewidth]{aia/figure/rocr.pdf} + \caption{Optimisation du seuil du modèle d'attaque \AIASoft.} + \label{fig:aia-rocopt} +\end{figure} + +Contrairement a \AIAHard, \AIASoft~ne donne pas la garantie de maximisaion l'exactitude équilibré. +Ainsi \AIASoft~constitue un approximation relativement à la théorie que nous avons décrite à la Section~\ref{sec:aia-theo}. diff --git a/aia/b.tex b/aia/b.tex new file mode 100644 index 0000000..608a632 --- /dev/null +++ b/aia/b.tex @@ -0,0 +1,36 @@ +\begin{figure} + \begin{subfigure}{0.48\linewidth} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_hard_race.pdf} + \caption{Census (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewidth} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/census/census_advdeb_attack_hard_sex.pdf} + \caption{Census (sex)} + \end{subfigure} + \begin{subfigure}{0.48\linewidth} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_race.pdf} + \caption{Compas (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewidth} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/compas/compas_advdeb_attack_hard_sex.pdf} + \caption{Compas (sex)} + \end{subfigure} + \begin{subfigure}{0.48\linewidth} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_race.pdf} + \caption{Meps (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewidth} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/meps/meps_advdeb_attack_hard_sex.pdf} + \caption{Meps (sex)} + \end{subfigure} + \begin{subfigure}{0.48\linewidth} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_race.pdf} + \caption{Lfw (race)} + \end{subfigure} + \begin{subfigure}{0.48\linewidth} + \includegraphics[width=0.48\linewidth]{ACSAC/figures/advdebias/lfw/lfw_advdeb_attack_hard_sex.pdf} + \caption{Lfw (sex)} + \end{subfigure} + \caption{adverarial debiasing hard} + \label{fig:aia-adv-hard} +\end{figure} diff --git a/aia/conclusion.tex b/aia/conclusion.tex new file mode 100644 index 0000000..e69de29 diff --git a/aia/figure/rocr.pdf b/aia/figure/rocr.pdf new file mode 100644 index 0000000..fc23efd Binary files /dev/null and b/aia/figure/rocr.pdf differ diff --git a/aia/figure/tikz/data.tex b/aia/figure/tikz/data.tex new file mode 100644 index 0000000..c43d496 --- /dev/null +++ b/aia/figure/tikz/data.tex @@ -0,0 +1,15 @@ +\input{synthetic/figure/tikz/data} +\begin{tikzpicture} + \node[database,label={[align=center]above:Donné\\cible}] (base) at (0,0) {}; + \node[rectangle,draw,align=center] (cible) at (10,0) {Modèle\\cible}; + \draw[->,align=center] (base) to[bend left] node[midway,above] {80\% entraînement\\sans attribut sensible} (cible); + \draw[->] (base) to[bend right] node[midway,below] (test) {20\% evaluation} (cible); + \node[database,label={[align=left]right:Donnée\\auxilière}] (aux) at (10,-5.5) {}; + \draw[->] (test) to[out=-90,in=90] node[midway,above] {\hspace{50px}Attribut sensible} (aux); + \draw[->] (cible) to node[midway,right] {Prédiction} (aux); + \node[rectangle,draw,align=center] (attaque) at (5,-5.5) {Modèle\\AIA}; + \draw[->] (aux) to[bend right] node[midway,above] {80\% entraînement} (attaque); + \draw[->] (aux) to[bend left] node[midway,below] {20\% evaluation} (attaque); + \node[rectangle,align=center] (result) at (0,-5.5) {Exactitude\\équilibrée}; + \draw[->] (attaque) to (result); +\end{tikzpicture} diff --git a/aia/main.tex b/aia/main.tex index 8e6059c..5d5a58f 100644 --- a/aia/main.tex +++ b/aia/main.tex @@ -5,20 +5,22 @@ \input{aia/fair_reg} \section{Etude théorique de la relation entre AIA et équitée} +\label{sec:aia-theo} \input{aia/theo} -\section{Regression} -\label{sec:aia-soft} +\section{Construction de modèles d'AIA} +\label{sec:aia-aia} +\input{aia/aia} -\section{AIA} -\section{Modèle de menace} -threat model -\label{sec:aia-tm} -\section{Méthodologie} -\subsection{Jeux de donné} -\label{sec:aia-methodo-jeu} -The US census is a snapshot of the US adult population that is done every ten year by the US government\footnote{www.census.gov}. -It produces a database where each row is an individual and each column is an attribute that describe people. +\section{Méthodologie experimentale} +\input{aia/methodo} -\section{Résultats} +\section{Résultats experimentaux} +\label{sec:aia-resexp} \input{aia/resultats} + +\section{Travaux voisins} +\input{aia/related} + +\section{Conclusion} +\input{aia/conclusion} diff --git a/aia/methodo.tex b/aia/methodo.tex new file mode 100644 index 0000000..80cf515 --- /dev/null +++ b/aia/methodo.tex @@ -0,0 +1,50 @@ +Nous allons réaliser un série d'expériences utilisant les AIA définit plus haut. +Le but est d'observer l'exactitude équilibrée des AIA sur des modèles entraînés pour imposer l'équitée. +Pour des attributs sensibles dans un ensemble fini $G$, nous souhaiton observer si entraîner le modèle en imposant la paritée démographique raproche l'exactitude équilibrée de $\frac{1}{\#G}$ ce qui indique une protection de l'attribut sensible d'après le Théorème~\ref{th:aia-dpgood}. +De plus dans le cas de \AIAHard nous allons pouvoir vérifier expérimentalement la Propriété~\ref{prop:aia-demparlvl}. + +\subsection{Jeux de donnée} +\label{sec:aia-methodo-jeu} + +\paragraph{CENSUS} +Le sondage des Etats Unis d'Amérique produit tous les dix ans un jeu de donnée appel CENSUS contenant les information de tous les citoyens\footnote{www.census.gov}. +La version que nous avons utilisé contient 30.940 donées avec 95 attributs comme le travail occupé, le status marital etc. +Parmis ces attributs certain sont sensibles comme la couleur de peau appelé \textit{race} ou le genre appelé \textit{sex}. +Avec ce jeu de donnée, nous construison un classifieur cible qui cherche à inférer si un individu gagne plus de 50.000 dollars par an. + +\paragraph{COMPAS} +Cette base de donnée est construite à partir des affaires criminelle aux Etats Unis. +Elle est utilisé notament par les différents algorithem commerciaux de justice prédiction que nous avons introduits en Section~\ref{sec:contexte-insti}. +Elle contient les donnée de 6.172 criminel jugé coupables en Floride. +Elle contient sept attributs. + +\paragraph{MEPS} +Cette base de donnée provient du système de santé de Etats Unis. +Elle contiens l'historique de trajets réalisé par 15.830 patients. +Le tâche de classification du modèle cible est de prédire si un patient utilise fortement ou faiblement les services de santé. + +\paragraph{LFW} +Cess base de donnée contient 8.212 image de visage de personnes. +La tâche principale est de classifier si une personne a plus de 35 ans. + +\paragraph{Attributs sensibles} +Toutes ces bases de données contiennent les attributs sensibles \textit{race} et \textit{sex}. +Nous randons binaire cas attributs : +\textit{race} vaut 1 si la personne à la peu noire et 0 sinon ; +\textit{sex} vaut 1 si la personne est une femme et 0 sinon. + +\subsection{Cheminement des données} +Pour simuler le modèle de menace nous séparons chaque base de donnée de la manière suivant : +chaque base de donnée est séparé en 80\% d'entraînement et 20\% d'évaluation. +Dans l'entraînment on retire l'attribut sensible et on l'utilisé pour entrainer le modèle cible. +Ensuite nous utilison l'évaluation sans l'attribut sensible pur calculer les prédictions que nous lion ligne par ligne à leur attribut sensible correspondant. +Cela crée la base auxilière qui respecte bien les exigence du modèle de menace : les donnée n'ont pas été utilisé à l'entraînement. +Cette base auxilière est ensuite separée en 80\% d'entraîneemnt et 20\% d'évaluation. +Les 80\% d'entraînement sont utilisé pourt construire le modèle d'attaque qui sert à predire l'attribut sensible à partir de la prédiction du modèle cible. +Les 20\% d'évaluation servent à calculer l'exactitude équilibré du modèle d'attaque. +Nous reportons dans la Section~\ref{sec:aia-resexp} contenant les résultats expérimentaux. +\begin{figure} +\input{aia/figure/tikz/data} +\caption{Simulation du modèle de menace} +\end{figure} + diff --git a/aia/related.tex b/aia/related.tex new file mode 100644 index 0000000..e69de29 diff --git a/aia/theo.tex b/aia/theo.tex index 2a826b1..3b8e49d 100644 --- a/aia/theo.tex +++ b/aia/theo.tex @@ -26,6 +26,7 @@ Ce résultat nous apprend que s'assurer que le modèle cible satisfait la \texti Dans le cas d'un modèle cible qui réalise une classifiction binaire et en considérant un attribut binaire nous avons une propriété plus précise. \begin{propriete} + \label{prop:aia-demparlvl} Soit $(\Omega,\mathcal{T},P)$ un espace probabilisé et $(\{0,1\}$, $\mathcal{P}(\{0,1\}))$ des espaces mesurables. Soit les variables aléatoires suivantes \begin{itemize} @@ -83,7 +84,148 @@ De plus, nous voyons que la \textit{balanced accuracy} maximial d'attaque vaut $ C'est à dire que $f$ satisfait DemPar est équivalant à dire que tout attaque à une \textit{balanced accuracy} égale à $\frac{1}{2}$. Grâce au Théorème~\ref{th:aia-dpgood} nous savons aussi que tout autre définition d'équtiée qui n'implique pas la paritée démographique ne permet pas de mitiger les AIA. -Par exemple, nous allons montrer que l'égalitée de chances de la Définition~\ref{def:background-eq-eoo} en permet pas de mitiger l'AIA dans le cas binaire que nous avons étuié précédement. +Par exemple, nous allons montrer un cas ou l'égalitée des chances de la Définition~\ref{def:background-eq-eoo} est satisfaite mais om il existe une AIA qui donne une exactitude équillibrée suppérieur $0,5$. -\subsection{Utiliser l'AIA pour contrôler le niveau d'équitée}. +On représente le classifieur $\hat{Y}$ de l'étiquette $Y$ ainsi que la donnée d'entrée $X$ et l'attribut sensible $S$ dans le tableau suivant : +\begin{equation*} + \begin{matrix} + X&Y&\hat{Y}&S\\ + 0&0&0&0\\ + 0&0&0&1\\ + 0&0&0&0\\ + 0&0&0&0\\ + 1&1&1&1\\ + 1&1&1&1\\ + 1&1&1&1\\ + 1&1&1&0\\ + \end{matrix} +\end{equation*} +Nous utilisons le modèle cible utilisé est $\hat{Y}=id\circ X$. +Ce classifieur satisfait l'équitée des chances car +$P(\hat{Y}=0\mid Y=0\wedge S=0) = P(\hat{Y}=0\mid Y=0\wedge S=1) = 1$ +et +$P(\hat{Y}=0\mid Y=1\wedge S=0) = P(\hat{Y}=0\mid Y=1\wedge S=1) = 0$. +Alors si on choisit comme modèle d'attaque la fonctione identitée, nous avont comme accuracy de l'AIA $0,75$ ce qui indique une fuite de l'attribut sensible. + +%De manière plus précises et plus générale nous avancons le théorème suivant : +%\begin{theorem} +%\label{th:eoo} + %Si $\hat{Y}$ satisfait l'équitée des chances pour $Y$ et $S$, alors l'exactitude équilibrée de l'AIA est de $\frac{1}{\#F}$ si et seulement si $Y$ est independant de $S$ ou si + %for $Y$ and $S$ then the balanced accuracy of AH is $\frac{1}{2}$ if and only if $Y$ is independent of $S$ or $\hat{Y}$ is independent of $Y$. +%\end{theorem} +%Those two conditions are unlikely to happen with real world dataset and target models. +%Indeed, $Y$ is independent of $S$ means that the ground truth label is independent of the sensitive attribute which never happens as we have observed in the experiment section. +%And $\hat{Y}$ is independent of $Y$ means that the target model did not managed to learn anything: it does not have any utility which defies the purpose of using it in a production and commercial environment. +%Since both of those conditions are not practical, we close the case of EO by saying that it is not fit as a defense against attribute inference attack at inference time. +%We prove the theorem: +%\begin{proof} +%Let $a$ be the attack model trained for AS: $\hat{S}=a\circ \hat{Y}$. +%By the total probability formula +%\begin{align*}&P(\hat{S}=0|S=0)\\ +%=&P(\hat{S}=0|S=0Y=0)P(Y=0|S=0)\\ +%+&P(\hat{S}=0|S=0Y=1)P(Y=1|S=0) +%\end{align*} +%and as well +%\begin{align*}&P(\hat{S}=1|S=1)\\ + %=&P(\hat{S}=1|S=1Y=0)P(Y=0|S=1)\\ + %+&P(\hat{S}=1|S=1Y=1)P(Y=1|S=1) +%\end{align*} +%Then we substitute those terms in the definition of the balanced accuracy of the target model. +%\begin{align*} + %&\frac{P(\hat{S}=0|S=0)+P(\hat{S}=1|S=1)}{2}\\ + %=&\frac{1}{2}+\frac{1}{2}\left(P(Y=0|S=0)-P(Y=0|S=1)\right)\\ + %&\left(P(\hat{Y}\in a^{-1}(\{1\})|S=1Y=0) - + %P(\hat{Y}\in a^{-1}(\{1\})|S=1Y=1)\right) +%\end{align*} +%The balanced accuracy is equal to 0.5 if and only if $P(Y=0|S=0)=P(Y=0|S=1)$ +%or $\forall a~P(\hat{Y}\in a^{-1}(\{1\})|S=1Y=0)=P(\hat{Y}\in a^{-1}(\{1\})|S=1Y=1)$. +%The first equation means that $Y$ is independent of $S$. +%The second means that for $S=1$ the trained target model did not learn. +%We can do the same computing for $S=0$ and obtain a similar conclusion. +%\end{proof} +% +\subsection{Utiliser l'AIA pour contrôler le niveau d'équitée} +\label{sec:aia-theo-aia-eq} +De manière réciproque, le lien que nous avons démontré peut ausi être utilié dans le cas suivant. +Imaginons qu'un fournisseur de modèle d'IA ou un organisme de régulation comme la Défensseure des Droit souhaite contrôler si un modèle est équitable ou non. +Si $\#F$ ou $\#G$ sont grands voir de cardinaux infinis, vérifier diréctement des propriétés d'indépendances entre la sortie du modèle et des attributs sensible peut entraîner un coût de calcul trop élevé pour être faisable~\cite{ofverstedt2022fast}. + +Grâce au Théorème~\ref{th:aia-dpgood} nous avons la garantie que que si toutes les modèles AIA ont une exactitude équilibrée égale à $\frac{1}{\#F}$ alors le modèle cible satisfait la parité démographique. +Bien sûre cette technique atteint sa limite si $\#G$ est infini car alors l'exactitude équliibrée n'est plus définie. + +Calculer l'exactitude équilibrée de toutes les modèles d'AIA est impossible. +Nous allons voir que si l'AIA qui donne une exactitdue équilibrée maximal vaut $\frac{1}{\#F}$ alors c'est le cas pour toutes. + +\begin{theorem} + \label{th:aia-bluey} + Soit $(\Omega,\mathcal{T},P)$ un espace probabilisé. + Soient $(E,\mathcal{E})$ et $(F,\mathcal{P}(F))$ des espaces mesurables avec $F$ un esemble fini. + Soient les varibles aléatoires suivantes : + \begin{itemize} + \item $X:\Omega\rightarrow E$ + \item $Y:\Omega\rightarrow F$ + \end{itemize} + Soit $A$ l'ensemble des fonctions mesurables de $(E,\mathcal{E})$ dans $(F,\mathcal{P}(F))$. + Nous appelons $BA$ la fonction qui à toutes fonction $a$ de $A$ associe l'exactitude équilibrée de $a \circ X$ pour l'étiquette $Y$. + \begin{equation*} + \exists a\in A~BA(a)< \frac{1}{\#F} + \implies + \exists a\in A~BA(a)>\frac{1}{\#F} + \end{equation*} +\end{theorem} + +\begin{proof} + Soit $a\in A$ telle que $BA(a)<\frac{1}{\#F}$. + Nous allons montrer qu'il existe $b\in A$ telle que $BA(b)>\frac{1}{\#F}$ + + A la manière de la démonstration du Théorème~\ref{th:fini-bacca}, on se donne la matrice + \begin{equation*} + M(i,j) = P(a\circ X = y_i\mid Y=y_j) + \end{equation*} + + On note $S_{\#F}$ l'ensemble des bijections de $\#F$ sur lui-même. + Montrons qu'il existe + $\varphi\in S_{\#F}$ telle que $\sum_{j\in\#F}M(\varphi(j),j) >1$. + Raisonons par l'absurde. + Nous supposont que + \begin{equation*} + \forall \varphi\in S_{\#F}~\sum_{j\in\#F}M(\varphi(j),j)<1 + \end{equation*} + Alors + \begin{align*} + &\sum_{\varphi\in S_{\#F}}\sum_{j\in\#F}M(\varphi(j),j)1$. + Comme nous l'avons montré dans la preuve du Théorème~\ref{th:fini-bacca}, nous avons $u\in\mathcal{H}^{\#F}$ tel que en posant + \begin{equation*} + b = u_{\#F-1}\circ\cdots\circ u_0\circ a + \end{equation*} + alors $BA(b)>\frac{1}{\#F}$. + +\end{proof} + +Nous allons utiliser ce théorème pour montrer que si l'AIA maximale à une exactidue équilibrée égale à $\frac{1}{\#G}$ alors toutes les AIA ont la même éxactiture equilibrée. +On se donne $A$ l'ensemble des fonctions mesurable de $(F,\mathcal{F}$ dans $(G,\mathcal{P}(G)$. +$A$ modélise l'ensemble des AIA possibles pour un modèle cible qui prédit dans $F$ et un attribut sensible dans $G$, un ensemble fini. +Supposons que $\text{max}_{a\in A} BA(a)=\frac{1}{\#G}$. +Alors $\forall a\in A~BA(a)\leq\frac{1}{\#G}$. +D'après la contraposée du Théorème~\ref{th:aia-bluey} nous avons alors $\forall a\in A~BA(a)\geq\frac{1}{\#G}$. +Ainsi $\forall a\in A~BA(a)=\frac{1}{\#G}$. +Pour contrôler si un classifieur vérifie la paritée demographique il est donc suffisant de connaitre l'exactitude équilibrée maximial de toutes les AIA. +Comme nous venons de le voir, si cette valuer vaut $\frac{1}{\#G}$ alors le classifieur satisfait la paritée démographique. +La recherche d'une AIA qui maximise l'exactitude équilibrée est discuté à la Section~\ref{sec:aia-aia}. diff --git a/annexe/crit_discri.tex b/annexe/crit_discri.tex new file mode 100644 index 0000000..81b397a --- /dev/null +++ b/annexe/crit_discri.tex @@ -0,0 +1,27 @@ +\begin{verbatim} + Origine + Sexe + Situation de famille + Grossesse + Apparence physique + Vulnérabilité particulière liée à la situation économique + Nom + Lieu de résidence + État de santé + Perte d'autonomie + Handicap + Caractéristiques génétiques + Mœurs + Orientation sexuelle + Identité de genre + Âge + Opinions politiques + Activités syndicales + Qualité de lanceur d'alerte + Qualité de facilitateur de lanceur d'alerte ou de personne en lien avec un lanceur d'alerte + Langue parlée (capacité à s'exprimer dans une langue autre que le français) + Ethnie + Nation + Race prétendue + Religion +\end{verbatim} diff --git a/avertissement.tex b/avertissement.tex index 1c5d88f..ab4a014 100644 --- a/avertissement.tex +++ b/avertissement.tex @@ -1,7 +1,7 @@ -Ce manuscrit aborde des notions de discirimination notament de genre, d'origine et de couleur de peau. -En France, les statistiques éthnique sont intérdites~\cite{} ce qui n'est pas le cas aux USA. -Les résultats de statistiques descriptives, nottament sur les crimes comis en fonction de la couleur de peau, sont à mettre en parallèle avec un grand nombre de facteurs socio-économiques~\cite{} -Ainsi, ils ne doivent pas être interprété comme indiquant une différence de comportement social entre sous groupes ethniques. +Ce manuscrit aborde des notions de discriminations notamment de genre, d'origine et de couleur de peau. +En France, les statistiques ethniques sont interdites~\cite{stateth} ce qui n'est pas le cas aux USA. +Les résultats de statistiques descriptives, notamment sur les crimes commis en fonction de la couleur de peau, sont à mettre en parallèle avec un grand nombre de facteurs socio-économiques~\cite{howard2000race,williams1996race,green1972race,walsh2007psychopathy}. +Ainsi, ils ne doivent pas être interprétés comme indiquant une différence de comportement social entre sous groupes ethniques. -De plus, la Seciont~\ref{sec:contexte-phi} invite le lecteur à des expériences de pensées qui peuvent être angoissantes pour certaines personnes~\cite{}. -Nous invitons donc le lecteur à ne pas s'attarder sur cette section si il ne se juge pas émotionelement prêt. +De plus, la Section~\ref{sec:contexte-phi} invite le lecteur à des expériences de pensées qui peuvent être angoissantes pour certaines personnes~\cite{singler2017roko}. +Nous invitons donc le.a lecteur.ice à ne pas s'attarder sur cette section si il.elle ne se juge pas émotionnellement prêt.te. diff --git a/background/alg.tex b/background/alg.tex new file mode 100644 index 0000000..b2f6418 --- /dev/null +++ b/background/alg.tex @@ -0,0 +1,99 @@ +\subsubsection{Espace vecotriel} +Les espaces vectoriels sont des structure fondamentales qui vont nous servir à comprendre comment fonctionne l'entraînement des réseaux de neurones. +\begin{definition}{Groupe} + Soit $E$ un ensemble et $+$ une opération sur $E$. + Nous dirons que $(E,+)$ est un groupe si et seulement si + \begin{enumerate} + \item $\forall (e,f)\in E^2~e+f\in E$ (loi interne) + \item $\forall (e,f,g)\in E^2~(e+f)+g=e+(f+g)$ + \item $\exists 0\in E~\forall e\in E~e+0=e\wedge0+e=e$ + \item $\forall a\in E\exists b\in E~a+b=e\wedge b+e=e$ + \end{enumerate} + Dans le cas où en plus de ces trois points + $\forall (e,f)\in E^2~e+f=f+e$ + Nous dirons que le groupe $(E,+)$ est abélien. +\end{definition} + +\begin{definition}{Espace vectoriel} + Soit $E$ un ensemble munit d'une loi interne $+$ et d'une loi externe $\cdot:\mathbb{R}\times E\rightarrow E$. + Sout les conditions suivantes, nous dirons que $(E,+,\cdot)$ est un espace vectoriel. + \begin{enumerate} + \item $(E,+)$ est un groupe abélien. + \item $\forall (r,e,f)\in\mathbb{R}\times E\times E~r(e+f)=re+rf$ + \item $\forall (r,s,e)\in\mathbb{R}\times\mathbb{R}\times E~(r+s)e=re+se$ + \item $\forall (r,s,e)\in\mathbb{R}\times\mathbb{R}\times E~(rs)e=r(se)$ + \item $\forall e\in E~1e=e$ + \end{enumerate} +\end{definition} + +Alors $\forall n\in\mathbb{N}~\mathbb{R}^n$ est un espace vectoriel. + +\subsubsection{Application linéaire} +\label{sec:background-alg-L} +Soit $E$ et $F$ deux espaces vectoriels. +Une application linéaire $h:E\rightarrow F$ est telle que +$\forall (r,e,f)\in \mathbb{R}\times E\times E~h(re+f)=rh(e)+h(f)$ +Et on note $\mathcal{L}(E,F)$ l'ensemble des applications linéaire de $E$ dans $F$. +Si $E=\mathbb{R}^m$ et $F=\mathbb{R}^n$ alors +la matrice de $f$ est +\begin{equation*} + M_f= + \left( + \begin{matrix} + f(e_0)_0&\cdots&f(e_{m-1})_0\\ + \vdots&\vdots&\vdots\\ + f(e_{0})_{n-1}&\cdots&f(e_{m-1})_{n-1}\\ + \end{matrix} + \right) +\end{equation*} +Où +\begin{equation*} + \forall i\in m~e_i=\left( + \begin{matrix} + 0\\ + \vdots\\ + 0\\ + 1\\ + 0\\ + \vdots\\ + 0 + \end{matrix} + \right) + \begin{matrix} + \\ + \\ + \\ + i\\ + \\ + \\ + \\ + \end{matrix} +\end{equation*} +On appelera par la suite $(e_0,\cdots,e_{m-1})$ \emph{base canonique} de $\mathbb{R}^m$. +On note $f(e_j)_i = M_f(i,j)$, c'est l'entré de $M_f$ se situant à la ligne $i$ et colone $j$. + +\begin{propriete} + La fonction $M_\square$ est une bijection. +\end{propriete} + +Nous définisson la mutliplication matricielle de la manière suiavante : +Soient $f\in\mathcal{L}(\mathbb{R}^m,\mathbb{R}^n)$ et $g\in\mathcal{L}(\mathbb{R}^n,\mathbb{R}^o)$. +Alors +\begin{equation*} + M_gM_f=M{g\circ f} +\end{equation*} +\begin{propriete} +\begin{equation*} + M_gM_f(i,j)=\sum_{k=0}^n M_g(i,k)M_f(k,j) +\end{equation*} +\end{propriete} + +\begin{definition} + \label{def:background-alg-tr} + Soit $M$ une matrice à $n$ lignes et colonnes. + Alors nous définisson la trace de $M$ de la manière suivante. + \begin{equation*} + \text{Tr}(M)=\sum_{i=0}^{n-1}M(i,i) + \end{equation*} +\end{definition} + diff --git a/background/dif.tex b/background/dif.tex new file mode 100644 index 0000000..2ba01f1 --- /dev/null +++ b/background/dif.tex @@ -0,0 +1,95 @@ +Le but du calcul diférentiel est l'étude des variation infinitésimale des fonctions. +Nous allons nous contenter ici d'étudier les fonctionelles, c'est à dire des fonction de $\mathbb{R}^n$ dans $\mathbb{R}$ car c'est ce dont nous allons avoir besoin en aprentissage automatique. +\begin{definition}{Produit scalaire euclidien} + \label{def:background-dif-scal} + Soit $(x,y){\in\mathbb{R}^n}^2$ alors le produit scalaire euclidien est + \begin{equation*} + \langle x,y \rangle = \sum_{i=0}^{n-1}x_iy_i + \end{equation*} +\end{definition} +\begin{definition}{Norme euclidienne} + \label{def:background-dif-eucl} + Soit $x\in\mathbb{R}^n$, nous definisson le norme euclidienne de $x$ par l'expression suivante + \begin{equation*} + ||x||={\langle x,x\rangle}^{\frac{1}{2}} + \end{equation*} +\end{definition}  + +\begin{definition}{Limite} + \label{def:background-dif-lim} + Soit $f$ une fonction de $\mathbb{R}^m$ dans $\mathbb{R}^n$. + Soit $x\in\mathbb{R}^m$. + Nous dirons que $f$ admet une limite en $x$ si il existe $y\in\mathbb{R}^n$ tel que + \begin{equation*} + \forall\varepsilon>0\exists\delta>0\forall a\in\mathbb{R}^m~||a-x||<\delta\implies||f(a)-y||<\varepsilon + \end{equation*} + Nouse ecrivons alors $lim_{a\rightarrow x}f(a)=y$ car $y$ est alors unique~\cite{Bourrigan2021-dd}. +\end{definition} + +\begin{definition}{Differentielle} + \label{def:background-dif-dif} + Soit $f$ une fonction de $\mathbb{R}^n$ dans $\mathbb{R}$. + Nous dirons que $f$ est différentiable en $a\in\mathbb{R}^n$ si et seulement si il existe + $df(a)\in\mathbb{L}(\mathbb{R}^n,\mathbb{R})$ + telle que il existe $\varepsilon:\mathbb{R}\rightarrow \mathbb{R}$ telle que pour tout $h\in\mathbb{R}^n$ + \begin{equation*} + f(a+h) = f(a)+df(a)h+||h||\varepsilon(h) + \end{equation*} + avec + $lim_{h\rightarrow 0}\varepsilon(h)=0$. + $df(a)$ s'apelle la \emph{diférentielle} de $f$ en $a$. +\end{definition} +Dans le cas où $f$ est différentiable en tout point de $\mathbb{R}^n$ alors +la fonction $f$ peut être vu comme $n$ fonction $f_0\cdots f_{n-1}$ de $\mathbb{R}$ dans $\mathbb{R}$ avec +\begin{equation*} + f(x)=\left( + \begin{matrix} + f_0(x_0) + \cdots + f_{n-1}(x_{n-1}) + \end{matrix} + \right) +\end{equation*} +Toutes les fonctions de $f_i$ sont différentiables. +\begin{definition} + \label{def:background-math-grad} + Pour tout $x\in\mathbb{R}$ nous définison la $i$ème dérivée partielle de $f$ par + \begin{equation*} + \partial_i f :\left\{ + \begin{matrix} + \mathbb{R}\rightarrow \mathbb{R}\\ + x\mapsto df(x)e_i + \end{matrix} + \right. + \end{equation*} + Où $e_i$ est le $i$ème vecteur de la base canonique de $\mathbb{R}^n$. + Et nous définissons le gradient de $f$ par la formule suivante : + \begin{equation*} + \nabla f:\left\{ + \begin{matrix} + \mathbb{R}^n\rightarrow \mathbb{R}^n\\ + x\mapsto\left( + \begin{matrix} + \partial_0 f(x)\\ + \vdots\\ + \partial_{n-1} f(x)\\ + \end{matrix} + \right) + \end{matrix} + \right. + \end{equation*} +\end{definition} +Pour le.a lecteur.ice familier avec la dériviabilité notons que +\begin{equation*} + lim_{h\rightarrow 0}\frac{f(x+he_i)-f(x)}{h} = \partial_i f(x) +\end{equation*} + + +\begin{propriete} + Soit $f:\mathbb{R}^n\rightarrow \mathbb{R}$ différentiable. + \begin{equation*} + \forall (x+h)\in{\mathbb{R}^n}^2~df(x)h = + \langle \nabla f(x),h\rangle + \end{equation*} +\end{propriete} + diff --git a/background/eq b/background/eq new file mode 100644 index 0000000..e69de29 diff --git a/background/eq.tex b/background/eq.tex index 446ad95..b756361 100644 --- a/background/eq.tex +++ b/background/eq.tex @@ -1,12 +1,43 @@ - \label{sec:bck_fair} L'équitée algorithmique à pour but de réduire les bias dans le modèle prédictif. -En effet, le fait qu'une donnée d'entraînement appratienne à certainne minorité peut avoir un impacte sur la qualitée de la prédiction. +C'est-à dire, comment peut on faire en sorte que le modèle ne désavantage pas ou n'avantge pas certain sous-groupes ? +En effet, le fait qu'une donnée appratienne à certainne minorité peut avoir un impacte sur la qualitée de la prédiction. Par exemple en justice prédictie, la couleur de peau d'un peau d'un coupable jou un rôle qui n'est pas négligable dans la prédiction du récidivisme au Etats Unis~\cite{fairjustice}. -Les minoritée sont identifié par un attribut sensible comme la couleur de peau, le genre ou l'orientation sexuelle. -Pour savoir si un attribut est sensible ou non, nous pouvons nous référer à l'observatoire de inégalités. +Pour savoir si un attribut est sensible ou non, non pouvon non referer à la liste des vignt-cinq critère de disrimination présenté à la Section~\ref{sec:contexte-legal-discrimination}. Ces bias sont appris par le modèle car ils sont présent dans les donnés d'entraînement qui reflète la population dans laquelle ces donnée ont été prélevés. +Nous représentons sur la Figure~\ref{fig:background-eq-logi} comment une regression logistique peut présenter une différence de traitement entre deux sous groupe de la population. +Nous observons que comme il y a moins de donnée de femmes, le modèle à appris une courbe qui se rapproche plus des données hommes. +Comme le seuil de ce modèle est situé à $0,5$, nous voyons que tous le points rouges qui correspondent au femmes passent au dessus du seuil représenté par la ligne horizontale grise. +Ainsi, bien que les étiquettes soient répartis équitablement chez les hommes et ches les femmes, le modèle classife toutes les femme dans la classe 1. +Il sagit ici d'un cas scolaire sur des données générés mais supposons que la classe 1 soit désavantageuse. +Par exemple, imaginons que ce modèle soit utilisé dans un programme de rectruement automatique. +La classe 0 implique que le candidat est séléctioné, classe 1 implique que le candidat est réjété. +Alors ce programme serait discriminatoire car bien que 50\% des femme et 50\% des homme ont une étiquette qui les rendent adminssibles, le programme ne sélectione que des candidats hommes. + +\begin{figure} + \centering + \includegraphics[width=0.5\linewidth]{background/figure/eq/reg_unfair.pdf} + \begin{tabular}{|c|c|c|c|} + \hline + &\textbf{Homme}&\textbf{Femme}&\textbf{Total}\\ + \hline + \textbf{Effectif}&100&20&120\\ + \hline + \makecell{ + \textbf{Répartition}\\ + $\#\{Y=0\}/\#\{Y=1\}$} + &10/10&50/50&60/60\\ + \hline + \textbf{Exactitude}&1&0,5&0,92\\ + \hline + \end{tabular} + \caption{Exemple d'un regression logistique qui a une meilleur performance pour le homme que pour les femmes. + Les donnée provienne d'une génération et servent uniquement à titre d'illustration. + La regression logisitque à bien été optimisé sur les donnée générés en utilise l'algorithme de scikit learn~\cite{scikit-learn}} + \label{fig:background-eq-logi} +\end{figure} +\subsubsection{Définitions de l'équitée} L'équitée en apprantissag automatique se présente sous deux aspect qui mettent lumière deux visions différentes : \textbf{L'équitée individuelle}\footnote{Individual fairness} @@ -15,30 +46,58 @@ cherche à faire en sorte que deux donnée, à toutes choses égale exepté l'at \textbf{L'équitée de groupe}\footnote{Group fairness} Vient de l'idée que different sous groupes défini par un critère de discrimination devrait être traite de manière similaire. Il y a différentes définitions mathématiques de l'équite de groupe. -Nous allons en regarder deux qui sont bien établis dans la litérature et souvant utilisé : la paritée demographique\footnote{Demographic parity} et l'équitée de chances\footnote{Equality of odds}. +Nous allons en regarder trois qui sont bien établis dans la litérature et souvant utilisé : l'effet différencié\footnote{disparate impact} la paritée demographique\footnote{Demographic parity} et l'équitée de chances\footnote{Equality of odds}. + +Pour cela nous allons considérer le cadre suivant : +Nous avons un classifieur modélisé par une variable aléatoire $\hat{Y}$ qui essai d'inférer l'étiquette $Y$. +Ces deux variables prennent leurs valeurs dans un ensemble $F$. +De plus, nous avons l'attribut sensible modélisé par $S$ qui prend ses valeurs dans $G$. + +\begin{definition} +\label{def:background-eq-di} + L'\emph{effet différencié} de $\hat{Y}$ est + \begin{equation*} + \frac{P(\hat{Y}=Y\mid S=0)}{P(\hat{Y}=Y\mid S=1)} + \end{equation*} + Cette notion ne fonctionne que pour $F=G=\{0,1\}$. +\end{definition} + +Cette définition est utilisé au Etats Unis pour montrer qu'une structure a une politique de discrimination à l'encontre d'une minorité comme nous l'avons vus à la Section~\ref{sec:contexte-legal}. + \begin{definition} \label{def:background-eq-dp} - $\hat{Y}$ satisfies demparity for $S$ if and only if: $P(\hat{Y}=0 | S=0) = P(\hat{Y}=0 | S=1)$. - From that, we will call $|P(\hat{Y}=0 | S=0) - P(\hat{Y}=0 | S=1)|$ the demPar-level of $\hat{Y}$. + $\hat{Y}$ satisfait la \emph{parité démographique} pour $S$ si et seulement si : $\forall (y,s_1,s_2)\in F\times G\times G~P(\hat{Y}=y | S=s_1) = P(\hat{Y}=y | S=s_2)$. \end{definition} -demparity is the historical definition of fairness. -Legally, disparate impact is the fairness definition recognized by law, where 80\% disparity is an agreed upon tolerance decided in the legal arena. -demparity ensures that the number of correct prediction is the same for each population. -However, this may result in different false positive and true positive rates if the true outcome does actually vary with $S$~\cite{dpbad}. -Hardt et al.~\cite{fairmetric2} proposed eo as a modification of demparity to ensure that both the true positive rate and false positive rate will be the same for each population. +La parité démographique ne prend pas en compte l'étiquette, cette définition est equivalante à dire que l'attribut sensbile est indépendante de la prédiction (même si l'étiquette ne l'est pas). +Cela peut créer de cas où en cherchant à imposer cette metrique, nous obtenons des taux de vrais et de faux positif différents pour les sous groupes~\cite{dpbad}. +Ainsi, la parité demographique peut être repsécté tout en dégradant l'effet différencié. +Il n'est pas nécéssaire que si $\hat{Y}=Y$ (le classifieur infère parfaitement l'étiquette) alors la parite démographique soit respécté. +Chercher à imposer cette définition revient à faire de la discrimination positive. +Pour certaines applications cette effet n'est pas souaitable. +Ainsi Hardt et al.~\cite{fairmetric2} propose de modifier la parité démographique pour prendre en compte l'étiquette ce qui donne la définition suivante : \begin{definition} \label{def:background-eq-eoo} - $\hat{Y}$, classifier of $Y$, satisfies equality of odds for $S$ if and only if: $\forall (\hat{y},y)\in\{0,1\}^2 \quad - P(\hat{Y}=\hat{y} | S=0,Y=y) = P(\hat{Y}=\hat{y} | S=1,Y=y)$. + $\hat{Y}$ satisfait l'équitée des chances pour $S$ si et seulement si : $\forall (\hat{y},y,s_1,s_2)\in E\times E\times G\times G \quad + P(\hat{Y}=\hat{y} | S=s_1,Y=y) = P(\hat{Y}=\hat{y} | S=s_2,Y=y)$. \end{definition} -The above fairness definitions can be achieved using three main fairness mechanisms: (a) pre-processing, (b) in-processing and (c) post-processing. \textit{Pre-processing} algorithms such as reweighing requires access to the training data and assigns weights to the data records to remove discrimination~\cite{preprocessing}. -\textit{In-processing} algorithms such as advdebias~\cite{debiase} and egd~\cite{reductions} add constraint during $targetmodel$'s training to ensure fairness. %reductions -\textit{Post-processing} techniques, in turn, hide the bias in output predictions to satisfy the above fairness constraints but the underlying model is still biased. -Similar to previous work~\cite{chang2021privacy}, we focus on in-processing algorithms. +\subsubsection{Imposer l'équitée comme contrainte d'optimisation} +Ces définitions peuvent être imposé au modèle de trois manières: +\begin{enumerate} + \item Prétraitement\footnote{Preprocessing} : + Le prétraitement consiste à modifier les données avant l'entraînement pour en retirer les bias. + Pour cela le rééquilibrage des poids\footnote{Reweighing} s'attaque au problème des biais en attribuant un poid à chaque donnée pour corrigier le déséquilibre dans un attribut sensible~\cite{preprocessing}. + \item Entraitement\footnote{Inprocessing} : + Ces algorithmes, comme le rééquilibrage adversariel\footnote{Adversarial debiasing}~\cite{debiase} ou la descente de gradient exponentiée\footnote{Exponentiated gradient descent}~\cite{reductions}, modifient l'algorithme d'optimisation du modèle pour impose les définitions équité sous forme d'optimisation sous contrainte. + \item Postraitement\footnote{Postprocessing} : + Cette methode consiste à cacher les biais dans la sortie du modèle. + Le modèle est biaisé mais sa sortie est filtrée. +\end{enumerate} +Comme nous nous intéressons au interaction entre équitée et confidentialité, le Chapitre~\ref{sec:aia} s'inscrit dans la lignée de travaux précédent qui se concentrent sur les méchanismes entraitements~\cite{chang2021privacy}. + +\paragraph{Déscente de gradient exponentiée} -Our work focuses on the theoretical guaranties on attribute inference attacks given by the different fairness notions and not so much on how to implement in-processing fairness mechanism. -Nevertheless in the experiment section we try production ready state of the art implementations of those fairness constraints along unconstrained ML algorithm. +\paragraph{Rééquilibrage adversariel} diff --git a/background/figure/eq/reg_unfair.pdf b/background/figure/eq/reg_unfair.pdf new file mode 100644 index 0000000..f177bc6 Binary files /dev/null and b/background/figure/eq/reg_unfair.pdf differ diff --git a/background/main.tex b/background/main.tex index 76c5a6f..e386396 100644 --- a/background/main.tex +++ b/background/main.tex @@ -1,5 +1,6 @@ Nous présentons dans ce chapitre les différentes théories et concepts sur les quelles se basent nos développements. \section{Mathématiques} +\label{sec:background-math} L'originie de l'IA est mathématique~\cite{dartmouth,lecun2019quand}. Nous utilisons dans ce manuscrit principalement deux théories : l'optimisation pour entraîner les modèles et les probabilitées pour les évaluer. Ainsi nous présentons dans cette section les prérequi necessaire pour comprendre les prochains dévelopements. @@ -17,13 +18,12 @@ a & b & a\iff b & a\implies b & a\wedge b & a\vee b & \neg a\\ \end{matrix} \end{equation} \subsection{Ensembles et fonctions} -\label{sec:background-set} + \label{sec:background-set} \input{background/set} \subsection{Algèbre linéaire} - \subsubsection{Espace vectoriel} - \subsubsection{Application linéaires} - \subsubsection{Matrices} + \label{sec:background-evr} + \input{background/alg} \subsection{Mesurer le hasard pour prédire et inférer} \label{sec:background-proba} @@ -32,14 +32,9 @@ a & b & a\iff b & a\implies b & a\wedge b & a\vee b & \neg a\\ %\subsection{Probabilitées} %\subsection{Statistiques} -\subsection{Topologie} - \subsubsection{Distances et normes} - \subsubsection{Espaces topologiques} - \subsubsection{Application aux fonctions} - \subsection{Calcul différentiel} - \subsubsection{Différentiel} - \subsubsection{Gradient} + \label{sec:background-dif} + \input{background/dif} \subsection{Optimisation} \label{sec:background-opti} @@ -49,12 +44,12 @@ a & b & a\iff b & a\implies b & a\wedge b & a\vee b & \neg a\\ \label{sec:background-ml} \input{background/ml} -\section{Equité} +\subsection{Equité} \label{sec:background-eq} \input{background/eq} %\subsection{Différentes notions d'équité} -\section{Confidentialité} +\subsection{Confidentialité} \label{sec:background-conf} \input{background/conf} %\subsection{Mitiger l'inéquitée} diff --git a/background/ml.tex b/background/ml.tex index d1f95b0..7372508 100644 --- a/background/ml.tex +++ b/background/ml.tex @@ -1,8 +1,8 @@ L'aprantissiage automatique\footnote{\textit{Machine learning}} est le fondement de l'IA moderne. - +Les réseaux de neuronnes profonds notament ont révolutioné ce domaines notament grâce à l'augmentation de la puissance de calcul et des cartes graphiques~\cite{lecun2019quand}. \subsection{Principe} -Repprenosn la définition de L'IA donnée dans le reglement UE 2024/1689 pour une harmonisation des regulations relatives a l'IA~\cite{aiact} et notamant la Figure~\ref{fig:contexte-IAUE}. +Repprenons la définition de L'IA donnée dans le reglement UE 2024/1689 pour une harmonisation des regulations relatives a l'IA~\cite{aiact} et notamant la Figure~\ref{fig:contexte-IAUE}. Cette definition exprime bien le fonctionement d'un modèle d'apprantissage automatique. Le modèle est un fonctione qui prend en entrée une donnée d'entrée et des parametre et qui renvoi un prédiction. Le vie d'un modèle se passe en deux étape. @@ -18,7 +18,7 @@ Nous allons présenter ces deux aspects entraîenemnt et évaluation dans les Se \label{sec:background-ml-train} Les données qui servent à l'entraînement du modèle doivent posséder une étiquette : c'est-à dire le résultat atendu qui est consédéré comme vraie. Dans la justice prédictive il s'agit de savoir si le coupabe à été récidiviste après avoir été libéré. -Pour prendre un exemple plus scolaire, sur le jeu de donnée Iris~\cite{iris}, on cherche à classifier l'éspèce d'Iris à partir de la longeur et de la largeur des sépales et des pétales. +Pour prendre un exemple plus scolaire, sur le jeu de donnée Iris~\cite{iris_53}, on cherche à classifier l'éspèce d'Iris à partir de la longeur et de la largeur des sépales et des pétales. Nous utilisons, pour l'entraînement, des données de taille de sépale et pétale pour lesquelles nous conaissons l'espèce d'Iris. En utilisant ces données nous ajustons les paramètres pour que le prédiction soit la plus précise possible. @@ -57,15 +57,36 @@ Nous pouvons ainsi définir le coût induit par un choix de paramètres par la f \right. \end{equation*} Ainsi nous avons une fonctionelle $c:\theta\mapsto E(C(\theta))$ en prenant l'espérence de coût. -Nous pouvons donc appliquer un des algorithmes de minimisation vu à la Section~\ref{sec:background-opti-sgd} pour résoudre le probleme suivant : +Nous pouvons donc appliquer une descente de gradient comme vu à la Section~\ref{sec:background-opti-sgd} pour résoudre le probleme suivant : \begin{equation*} \text{min}_{\theta\in\Theta}c(\theta) \end{equation*} En pratique la quantité $c(\theta)$ est évalué avec la loi des grands nombres~\cite{proba}. +$c$ n'étant pas forcément convexe, un fonction du point de départ ($x_0$) l'algorithme de descente de gradient peut converger ver un minimum locale qui donnera un modèle finale avec de piètre qualités. +C'est ce que nous réprésentons dans la Figure~\ref{fig:background-opti-cvx} ou nous voyons un convergence ver un minimum local alors que le point rechercher étant au fond d'une vallée plus profonde. Très souvent l'algorithme d'optimisation utilisé est la déscente de gradient stochastique (SGD)\footnote{\textit{Stochastic gradient descent}}~\cite{amari1993back}, c'est une vérsion modifié de la descente de gradient adapté au réseaux de neurones qui permet d'accelerer la convergence~\cite{bottou2012stochastic} et d'éviter les minima locaux~\cite{bottou1991stochastic}. Cette algorithmes évalue l'espérence empirique de $C(\theta)$ sur chaque élément, appelé \textit{mini batch}, d'une partition des données d'entrainement. +La recherche des paramètre d'entraînement comme la finesse de la partition ou le pas et en prétique réalisé par des algorithme qui parcours un espace de recherche et regarde l'entraînement pour quelques itérations~\cite{bergstra2015hyperopt}. + +\begin{figure} + \begin{subfigure}{0.3\linewidth} + \includegraphics[width=\linewidth]{background/figure/ml/convex/f_local3.1.pdf} + \caption{L'algorithme tombe dans un minimum locale ($u_0=3,1$).} + \end{subfigure} + \begin{subfigure}{0.3\linewidth} + \includegraphics[width=\linewidth]{background/figure/ml/convex/f_local8.28.pdf} + \caption{L'algorithme tombe dans un minimum globale ($u_0=8,28$).} + \end{subfigure} + \begin{subfigure}{0.3\linewidth} + \includegraphics[width=\linewidth]{background/figure/ml/convex/conv_local.pdf} + \caption{Convergence vers un minimum locale et globale.} + \end{subfigure} + \caption{Impacte de la convexité sur la convergence.} + \label{fig:background-opti-cvx} +\end{figure} + \subsection{Evaluer un modèle} Nous appelerons ici évaluation d'un modèle le calcule des metriques qui permettent de juger de son utilité. Ces métrique varient en fonction du type de modèle et du contexte dans lequel il est utilisé. @@ -73,7 +94,7 @@ Cette algorithmes évalue l'espérence empirique de $C(\theta)$ sur chaque élé Cela permet d'éviter de penser à tords qu'une patient n'est pas malade ce qui pourrai entraîner un retard dans sa prise en charge. \subsubsection{Classification} - \label{sec:backgroung-ml-classif} + \label{sec:background-ml-classif} Les modèles de classification visent à attribuer à chaque point des données ébalué une classe parmis un ensemble fini. Par exemple, dans le cadre de la justice prédictive, inférer pour chaque coupable si il sera recidivise ou non~\cite{zhiyuan2020limits}. Quand il y a deux classes, comme dans l'exemple précédent avec \emph{récidivisite} ou \emph{non-récidiviste}, nous dirons que le modèle effectue un classification binaire. @@ -95,10 +116,10 @@ Cette algorithmes évalue l'espérence empirique de $C(\theta)$ sur chaque élé Grace à ces objets, nous allons définir des qunatités qui décrivent l'utilitée du modèle. La première est - l'\textit{accuracy}, c'est la prababilté que le classifieur prédise la bonne classe. Nous la définissons par $P(\hat{Y}=Y)$. + l'\emph{exactitude}\footnote{\textit{Accuracy}}, c'est la prababilté que le classifieur prédise la bonne classe. Nous la définissons par $P(\hat{Y}=Y)$. Cette définission, bien que très intuitive, souffre qu'elle est sensible au désequillibre de classe~\footnote{\textit{Class imablance}}. Considérons l'exemple suivant : imaginons un modèle depployé en 1982 qui chercheraià prédire si un employé cadre est une femme ou un homme. - Supposons que ce modèle ai une \textit{accuracy} de $79\%$, c'est-à-dire que le modèle prédit justement le genre huit fois sur dix, nous dirons certainement que ce modèle est performant ? + Supposons que ce modèle ai une exactitude de $79\%$, c'est-à-dire que le modèle prédit justement le genre huit fois sur dix, nous dirons certainement que ce modèle est performant ? Voici donc un modèle qui atteint cette performance : \begin{equation} f: @@ -111,7 +132,7 @@ Cette algorithmes évalue l'espérence empirique de $C(\theta)$ sur chaque élé \end{equation} C'est-à-dire un modèle qui prédise toujours homme. - Calculons son \textit{accuracy}, pour plus lisibilité nons encodons homme par $0$ et femme par $1$. + Calculons son exactitude, pour plus lisibilité nons encodons homme par $0$ et femme par $1$. Comme le modèle prédit toujours homme, $P(\hat{Y}=0)=1$ et $P(\hat{Y}=1)=0$. \begin{align} &P(\hat{Y}=Y)\nonumber\\ @@ -121,14 +142,14 @@ Cette algorithmes évalue l'espérence empirique de $C(\theta)$ sur chaque élé \end{align} Or, en 1982 il y avait uniquement $21\%$ des cadres qui était des femmes~\cite{insee1982parite}, ansi $P(Y=0)=0,79$ et $P(Y=1)=0,21$. - Nous avons donc bien une accuracy de $79\%$ bien que le modèle n'ai aucune utilité pratique ! + Nous avons donc bien une exactitude de $79\%$ bien que le modèle n'ai aucune utilité pratique ! - Ainsi l'accuracy est significative uniquement quand $Y$ suit une loi uniforme. - Nous définisson donc une autre métrique : la \textit{balanced accuracy}. + Ainsi l'exactitude est significative uniquement quand $Y$ suit une loi uniforme. + Nous définisson donc une autre métrique : l'\emph{exactitude équillibrée}\footnote{\textit{balanced accuracy}}. Pour cela nous repartons de l'Equation~\ref{eq:background-ml-ac} et remplacons $P(Y=0)$ et $P(Y=1)$ par $\frac{1}{2}$. - Ainsi la \textit{balanced accuracy} est la moyenne et $P(\hat{Y}=0|Y=0)$ et de $P(\hat{Y}=1|Y=1)$. + Ainsi l'exactitude équilibrée est la moyenne et $P(\hat{Y}=0|Y=0)$ et de $P(\hat{Y}=1|Y=1)$. C'est-à-dire que nous regardons pour chaque classes séparément (homme ou femme notre exemple) la probabilité qu'on point soit bien classifié. - Ainsi, en calculant la \textit{balanced accuracy} avec l'exemple précedent nous obtenons $\frac{1+0}{2}=0,5$. + Ainsi, en calculant l'exactitude equilibrée avec l'exemple précedent nous obtenons $\frac{1+0}{2}=0,5$. Ce résultat montre bien que le modèle n'a pas d'utilité. \paragraph{La courbe \textit{Receiver Operating Characteristic} (ROC)} @@ -138,7 +159,7 @@ Cette algorithmes évalue l'espérence empirique de $C(\theta)$ sur chaque élé La classification ce fait grace un seuil sur ce logit. C'est à dire que si on apelle $g(x)$ le logit de $x$, le modèle de classification peut se décomposer par : $f_\uptau = 1_{[\uptau,1]}\circ g$. - Ainsi si nous calculons l'\textit{accuracy}, la \textit{balance accuracy} ou tout autre metrique que nous avons présenté précédament elle dépendra du seuil ($\uptau$). + Ainsi si nous calculons l'exactitude, l'éxactitude équilibrée ou tout autre metrique que nous avons présenté précédament elle dépendra du seuil ($\uptau$). Pour palier cela nous regarons la ROC : une courbe parametrique qui au seuil associe le tau de faux positif (FPR)\footnote{\textit{False positive rate}} et le tau de vrai positif (TPR)\footnote{\textit{True positive rate}}. Nous definisson ces quantité comme suit : \begin{itemize} @@ -226,7 +247,7 @@ Cette algorithmes évalue l'espérence empirique de $C(\theta)$ sur chaque élé Comme nous pouvons de le voir sur la Sous-figure~\ref{subfig:background-ml-logit-d}, seuil proche de $1$ permet de grandement réduire le FPR mais réduit les autres métriques. Le choix d'un seuil est aussi particulièrement important quand les données présentent un désequilibre, c'est-à-dire qu'une classe et majoritaire par rapport à une autre~\cite{zou2016finding}. Dans la Figure~\ref{fig:background-ml-logit} il y $28\%$ de points positif représenté en rouge. - Cela explique la différence entre \textit{accuracy} et \textit{balanced accuracy} à seuil égale. + Cela explique la différence entre exactitude et exactitude équilibrée à seuil égale. \subsection{Apprentissage profond} @@ -292,16 +313,22 @@ Ainsi la $i$-ième couche s'écrit : \end{equation*} Regardon maintenant les couches de convolutions. -L'idée de la convolution est d'extraire des représentations\footnote{\textit{Features extraction}}. +L'idée de la convolution est d'extraire des représentations\footnote{\textit{Features extraction}} à partir d'un signal qui est généralement une image, un son ou la sortie d'un capteur analogique comme un gyroscope. +Une architactre classque utilise les couches de convolution à l'entrée du réseau avant les couches linéaires. +L'idée étant que le modèle comence par extraire de représntation pui les analysent. +Dans ce type de couche le paramètre $\theta_i$ est le noyeau de convolution. +C'est la fonction par laquelle on mutlilpe le signal sous l'intégrale. +Pour un noyeau de convolution de taille $c$ \begin{equation} f_i(x,\theta_i) = \left\{ \begin{matrix} - \mathbb{N}^\mathbb{}\rightarrow\mathbb{N}^\mathbb{N}\\ - u\mapsto\int_{\mathbb{N}}x(u\bowtie t)\theta(\#J\bowtie t)d\sum_{j\in\mathbb{N}}\delta_j(t) + \mathbb{R}^o\rightarrow\mathbb{R}^\mathbb{N}\\ + u\mapsto\int_{c}x'(u-t)\theta_i(t)d\sum_{j=0}^{c-1}\delta_j(t) \end{matrix} \right. \end{equation} +Où $x'$ est telque $x'(u-t)$ soit toujours bien défini par rembourrage\footnote{\textit{padding}}. diff --git a/background/opti.tex b/background/opti.tex index 9d346d6..03d01a6 100644 --- a/background/opti.tex +++ b/background/opti.tex @@ -1,4 +1,4 @@ -L'optimisation est une branche est des mathématiques appliquées qui cherche à trouver les points pour lequels une fonctions réalise un certain nombre d'exigence. +L'optimisation est une branche des mathématiques appliquées qui cherche à trouver les points pour lequels une fonctions réalise un certain nombre d'exigences. Le lecteur pourra se reférer par exemple au libre de Phillipe G. Ciarlet \textit{Introduction à l'analyse numérique matricielle et à l'optimisation}~\cite{ciarlet} pour une présentation très complète d'un grand nombre de techniques. Dans ce manuscrit nous ne nous interesseront qu'a deux type de problèmes liées à l'apprantissange automatique et surtout au réseaux de neuronnes. Le premier de ces problèmes est la minimisation sans contrainte d'une fonctionelle convexe. @@ -6,11 +6,34 @@ Cela permet l'entraînement de modèle d'apprantissage automatique à l'aide d'u Le second problème reprend le premier mais y ajoute des contraintes. C'est à dire, comme minimise-t'on le coût tout en garantissant certaines conditions ? -\subsubsection{Descente de gradient} +\subsubsection{Optimisation sant contrainte : Descente de gradient} \label{sec:background-opti-sgd} Nous appellons fonctionelles les fonctions $\mathbb{R}^n$ dans $\mathbb{R}$. Soit $J$ une fonctionelle convexe, nous cherchons à trouver $x\in\mathbb{R}$ tel que $J(x) = \text{inf}\{J(t)\mid t\in\mathbb{R}\}$. +Pour simplifier cette rapide présentation, nous supposerons que $J$ à toujours les conditions de régularité (diférentiabilié) suffisante pour les opérations que nous appliquerons. +Pour trouver $x$ qui minimise $J$ une des méthode les plus utilisé en apprentissage automatique est la descente de gradient. +Il s'agit de construire une suite $(x_k)_{k\in\mathbb{N}}$ telle que $J(x_k)$ soit strictement décroissante ($\forall k\in\mathbb{N}~J(x_{k+1}) + + + diff --git a/classification_finie/figure/cezanne/colage.png b/classification_finie/figure/cezanne/colage.png new file mode 100644 index 0000000..ebe43f3 Binary files /dev/null and b/classification_finie/figure/cezanne/colage.png differ diff --git a/classification_finie/figure/cezanne/collage.svg b/classification_finie/figure/cezanne/collage.svg new file mode 100644 index 0000000..2170529 --- /dev/null +++ b/classification_finie/figure/cezanne/collage.svg @@ -0,0 +1,77 @@ + + + + diff --git a/classification_finie/figure/time/COMPAS.pdf b/classification_finie/figure/time/COMPAS.pdf new file mode 100644 index 0000000..b677e3a Binary files /dev/null and b/classification_finie/figure/time/COMPAS.pdf differ diff --git a/classification_finie/figure/time/LAW.pdf b/classification_finie/figure/time/LAW.pdf new file mode 100644 index 0000000..beb9fee Binary files /dev/null and b/classification_finie/figure/time/LAW.pdf differ diff --git a/classification_finie/main.tex b/classification_finie/main.tex index 91fdd27..901499a 100644 --- a/classification_finie/main.tex +++ b/classification_finie/main.tex @@ -1,2 +1,3 @@ \input{classification_finie/ba} \input{classification_finie/finit_classif} +\input{classification_finie/tabular} diff --git a/classification_finie/tabular.tex b/classification_finie/tabular.tex index ca2caaa..6112f77 100644 --- a/classification_finie/tabular.tex +++ b/classification_finie/tabular.tex @@ -1,12 +1,11 @@ -\FloatBarrier \begin{figure} \centering \begin{subfigure}{0.44\textwidth} - \includegraphics[width=\textwidth]{figure/ba/COMPAS.pdf} + \includegraphics[width=\textwidth]{classification_finie/figure/ba/COMPAS.pdf} \caption{COMPAS} \end{subfigure} \begin{subfigure}{0.44\textwidth} - \includegraphics[width=\textwidth]{figure/ba/LAW.pdf} + \includegraphics[width=\textwidth]{classification_finie/figure/ba/LAW.pdf} \caption{LAW} \end{subfigure} @@ -18,11 +17,11 @@ \begin{figure} \centering \begin{subfigure}{0.44\textwidth} - \includegraphics[width=\textwidth]{figure/time/COMPAS.pdf} + \includegraphics[width=\textwidth]{classification_finie/figure/time/COMPAS.pdf} \caption{COMPAS} \end{subfigure} \begin{subfigure}{0.44\textwidth} - \includegraphics[width=\textwidth]{figure/time/LAW.pdf} + \includegraphics[width=\textwidth]{classification_finie/figure/time/LAW.pdf} \caption{LAW} \end{subfigure} @@ -31,4 +30,9 @@ } \label{fig:time} \end{figure} -\FloatBarrier + +\begin{figure} + \centering + \includegraphics[width=\linewidth]{classification_finie/figure/cezanne/colage.png} + \caption{Classification du style des tableaux de Paul Cezanne}. +\end{figure} diff --git a/conclusion.tex b/conclusion.tex index 6d67ca2..fdb1810 100644 --- a/conclusion.tex +++ b/conclusion.tex @@ -1 +1,19 @@ -L'IA c'est comme une boîte de chocolat, on sait jamais lequel on vas avoir. +L'IA est un enjeu majeur des années à venir comme le prouve les investissement massifs dont font preuve les secteur privée et publique. +Les géants du numérique et la litérature d'ancipation font miroiter un ensemble de téchnologies qui changerait drastiquement notre manière de vivre, aussi bien sur le plan individuel avec de nouveaux outils de travail, que sur le plan institutionel comme dans les domaiens de la santée ,de la justice ou de l'éducation. +Face à de tels attantes il est capitale d'optenir une compréhensio en profondeur des modèle d'apprantissage automatique qui sont la clé de voute de l'IA moderne. +En effet, certain effets indésirable lié à l'utilisation de ces modèles ont été observés. +Les modèles consomment enorement d'énergie, sont suceptibles d'avoir des failles de sécurtié, peuvent réveler des attribut sensibles de personnes réel, créent des prédiction inexplicables et biasé et peuvent être utilsés à des fins illegales. +De plus les implication sociétales d'une potentielle future AGI ne sont pas clairement établies hors du cadre de la science fiction. + +Pour palier cela et créer une IA aligné avec les valeurs de République Française il faut des garantie théorique forte couplés à des résultats expérimentaux réalisé sur le long terme avec des bases de données incluant les minoritées victimes de discriminations. +C'est dans cette optique que s'inscrit ce manuscrit, plus précisement : +les interactions entre les différents effets indésirable liste plus haut ne sont pas encore compris dans leur entièreté. +Nous nous somment penché sur les intéractions entre l'équitée et la confidentialité et nous avons démontré que dans une certaine mesure l'équitée pouvai aller de pair avec confidentialité. +Pour cela nous avons crée des attaque ayant la garanté d'êter le plus performante tout en minimisant le coût de calcul. +Cela permetra à des organisations de contrôle comme la Défensseur des droits de mesurer avec certitude si une IA respècte les exigence d'equitée. +Les études théoriques que nous avons produites ont permis aussi de démontrer plusieur résultats qui améliorent la compréhension que nous avons de l'éxactitude équilibrée qui est une manière courante d'évaluer les modèles. + +Enfin nous nous somme attaqué à l'idée recu que les donnée synthétiques protègent unilatéralement la confidentialitée de utilisateur et leur attributs sensisbles en exhibant des contre exemples. +Néanmoin, modifier les algorithmes de génération de donnée en introduisant des contraintes d'équitée et de confidentialité pourrait permetre des avancé significative vers une IA plus morale. + + diff --git a/contexte/< b/contexte/< new file mode 100644 index 0000000..bb081cd --- /dev/null +++ b/contexte/< @@ -0,0 +1,106 @@ + +L'intelligence artificielle (IA) est un sujet extrement médiatisé depuis son ouverture au grand publique avec notament ChatGPT~\cite{} ou StableDiffusion~\cite{}. +Ces technologies sont aussi des enjeux capitaux pour résoudre plusieurs problèmes majeurs de l'humanitée, notament : +la crise climatique~\cite{barnes2019viewing,slater2023hybrid} et +la crise énergetiques~\cite{jin2020energy,kumar2020distributed,kumari2020blockchain,ngarambe2020use}. +Ainsi l'IA est présente aussi bien à l'échelle de la population qui à accès à des services pours son usage personelle, qu'à l'echelle collective institutionelle. + +%Individuelle +\subsection{A l'échelle individuelle} +\label{sec:contexte-indi} +L'IA promet de faciliter et d'accelerer un grand nombre de tâches dans de multiples domaines : de l'édition d'image sur son téléphone portable~\cite{} jusqu'aux diagnostiques médicaux~\cite{}. +Les géants du numérique poussent de plus en plus l'IA dans leurs produits ce qui rend son utilisation simple d'accès. +La figure~\ref{fig:contexte-gafam} montre comment les GAFAM (Google Facebook Amazon Microsoft) mettent en avant des outils grand publiques. +\begin{figure} + \centering + \includegraphics[width=\linewidth]{contexte/figure/gafam.png} + \caption{Exemples de produits et de marketing proposé par les GAFAM Google Apple Facebook (Meta) Amazon Microsoft.} + \label{fig:contexte-gafam} +\end{figure} +On trouve des implémentations d'assistant personnels, d'aide à la programmation, d'édition d'image, etc. +Des objects connecté portables, comme l'Apple Watch~\cite{applewatch}, permettent de suivre et d'analyser divers indicateurs médicaux. +Grace à cela, les utilisateurs peuvent avoir accès à une medecine personalisée bien que il n'existe pas d'étude clinique à grande echelle qui prouve fromellement que de tel appareil puisse améliorer la santé~\cite{dunn2018wearables}. +Avec les GAFAM, de nouvelles startups investissent le domaine de l'IA. +Une des plus médiatique\cite{openaiinter,openaibfm,openaint}, OpenAI à délopé ChatGPT : un programme de conversation grandement utilisé~\cite{openaibig}. +Nous montrons quelques exemples d'utilisations dans la figure~\ref{fig:contexte-chatgpt}. +ChatGPT peut être utilsé pour comme fondation pour de nombreuses tâches comme l'assistance à la programmation, resumer des textes, la traduction, la reformulation, etc. +ChatGPT cherche aussi à rendre accessible l'information en temps réel en s'alliant avec des journaux de referance comme LeMonde en France ou El Paìs en Espagne~\cite{gptjournal}. +\begin{figure} + \centering + \begin{subfigure}{\linewidth} + \centering + \includegraphics[width=\linewidth]{contexte/figure/chatgpt/prog.png} + \caption{Aide à la programmation.} + \end{subfigure} +\end{figure} +\begin{figure}\ContinuedFloat + \begin{subfigure}{\linewidth} + \centering + \includegraphics[width=\linewidth]{contexte/figure/chatgpt/hanami.png} + \caption{Résumé en d'un texte en japonais.} + \end{subfigure} + \caption{Exemples d'utilisation de ChatGPT.} + \label{fig:contexte-chatgpt} +\end{figure} +La recherche publique donne aussi lieu à des services utilisables individuellment. +Par exemple Pl@ntNet~\cite{barthelemy:hal-01837361,plantnet} permet avec un simple smartphone de reconnaitre une plante à partir de photographies. + +%Collective +\subsection{A l'échelle institutionelle} +\label{sec:contexte-insti} +L'echelle indiviuelle de l'IA n'est que le sommet de l'iceberg, son utilisation institutionel et gouvernemental est ancré plus profondément. +Cela est particulièrement vraie dans les régimes autoritaires, comme la Chine, où l'IA est utilisé pour controler et opprimer la population nottamant grace à la reconaissance faciale~\cite{beraja2023ai}. +De plus Beraja et al. montre que les choix politiques de Pékin, lors des soulevements populaires, entraînent un dévelopement accéléré des technologie de reconaissance faciale~\cite{beraja2023ai}. +Beraja et al. explique aussi que ces technologies peuvent ensuite quitter la sphère politique et devenir des produits commerciaux disponibles au grand publique. + +%Etats Unis +%Justice prédictive +Aux Etats Unis l'IA est utilisé, nottamant dans la justice et dans l'éducation. +Concernant la justice, +%Position du crime +%https://www.soundthinking.com/ +%\cite{brayne2015predictive} + +%Recidivism + +%France hopitaux +Collaboration HCL/INRIA + +\subsection{Définition(s)} +Nous avons vu dans les parties précédentes que le terme \textquote{Intelligence Artificielle} est utilisé pour parler d'un grand nombre de téchniques différentes et de produits commerciaux différents. +De plus, dans les médias et dans le language de tous les jours, nous pouvons entendre~\cite{underscore} de expression comme : \textquote{Une nouvelle IA qui fait [..]}. +Cela renvoit l'IA à une collection de logiciels comme nous l'avons présenté dans les Sections~\ref{sec:contexte-indi} et \ref{sec:contexte-insti} mais ne donne pas de caracétrisation qui permette de classifier un logiciel spécifique comme \textquote{IA} ou \textquote{pas IA}. +Est-ce que \textit{grep}~\cite{grep}, le logiciel de reconaissance de motifs textuels, est IA ? +Est-ce qu'un programme d'\textit{Optical Character Recognition (OCR)} comme Ocrad~\cite{ocrad} est IA? + +Le dictionaire de l'Académie francaise~\cite{dico-int} défini l'intelligence comme la \textquote{ +Faculté de comprendre, de concevoir, de connaître, et notamment faculté de discerner ou d’établir des rapports entre des faits, des idées ou des formes pour parvenir à la connaissance}. +Peut-on rapporcher cette définition de +Le mot \textquote{artificiel} quand-à lui signifie \textquote{Qui est dû à la technique de l’homme, par opposition à ce qui a été créé et s’est développé naturellement}~\cite{dico-art}. +Intelligence aritificielle : \textquote{ensemble de propriétés rapprochant du cerveau humain certains systèmes informatiques très évolués}~\cite{dico-art}. + +Strong AI + +Weak AI + +AGI + +Cette polyvalence du terme rend son utilisation assez imprecise comme l'écrit Richard M. Stallman dans la liste de terme \textquote{à éviter} du projet GNU~\cite{gnuAI}. + +France culture Banissons IA~\cite{banIA}. + +\subsection{Philosophie et culture} + +Experience de la Chambre Chinoise~\cite{searle1980minds}. + +Basilique de Roko, Paris Pascalien~\cite{Singler_2018} + +Alignement de l'IA + +Convergence de l'IA + +\textit{The Matrix}~\cite{matrix}. +\textit{The Bicentennial Man}~\cite{bicentenaire} (livre). +\textit{The Terminator}~\cite{terminator}. +\textit{Avengers: Age of Ultron}~\cite{avenger}. + diff --git a/contexte/background b/contexte/background new file mode 100644 index 0000000..e69de29 diff --git a/contexte/ckoi.tex b/contexte/ckoi.tex index 0dce14d..0bda272 100644 --- a/contexte/ckoi.tex +++ b/contexte/ckoi.tex @@ -1,5 +1,5 @@ -L'intelligence artificielle (IA) est un sujet extrement médiatisé depuis son ouverture au grand publique avec notament ChatGPT~\cite{} ou StableDiffusion~\cite{}. +L'intelligence artificielle (IA) est un sujet extrement médiatisé depuis son ouverture au grand publique avec notament ChatGPT~\cite{chatgpt} ou StableDiffusion~\cite{stabledi}. Ces technologies sont aussi des enjeux capitaux pour résoudre plusieurs problèmes majeurs de l'humanitée, notament : la crise climatique~\cite{barnes2019viewing,slater2023hybrid} et la crise énergetiques~\cite{jin2020energy,kumar2020distributed,kumari2020blockchain,ngarambe2020use}. @@ -8,7 +8,7 @@ Ainsi l'IA est présente aussi bien à l'échelle de la population qui à accès %Individuelle \subsection{A l'échelle individuelle} \label{sec:contexte-indi} -L'IA promet de faciliter et d'accelerer un grand nombre de tâches dans de multiples domaines : de l'édition d'image sur son téléphone portable~\cite{} jusqu'aux diagnostiques médicaux~\cite{}. +L'IA promet de faciliter et d'accelerer un grand nombre de tâches dans de multiples domaines : de l'édition d'image sur son téléphone portable~\cite{aaigpt} jusqu'aux diagnostiques médicaux~\cite{maghded2020novel}. Les géants du numérique poussent de plus en plus l'IA dans leurs produits ce qui rend son utilisation simple d'accès. La figure~\ref{fig:contexte-gafam} montre comment les GAFAM (Google Facebook Amazon Microsoft) mettent en avant des outils grand publiques. \begin{figure} diff --git a/contexte/enjeux.tex b/contexte/enjeux.tex index c69573f..02c6471 100644 --- a/contexte/enjeux.tex +++ b/contexte/enjeux.tex @@ -1,7 +1,7 @@ Les modèles de decisions ont pour but réaliser un choix de manière automatiques sans ou en reduisant l'intervention humaine. -L'optique est de pouvoir traiter un grand nombre de décision rapidement tout en retirant certain biais que pourais avoir un décideur humain~\cite{}. -Par exemple un modèle peut décider quelle publicité vas voir un utiliateur d'un page web~\cite{} ou quelle ecriture comptable présente une anomalie dans une logique d'audit~\cite{}. +L'optique est de pouvoir traiter un grand nombre de décision rapidement tout en retirant certain biais que pourais avoir un décideur humain~\cite{al2021role}. +Par exemple un modèle peut décider quelle publicité vas voir un utiliateur d'un page web~\cite{choi2020identifying} ou quelle ecriture comptable présente une anomalie dans une logique d'audit~\cite{ucoglu2020current}. Applliqué à certains milieux, cette methode de décision soulève de nombreuses critiques et inquiétudes qui ont investi le débat publique. Ces critiques et inquétudes sont théorisés dans la littérature scientifique au travers des six défis de l'IA: \begin{enumerate} @@ -21,12 +21,12 @@ Il revient donc aux personnes qui crée ces modèles de déterminer, en fonction \subsection{Equitée} \label{sec:contexte-eq} -L'élborations de modèles est soumis à différent bias qui influencent son fonctionement~\cite{}. +L'élborations de modèles est soumis à différent bias qui influencent son fonctionement~\cite{surveyfair}. C'est à dire que le modèle se compre différamant pour différents sous-ensembles de la population. Cela peut donner lieu à des discriminations notament dans le modèle de décision qui influence directment la vie de persones. La justice prédictive tel qu'utilisé aux Etats Unis en est un bon exemple. Dans ce cas, un modèle est utilisé pour prédire si un individu jugé coupable à un forte probabilité d'être récidiviste au non. -En utilisant de tel modèle nous mesurons que les afro-américains (\textit{blacks}) son plus souvent predit comme ayant un forte chance d'être récidiviste que le reste de la population (\textit{whites})~\cite{}. +En utilisant de tel modèle nous mesurons que les afro-américains (\textit{blacks}) son plus souvent predit comme ayant un forte chance d'être récidiviste que le reste de la population (\textit{whites})~\cite{dressel2018accuracy}. En plus d'être un enjeu, Al-Alawi et al.~\cite{al2021role} avance que l'utilisation de l'IA peut être une solution plus equitable que la décision humaine dans le processus de recrutement. L'équitée dans le modèle peut-être imposé lors de l'entraînement. @@ -34,17 +34,28 @@ Nous étudierons en détail ce processu dans la Section~\ref{sec:background-eq}. \subsection{Explicabilitée} \label{sec:contexte-expl} -Transparance dans la médecine, Boite noire, ~\cite{quinn2022three}. +Le concepte de boîte noire\footnote{\textit{Black box}} est une manière imagée de dire qu'on ne comprend pas ou qu'on ne peut pas avoir accès au fonctionement d'un programme. +On l'utilise alors comme un outil qui prend un entrée et donnée une sortie, un peu à la manière de la définition d'IA que nous avons illustre dans la Figure~\ref{fig:contexte-IAUE}. +Cette approche de l'IA est problématique pour plusieurs raisons qu'illuste Quinn et al.~\cite{quinn2022three} dans le domaine médicale : +\begin{itemize} + \item Les boîte noires manque de garanties quand à la qualitée de la prédiction et rendent complexe l'étude es biais. + \item Les boîtes noîres ne permettent pas l'interpretation des résultats. + \item Les boîtes noires ne peuvent pas prendre en compte toutes les subtilités des cas particuliers (de patients). +\end{itemize} + +Les réseaux de neuronnes ont une part prépondérante de l'IA. +Or de pars leur fonctionement interne complexe que nous explorerons à la Section~\ref{sec:background-ml} et le fait que leur compréhension théorique soit encore lacunaire, ils sont souvent utilisé en boîte noire~\cite{yuan2022explainability}. +Pour palier cela il existe certaine methodes qui essaie de produire des explication automatisé compréhenseibles des réseaux de neurones~\cite{yuan2022explainability,du2019techniques,rai2020explainable}. \subsection{Confidentialitée} -D'une manière génèrale, l'inteligence artificielle brasse une quantité astronomique de données~\cite{}. +D'une manière génèrale, l'inteligence artificielle brasse une quantité astronomique de données~\cite{villani2018donner}. Ce brassage s'opère à deux niveaux : au moment de la creation du modèle et au moment de son utilisation en production. Pour créer des modèles performants, il est necessaire d'utiliser beaucoup de données. Ces données servent à choisirs les bon parametres du modèle au travers de divers methods statistiques et d'optimisations, on les appeles données d'entrainement. -Les modèles les plus récent et performant necessite un grand nombre de paramètres, citons par exemple le LLM LLaMA qui posède 65 milliard de pramètres ~\cite{}! -Ce grand nombre de paramètre a l'effet indesirable de mémoriserdes informations potentielement sensible sur les données d'entrainement~\cite{}. +Les modèles les plus récent et performant necessite un grand nombre de paramètres, citons par exemple le LLM LLaMA qui posède 65 milliard de pramètres ~\cite{touvron2023llama}! +Ce grand nombre de paramètre a l'effet indesirable de mémoriserdes informations potentielement sensible sur les données d'entrainement~\cite{shokri2017membership}. L'information contenue dans les données d'entrainement est comme résumé, compressée dans la masses, a prior incompréhensible pour un humain, des paramètres du modèle. -Ainsi un individue malveillant, que l'on appelera attaqueur, pourra retrouver des informations sur les données d'entrainement juste en utilisant les paramètres du modèle~\cite{}. +Ainsi un individue malveillant, que l'on appelera attaqueur ou adversaire, pourra retrouver des informations sur les données d'entrainement juste en utilisant les paramètres du modèle~\cite{shokri2017membership,yeom2018privacy,carlini2022membership}. \begin{figure} \centering \input{contexte/figure/tikz/train} @@ -55,26 +66,42 @@ Ainsi un individue malveillant, que l'on appelera attaqueur, pourra retrouver de Un autre risque de fuite de donnée se trouve au moment du l'utilisation du modèle, après son entraînement, lors de son utilisation. A ce moment, les utilisateurs envoient en entrée du modèle des données qu'ils peuvent vouloir gardé confidentielles. -Cependant la sortie du modèle, qui a vocation à être partagée, peut reveler une parite des informations sensibles contenues dans les donnée d'entrée de l'utilisateurs. -Mettre en avant risque est le travail originial que nous avons réalisé : nous le présentons dans la Section~\ref{sec:aia}. +Cependant la sortie du modèle, qui a vocation à être partagée, peut reveler une parite des informations sensibles contenues dans les donnée d'entrée de l'utilisateurs~\cite{yeom2018privacy,zhao2021infeasibility,jayaraman2022attribute,attriguard,Song2020Overlearning,malekzadeh2021honestbutcurious}. +Il s'agit du principle risque de confidentialité que nous allons explorer dans ce manuscrit. +Nous y reviendrons donc dans la Section~\ref{sec:background-conf} pour une présentation de l'état de l'art et au Chapitre~\ref{sec:aia} pour notre contribution. + +Faisons un rapide point sur la términologie de ses attaques. +Quand l'adversaire infère si un donnée à servi à l'entraînement du modèle, c'est une \emph{attaque d'apartenance}\footnote{\textit{Membership inference attack}}. +Quand l'adversaire cherche à retrouver des informations sur les données d'entraîenemnt c'est une \emph{attaque de reconstruction}. +Quand l'adversaire cherche à retrouver un statistique globale du de la base de donnée d'entraînement, par exemple la proportion d'homme et de femme, c'est une \emph{attaque d'inférence de propriété}\footnote{\textit{Property inference attack}}. +Qaudn l'adversaire cherche à infere un attribut sensible c'est une \emph{attaque d'inférence d'attribut sensible (AIA)}\footnote{\textit{Attribut inference attack}}. \subsection{Sécuritée} \label{sec:contexte-secu} -Backdoor~\cite{gao2020backdoor, doan2021lira} +Le processus d'entraînement des réseau de neuronnes est souvent secret et les utilisateur ont accès uniquement à un modèle entraîné. +Dans ce contexte un adversaire qui a accès à l'entraînement de modèle, dans un cadre d'apprentissage décentralisé par exemple, peut injecter des portes dérobé qui lui permet de modifer les futures prédictions à sa convenance. +Considérons le scenarios factice suivant : une entreprise construit un modèle comercial ayant pour but la prédiction du recidivisme. +Cette entreprise vend ce modèle à la l'état de Floride des Etats Unis. +Si un adversaire a introduit une porte dérobée il pourra choisir quelle sera la prédiction du modèle décidant ainsi unilatéralement si la juge va penser que le coupable a une forte chance d'être recidiviste ou non. + +Le principe de ce genre d'attaque est assez simple : l'adversaire cache dans les donnée d'entrée un déclencheur\footnote{trigger} que le modèle apprend à reconaitre~\cite{gao2020backdoor, doan2021lira}. +Ainsi quand le modèle est utilisé en production l'adversaire peut utilisé le déclancheur sans avoir accès à l'ordinateur de juge ou au serveur qui fait tourner le modèle, il suffit de modifier la donnée d'entrée. \subsection{Comsomation d'énergie} +Nous vivons une crise climatique majeure du a l'activité humain qui présage de grave changements pour l'ensemble du vivant ainsi que dans nos mode de vie~\cite{pielke2005hurricanes,khasnis2005global,houghton2005global,melillo2014climate,mcnutt2013climate} +Ainsi, bien que l'IA soit prometeuse pour nous aider à anticiper ces changements~\cite{villani2018donner} il ne faut pas que son développement et l'entraînement de modèles accelère le changment climatique et le rechauffement climatique. +Concrètement, le LLM Llama2 à émis 539 tonnes de $\text{CO}_2$ en prenant en compte les diverse plan de compenssation carbonne de Meta~\cite{touvron2023llama}. +L'empreinte carbone d'un français étant estime à 9,2 tonnes de $\text{CO}_2$ par an~\cite{carbonfr} c'est donc à peut près l'équivalant de 59 personne pendant un an qui à été généré par Llama2. +C'est donc dans l'optique d'entraîner des modèle bien proportioné (ayant peu de paramètres) et pouvant fonctionner sur des ordinateurs portables ou des téléphones portables\footnote{\textit{Smartphone}} que sont né les idée d'IA frugale et embarqué~\cite{schwartz2020green,verdecchia2023systematic,shadrin2019designing}. +Comme nous l'avons vus plus haut, il s'agait aussi d'un positionement stratégique de la France~\cite{stratfr}. + On comprend bien le caractère primoridal et particulier de l'utilitée. A quoi bon avoir un modèle equitable ou qui ne consome presque pas d'énergie si ses prédictions sont toujours fausses ? Ainsi, qaund nous évaluons un modèle au travers des autres défis, nous metons toujours se résultat en parallèle avec l'utilitée. -De manière plus générale, les six défis sont lié entre eux et l'étude de ces liens et un sujet de recherche florissant~\cite{}. - -Par exemple Parcoursup est un programme dévelopé par le gouvernment français qui à pour but d'automatiser l'attribution des places dans l'enseignement supérieur au nouveaux bacheliers~\cite{}. -Depuis son entré en vigeur en 2018.. - -Justice predictive COMPAS - -Assurances +De manière plus générale, les six défis sont lié entre eux et l'étude de ces liens et un sujet de recherche florissant~\cite{dai2022comprehensive,franco2021toward,grant2020show}. +C'est dans ce cadre que ce situe le travail réalisé dans ce manuscrit : nous explorerons à partir du Chapitre~\ref{sec:fini} les lien entre la confidentialité et l'équitée. +Plus précisement les AIA et les différentes définitions téchnique qui sont proposés pour l'équitée. diff --git a/contexte/figure/g5k-backbone.pdf b/contexte/figure/g5k-backbone.pdf new file mode 100644 index 0000000..fef2216 Binary files /dev/null and b/contexte/figure/g5k-backbone.pdf differ diff --git a/contexte/figure/g5k.svg b/contexte/figure/g5k.svg new file mode 100644 index 0000000..1f89aaa --- /dev/null +++ b/contexte/figure/g5k.svg @@ -0,0 +1,123 @@ + + + + + + + + + + site web + + + hash + map + + geography + europe + france + + + + + Yves Aubry (yvounet) + + + + + Yves Aubry (yvounet) + + + + + Yves Aubry (yvounet) + + + + image/svg+xml + + + en + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Lille + + + + Nancy + + + + Lyon + + + + Grenoble + + + + Sophia + + + 10G dedicated lambda + + + + Luxembourg + + + + Toulouse + + + + + Last update: 2023-06-16 + + + Nantes + + + + Rennes + + + \ No newline at end of file diff --git a/contexte/legal.tex b/contexte/legal.tex index 7f47af4..57b3333 100644 --- a/contexte/legal.tex +++ b/contexte/legal.tex @@ -1,13 +1,11 @@ -L'Union Européene a établie le règlement (UE) 2024/1689 du parlement européen et du conseil -du 13 juin 2024 -établissant des règles harmonisées concernant l’intelligence artificielle. Pour mieux comprendre les enjeux autour des différents scénarios d'attaques, outre la recherche inhérente au comportement sociétal humain à se dissimuler et à ne montrer que ce qu'il souhaite montrer, penchons-nous du côté de la législation, des droits et des obligations qui entourent nos données. \subsection{Protection des utilisateurs} +\label{sec:contexte-legal-util} L'article 8 de la Charte des droits fondamentaux de l'Union Européenne dispose que : \og \begin{enumerate} \item Toute personne a droit à la protection des données à caractère personnel la concernant. @@ -19,35 +17,68 @@ le droit d’accéder aux données collectées la concernant et d’en obtenir l \fg L'objet de cette section est de comprendre comment ce droit fondamental entre en conflit avec les attaques décrites dans ce rapport au travers de l'étude de textes légaux. -L'article 4 paragraphe 1 du Règlement Général sur la Protection des Données, le R.G.P.D., dispose que +L'article 4 paragraphe 1 du Règlement Général sur la Protection des Données, le RGPD, dispose que \og Une donnée à caractère personnel est toute information se rapportant à une personne physique identifiée ou identifiable \fg. Cette définition est importante dans le cadre des attaques de modèles car elle permet de rapidement identifier le cadre légal : -si nous pouvons rattacher l'inférence à une personne, il s'agit d'une donnée personnelle, elle doit donc être utilisée conformément au R.G.P.D. \cite{RGPD} +si nous pouvons rattacher l'inférence à une personne, il s'agit d'une donnée personnelle, elle doit donc être utilisée conformément au RGPD \cite{RGPD} et à la loi n° 78-17 du 6 janvier 1978 relative à l'informatique, aux fichiers et aux libertés\cite{78-17}. On se place dans le cadre où la base de données ayant servi d'entraînement au modèle de machine learning contient des données personnelles et des données sensibles. On suppose aussi que l'utilisation de ces données pour l'entraînement du modèle est licite. -Dans nos travaux sur la fairness nous avons étudié plusieurs attaques sur les attributs sensibles tels que l'ethnie ou le genre. +Dans nos travaux sur l'équitée nous avons étudié plusieurs attaques sur les attributs sensibles tels que l'ethnie ou le genre. Nous nous sommes placés notamment dans le cadre où l'attribut sensible n'est pas utilisé dans l'entraînement du modèle, ce qui signifie que la personne ayant fourni la donnée n'a pas donné son accord pour l'utilisation de l'attribut sensible. -Nous avons montré que retrouver cet attribut sensible à partir du modèle est possible avec une grande précision, ce qui implique le traitement de cet attribut au sens de la définition de l'article 4 paragraphe 2 du R.G.P.D. le définissant comme: +Retrouver cet attribut sensible à partir du modèle est possible~\cite{malekzadeh2021honestbutcurious,Song2020Overlearning}. +Le traitement de cet attribut au sens de la définition de l'article 4 paragraphe 2 du RGPD est : \og toute opération ou tout ensemble d'opérations effectuées ou non à l'aide de procédés automatisés et appliquées à des données ou des ensembles de données à caractère personnel, telles que la collecte, l'enregistrement, l'organisation, la structuration, la conservation, l'adaptation ou la modification, l'extraction, la consultation, l'utilisation, la communication par transmission, la diffusion ou toute autre forme de mise à disposition, le rapprochement ou l'interconnexion, la limitation, l'effacement ou la destruction. \fg -L'article 9 paragraphe 1 du R.G.P.D. dispose que +L'article 9 paragraphe 1 du RGPD dispose que \og Le traitement des données à caractère personnel qui révèle l'origine raciale ou ethnique, les opinions politiques, les convictions religieuses ou philosophiques ou l'appartenance syndicale, ainsi que le traitement des données génétiques, des données biométriques aux fins d'identifier une personne physique de manière unique, des données concernant la santé ou des données concernant la vie sexuelle ou l'orientation sexuelle d'une personne physique sont interdits. \fg -Publier un modèle avec lequel il est possible de retrouver l'ethnie ou le genre est donc illégal, sauf exceptions. +Donc, publier un modèle avec lequel il est possible de retrouver l'ethnie ou le genre est donc illégal, sauf exceptions. -Même si l'attribut sensible ne rentrait pas dans le cadre de l'article 9 paragraphe 1 du R.G.P.D. le fait de pouvoir utiliser une attaque d'attribut constitue une violation des données personnelles au sens de l'article 4 paragraphe 12 du R.G.P.D. qui dispose qu'une violation des données personnelles est +Même si l'attribut sensible ne rentrait pas dans le cadre de l'article 9 paragraphe 1 du RGPD le fait de pouvoir utiliser une attaque d'attribut constitue une violation des données personnelles au sens de l'article 4 paragraphe 12 du RGPD qui dispose qu'une violation des données personnelles est \og une violation de la sécurité entraînant, de manière accidentelle ou illicite, la destruction, la perte, l'altération, la divulgation non autorisée de données à caractère personnel transmises, conservées ou traitées d'une autre manière, ou l'accès non autorisé à de telles données. \fg +\subsection{Discrimination} +\label{sec:contexte-legal-discrimination} +Les facteur de discrimination et les données personels ont une grande intersection, (ethnie, couleur de peau, coryance religieuses, etc). +Si un adversaire utilise une attaque d'attribut pour inférer un facteur de discrimination et l'utilise pour réaliser une décision conernant un utilisateur, ou si un facteur de discrimination est implicitement ou explicitement utilisé par un modèle, il est possible que cette situation tombe dans le cadre des loi sur les discriminations. +Sur le site de \url{servie-publique.fr} nous trouvons la définition suivante de discrimination. +\textquote{La discrimination est un délit interdit par la loi et puni d'une amende et/ou d'une peine d'emprisonnement inférieure à 10 ans qui consiste à traiter défavorablement une personne en s'appuyant sur un motif interdit par la loi}~\cite{servicepubdiscrimination}. +Les motifs interdit par la loi se comptent au nombre de 25 critères de discrimination qui nous listons en Annexe~\ref{anx:discri}. +Nous remarquons bien que ces critères sont ceux souvent classifier d'attribut sensible dans la litérature IA~\cite{Song2020Overlearning,malekzadeh2021honestbutcurious}. + +En France, la lutte contre les discrimination fait parti des fondements de notre république. +Le mot \textquote{égalité} est dans la dévise de la cinquième république comme en dispose l'article 2 de la Constitution du 3 Juin 1958. +L'Article permier de notre Constitution dispose que +\textquote{Elle [la France] assure l'égalité devant la loi de tous les citoyens sans distinction d'origine, de race ou de religion. Elle respecte toutes les croyances.}. +De plus, l'article +71 alinéa 1 de la Constitution met en place +la Défenseure des droits veille notament à défendre les personnes victimes de discimination~\cite{defenseure}. +Cette instance pousse aussi pour plus de responssabilisation des utilisateurs d'IA qui utilisent ces technologie sans considérer leur biais~\cite{defenseure2024lutter}. + +Donnons un cas concret : l'utilisation de l'IA pour automatiser le recrutement est de plus en plus courant~\cite{defenseur2015emploi}. +Si les logiciels utilisé présentent de facteur de discrimination ou collecte trop d'informations sur les candidats au recrutemnt, l'employeur est dans l'illégalité. +En effet, l'article L 1221 alinéa 6 du Code du travail dispose que les informations demandé +\textquote{doivent présenter un lien direct et nécessaire avec l'emploi proposé ou avec l'évaluation des aptitudes professionnelles}. +De plus l'article L 1132 alinée 1 dispose que \textquote{aucune personne ne peut être écartée d'une procédure de recrutement ou de nomination ou de l'accès à un stage ou à une période de formation en entreprise, aucun salarié ne peut être sanctionné, licencié ou faire l'objet d'une mesure discriminatoire, directe ou indirecte}. + +Comparativement à la loi française, aux Etats Unis d'Amérique, l'effet différencié\footnote{\textit{Disparate impact}} est une manière pratique de contrôler si une procédure crée un désavantage, une discrimination, contre une minoritée~\cite{biddle2006adverse}. +Cet effet différencie est une qunatité qui peut être calculé sur sur le modèle d'IA ou sur tout autre procédure qui réalise une séléction binaire comme l'admission dans une école, l'attribution et pret ou encore l'embauche. +C'est tout simplement la proportion d'admis de la minorité discriminé divisé par la majorité favorisé. +Nous en donnerons une définition plus formelle à la Section~\ref{sec:background-eq} +C'est dons une quantité qui varie entre 0 et 1 où 0 indique que personne dans la minorité n'est séléctioné et 1 indique que autant de personne de la majorité que de la minorité sont sélectione : c'est la parité. +Aux Etats Unis, si l'effet différencié est inférieur à $0,8$ cela constitu une preuve au regard de la loi qui fait jursiprudence que le système de selection fait preuce de discrimination. +En France nous n'avons pas de tel précédent ou un métrique précise est utilisé. + \subsection{Protection des bases de données} On considère dans cette section que le producteur de la base de données bénéficie d'une protection par le droit sui generis au sens de l'article L.341-1 du Code de la Propriété Intellectuelle qui dispose que \og Le producteur d'une base de données, entendu comme la personne qui prend l'initiative et le risque des investissements @@ -55,23 +86,22 @@ correspondants, bénéficie d'une protection du contenu de la base lorsque la constitution, la vérification ou la présentation de celui-ci atteste d'un investissement financier, matériel ou humain substantiel \fg. -On peut imaginer plusieurs cas où les attaques présentées dans mon stage peuvent porter atteinte aux droits du producteur de la base de données. -\begin{itemize} - \item Supposons que le producteur décide d'interdire \og l'extraction ou la réutilisation répétée et systématique de parties qualitativement ou quantitativement non substantielles du contenu de la base lorsque ces opérations excèdent manifestement les conditions d'utilisation normales de la base de données.\fg, +On peut imaginer plusieurs cas où les attaques présentées dans ce manuscrit peuvent porter atteinte aux droits du producteur de la base de données. + +Supposons que le producteur décide d'interdire \og l'extraction ou la réutilisation répétée et systématique de parties qualitativement ou quantitativement non substantielles du contenu de la base lorsque ces opérations excèdent manifestement les conditions d'utilisation normales de la base de données.\fg, comme le prévoit l'article L.342-2 du Code de la Propriété Intelectuelle. -Nous sommes alors en droit de penser qu'une inference attack représente l'extraction d'une partie de la base de données, en l'occurence une colonne de la base de données. +Nous sommes alors en droit de penser qu'une attaque de reconstruction représente l'extraction d'une partie de la base de données, en l'occurence une colonne de la base de données. De plus cette attaque excède les conditions d'utilisation car, dans ce cas, la condition d'utilisation normale est l'entraînement d'un modèle de machine learning. Ici, la personne menant l'attaque porte atteinte aux droits du producteur de la base de données. - \item Ici, c'est le fournisseur de solution de machine learning, exploitant la base de données, qui porte atteinte aux droits du producteur. +Considéreon maintenant que c'est le fournisseur de solution de machine learning, exploitant la base de données, qui porte atteinte aux droits du producteur. On se place dans le cas où le producteur interdit \og la réutilisation, par la mise à la disposition du public de la totalité ou d'une partie qualitativement ou quantitativement substantielle du contenu de la base, quelle qu'en soit la forme.\fg, conformément à l'article L.342-1 alinéa 2 du Code de la Propriété Intelectuelle. Dans le cas où le fournisseur de modèle de machine learning permet à ses clients (le public) de mener à bien des attributs inference attack, il met à disposition une partie de la base par sa négligence à utiliser une méthode d'apprentissage résistante à ce type d'attaque. -\end{itemize} Notons que l'article L.343-4 du Code de la Propriété Intellectuelle dispose qu'\og est puni de trois ans d'emprisonnement et de 300 000 euros d'amende le fait de porter atteinte aux droits du producteur d'une base de données tels que définis à l'article L. 342-1.\fg \subsection{Secret des affaires} -L'attaque property inference peut révéler des statistiques globales sur une entreprise ayant utilisé une base de données qu'elle tient secrète pour l'entraînement d'un modèle de machine learning ensuite publié. +L'attaque d'inférence de propriété peut révéler des statistiques globales sur une entreprise ayant utilisé une base de données qu'elle tient secrète pour l'entraînement d'un modèle de machine learning ensuite publié. Ces statistiques sont des informations qui : \begin{itemize} \item Ne sont pas connues ou aisément accessibles pour les personnes familières de ce type d'information. @@ -83,11 +113,56 @@ Au titre de l'article L.151-1 du Code de Commerce, ces statistiques sont protég De plus l'article L.151-4 alinéa 2 du Code de Commerce dispose que \og L'obtention d'un secret des affaires est illicite lorsqu'elle est réalisée sans le consentement de son détenteur légitime et qu'elle résulte [...] de tout autre comportement considéré, compte tenu des circonstances, comme déloyal et contraire aux usages en matière commerciale. \fg Ces articles datent de la loi n° 2018-670 du 30 juillet 2018 relative à la protection du secret des affaires. -Il n'y a pas de jurisprudence pour confirmer mais on peut raisonnablement penser qu'une attaque sur un modèle de machine learning peut être considérée comme déloyale et contraire aux usages en matière commerciale. +Il n'y a pas de jurisprudence pour confirmer mais on peut raisonnablement penser qu'une attaque sur un modèle d'IA peut être considérée comme déloyale et contraire aux usages en matière commerciale. Mais d'un autre côté, l'article L.151-3 alinéa 2 du Code de Commerce dispose que \og Constituent des modes d'obtention licite d'un secret des affaires l'observation, l'étude, le démontage ou le test d'un produit ou d'un objet qui a été mis à la disposition du public ou qui est de façon licite en possession de la personne qui obtient l'information, sauf stipulation contractuelle interdisant ou limitant l'obtention du secret. \fg On pourrait donc dire que l'attaque s'apparente à une observation ou une étude d'un produit qui a été mis à la disposition du public. Il faut donc attendre une jurisprudence en la matière pour savoir si cette attaque représente une atteinte au secret des affaires. -Quoi qu'il en soit, il est dans l'intérêt du producteur de la base de données de s'assurer que le fournisseur de solution machine learning sécurise convenablement ses modèles contre ce genre d'attaque. +Quoi qu'il en soit, il est dans l'intérêt du producteur de la base de données de s'assurer que le fournisseur de solution IA sécurise convenablement ses modèles contre ce genre d'attaque. +\subsection{Usage illicite de l'IA} +Comme nous l'avons vu à la Section~\ref{sec:contexte-insti} avec l'exemple de la Chine, l'IA peut-être utilisé pour des raisons qui vont à l'encontre des droits les plus fondamentaux. +Face à cette menace, +l'Union Européene a établie le règlement (UE) 2024/1689 du parlement européen et du conseil +du 13 juin 2024 +établissant des règles harmonisées concernant l’intelligence artificielle~\cite{aiact}. +Etant un réglement il est directement applicable en droit français. +Ce réglement a trois approches visant à limité une utilisation de l'IA qui serait contraire aux droit fondamentaux. + +La première approche consiste à résponsabiliser les fournisseur et les deployeurs de système d'IA quand au potentielles dérive avec l'Article 4. +De plus l'Article 50 dispose de l'obligation des frounisseur etdeployeurs de transparance, c'est à dire informer les utilisateurs qu'ils interagissent avec une IA. +Enfin de part leur nature générale et pouvant amener à la création d'IA mutliples, les fournisseurs de modèle de fondation\footnote{\textit{Fundation model}} comme ChatGPT ou Llama sont soumis à de plus grande obligations et responsabilités. + +La seconde approche très pragmatique consiste à interdire un certaine nombre de pratiques qui sont listé à l'Article 5. +Citons certaines qui sont en rapport avec ce manuscrit. +Le paragraphe 1 alinéa c point (i) dispose que +\textquote{ +Les pratiques en matière d’IA suivantes sont interdites:[...] +la mise sur le marché, la mise en service ou l’utilisation de systèmes d’IA pour l’évaluation ou la classification de +personnes physiques ou de groupes de personnes[...] +conduisant [au] +traitement préjudiciable ou défavorable de certaines personnes physiques ou de groupes de personnes dans des +contextes sociaux dissociés du contexte dans lequel les données ont été générées ou collectées à l’origine +} +Ce qui, en plus de lois française sur les discriminations que nous avons cité plus haut, permet de clairment intérdire l'utilisation d'IA qui vont utiliser des critère de discrimination dans leur décision. +Ce point est particulièrement imporant pour ce manuscrit car nous allons déveloper aux Chapitres~\ref{sec:fini} et~\ref{sec:aia} une méthode d'audit des systèmes d'IA qui permet de savoir si un système utilise un critère de discrimination pour réaliser un prédiction. + +Citons aussi le paragraph 1 alinéa d qui dispose que sont intérdit les sytème d'IA +\textquote{visant à évaluer ou à prédire le risque qu’une personne physique commette une infraction pénale}. +C'est un point de divergence important avec la législation de Etats Unis qui utilise ce genre de système comme nous l'avons vus à la Section~\ref{sec:contexte-insti}. +Dans ce manuscrit nous avons utilisé des bases de donée Etats Unienne pour construir ce genre de système IA pour les étudier. +Bien que nos conclusions sur ces sytèmes ne pourront pas s'appliquer en Union Européenne vu qu'ils sont désormais intérdits, notre analyse théorique reste valable et applicable à d'autres systèmes. +Nous avons d'ailleur évalué nos solutions sur d'autres modèles n'impliquant pas la justice prédictive. + +La troisième approche consiste à classifier un certain nombre de pratique comme des \textquote{système d'IA à haut risques}. +Comme en dispose l'article 6, paragraphe 2 les système à haut risques sont par exemple des système qui concernent : +\begin{itemize} + \item Emploi, gestion de la main-d'œuvre et accès à l'emploi indépendant (Annexe III, paragraphe 4) + \item Accès et droit aux services privés essentiels et aux services publics et prestations sociales essentiels (Annexe III, paragraph 5) +\end{itemize} +Ce sont deux points pour lesquelles nous avons construit des système d'IA à titre illustratif dans ce manuscrit à la Section~\ref{sec:aia}. +Cette classification d'IA à haut risque impose des régles plus restrictive pour le déployement. +Par exemple l'Article 9, paragraph 1 dispose qu'un système de gestion des risques doit être établis. +L'Article 13 quand à lui impose un certain niveau d'exlicabilité du système. +Enfin nous atirons l'atention du.de la lecteur.rice sur l'Articel 15 qui met l'accent sur la sécurité de tel système forcant les fournisseurs de contrôler par exemple que leur système ne contient pas de porte dérobées. diff --git a/contexte/philo/anthro.tex b/contexte/philo/anthro.tex index 1cf6ba4..c6e39fd 100644 --- a/contexte/philo/anthro.tex +++ b/contexte/philo/anthro.tex @@ -1,6 +1,6 @@ -L'anthropomorphisation consiste à attribuer des caractéristiques humaines à ce qui n'est pas humain. +L'antrhopomorphisme consiste à attribuer des caractéristiques humaines à ce qui n'est pas humain. Dans le contexte de l'IA et plus précisement de l'AGI, ce phénomène peut devenir courant. -L'anthropomorphisation des ordinateurs et d'ailleur déjà encré dans notre société depuis plusieur décénies. +L'antrhopomorphisme des ordinateurs et d'ailleur déjà encré dans notre société depuis plusieur décénies. En effet, l'attribution d'un rôle sociale humain à un ordinateur était déjà présent avant l'introduction des logiciels IA~\cite{MARAKAS2000719} : le programme ecrit, copie, attrape un virus, etc. Une interaction avec quelquechose qui montre un semblant de comportement social nous renvoi a notre propre aliénation sociale au sens décrit par Jean Jaques Rousseau dans son \textit{Du contrat social}~\cite{rousseau1762contrat}. Cela nous pousse à considérer ce que l'on anthropomorphisme comme des personnes, des être huamins. @@ -64,7 +64,7 @@ Une nevrose en particulier est interessante dans le contexte d l'AGI, qui n'exis Pourquoi rester à parler avec un humain quand on est infiniement plus rapide et performant que lui ? Ainsi même si Samantha dit aimer Théodore, elle le quite achevant la phase de construction primordiale du moi qui consiste a identifier l'amour du père pour constuire son caractère en métant fin a son Eudipe~\cite{Freud2010-qq}. -Concernant la construction du caractère, le hasard et est élement important de l'anthropomorphisation, que ce soit dans la litérature d'anticipation où dans le téchnologie actuelles de l'IA générative. +Concernant la construction du caractère, le hasard et est élement important de l'antrhopomorphisme, que ce soit dans la litérature d'anticipation où dans le téchnologie actuelles de l'IA générative. Asimov présente dans \textit{The Bicentennial Man} un robot qui, par le hasard inhérent à son fonctionnement, montre des caractéristique humaine comme l'empathie ou la créativitée. Ce hasard dans la création est aussi décrit au septième point de de la proposition de l'école d'été de Dartmouth~\cite{dartmouth}. Cela renforce le lien entre intuition scientifique et imaginaire créatif, artistique. @@ -108,7 +108,7 @@ Cependant le processus de création par le hasard peut-il être vraiement appara \label{fig:contexte-penses} \end{figure} -Enfin, l'anthropomorphisation peut présenter un risque dans la mesure où +Enfin, l'antrhopomorphisme peut présenter un risque dans la mesure où Marakas et al.~\cite{MARAKAS2000719} explique que cette confusion de l'humain et de la machine entraîne une sur évaluation de la capacité des ordinateurs et peut mener à utiliser à outrance la décision automatisé. C'est le cas avec les décisions juridiques~\cite{zhiyuan2020limits} ou scolaire~\cite{waters2014grade} où la vie d'être humain est décidé par des ordinateur. Cela donne lieu à de nombreux problème moraux qui forment les fondements de l'IA éthique nottamant autout de l'équitée, de la confidentialité et de l'explicabilité sur lesquels nos reviendrons à la Section~\ref{sec:contexte-enjeu}. diff --git a/contexte/philo/mu.tex b/contexte/philo/mu.tex deleted file mode 100644 index e69de29..0000000 diff --git a/contexte/strat.tex b/contexte/strat.tex index 830afb7..2f35d83 100644 --- a/contexte/strat.tex +++ b/contexte/strat.tex @@ -5,26 +5,120 @@ \centering \includegraphics[width=\linewidth]{contexte/figure/anr/prc.pdf} \caption{Proportion attribué à des projets IA} + \label{subfig:contexte-anr-prop} \end{subfigure} \begin{subfigure}{0.3\linewidth} \centering \includegraphics[width=\linewidth]{contexte/figure/anr/aide_ai.pdf} \caption{Financement total attibué à des projets IA} + \label{subfig:contexte-anr-fin} \end{subfigure} \begin{subfigure}{0.3\linewidth} \centering \includegraphics[width=\linewidth]{contexte/figure/anr/avg.pdf} \caption{Financement moyen des projets IA} + \label{subfig:contexte-anr-moy} \end{subfigure} \caption{Financement de la recherche en IA par Agence Nationale de la Recherche (ANR).} \label{fig:contexte-anr} \end{figure} -\subsection{Plance France 2023} -Dans le cadre du plan France 2030~\cite{france2030}, la France a dévelopé une stratégie nationale de l'IA~\cite{stratfr}. -Missions Villani. -PEPER IA. -AUtres appels. +Nous observons sur la Figure~\ref{fig:contexte-trend} que le recherche des termes \textquote{intelligence artificielle} en France sur le moteur de recherche Google à subit une grande augmentation depuis 2020. +Ainis, l'IA interesse de plus en plus le grand publique qui voit ces téchnologies investire leur téléphones portable, ordinateur, médias, etc. +Ce phénomène semble suivre en parallèle une très forte augmentation de l'investissement français en matière d'IA. +Pour mieux comprendre ce phénomène nous avons conduit une micro étude des financements accordés par l'Agence Nationate la Recherche (ANR), l'un des principaux bailleur en France. +L'ANR publi les appels a projets financé par la Direction des Opérations Scientifiques (DOS) de l'ANR depuis 2005. +Dans ces données, il y a entra autre, le montant du financement accordé, le titre en anglais et français ainsi que le résumé en anglais et en francais. +Le titre et le résumé constituent un court paragraph de texte donc chaque mots présent est normalement consciencieusement choisit. +Nous avons crée, en utilisant ChatGPT, une liste de mots clés en anglais et en français qui indique qu'un projet a une forte composante IA. +Nous présentons cette liste à l'Annexe~\ref{anx:mots}. +Pour tous les projets financé depuis 2005 nous avons cherché sir le titre ou le résumé contiens un ou plusieur mots de la list e. +Grâce à cela nous construisons la Figure~\ref{fig:contexte-anr} qui montre l'évolution du financement de l'IA au cours du temps. +Nous observons sur la Sous-figure~\ref{subfig:contexte-anr-moy} que en moyenne le financement d'un projet IA n'a pas évolué depuis 2005. +Cependant nous voyons sur la Sous-figure~\ref{subfig:contexte-anr-prop} que le nombre de projets IA a augmenté passant de 2\% du nombre total de projet à 15\%. +Nous observons la même augmentation la proportion d'argent accordé à l'IA. +Ainsi, en sommant par année les financements de tous les projets IA, nous observons sur la Sous-figure~\ref{subfig:contexte-anr-fin} une augmentation de 5 à 125 millions d'Euros. +Cette claire augmentation de l'investissement en IA en France n'est pas du au hasard mais à une stratégie duement établie. + +\subsection{Rapport Villani : Donner un sens à l'intelligence artificielle} +Le 8 septembre 2017 le Premier ministre Edouard Philippe confie au mathématicien et déupté de l'Essone Cedric Villani une mission parlémentaire : +fair un état des lieux des stratégies française et européenne autour de l'IA~\cite{villani2018donner}. +Ce rapport a permis la mise en place d'une stratégie d'investissement publique en France qui a pour but d'orienter la recherche vers la construction d'une IA aligné avec les valeurs de la république. +Cette stratégie se découpe en six parties : + +\paragraph{Une politique économique articulée autour de la donnée.} +La donnée est le pilié de l'IA car elle sert à construire les modèles. +Le rapport préconise de recensser les besoins en IA et de construire des politiques de recolte de donnée au niveau européen dans le cadre de la Réglementation Générale de la Protection des Données. +Cela inclu par exemple de limiter la fuite de données vers les grands acteur hors Union Européenne (UE) comme les GAFAM. +Pour éviter de séparpiller et de gâcher des ressource, le rapport préconsie de se concentrer sur quatre aspect niches où la France à déjà un avantage. +Ces quatres pilier son deveni capitaux de la politique d'investissement, il sagit de : +\begin{enumerate} + \item La santé + \item L'environnement + \item Les transports et la mobilité + \item La défense et la sécurité +\end{enumerate} + +\paragraph{Pour une recherche agile et diffusante.} +C'est tout d'abord éviter la fuite des cervaux en augmentant l'attractivité de établissement publique. +Par exemple en créeant des Instituts Interdisciplinaires d’Intelligence Artificielle (3IA). +Cela passe aussi par en renforcement des lien entres la recherche et l'industrie notament avec les transfert technologique et la valorisation. +Ce gadre dinamique ne peut être possible qu'avec des moyens pratique et pragmatique comme par exempe de dédier des supercalculateur à la recherche. +Nous reviendrons sur ce sujet à la Section~\label{sec:contexte-strat-infra}. + +\paragraph{Anticiper les impacts sur le travail, l’emploi et expérimenter.} +De part son interdisciplinarité, l'IA peut profondement modifier la manière dont nous invisageons le travail, un peu à la manière dont l'informatique ou avant la méchanisation ont profodément transformé notre société. +\label{sec:contexte-strat-infra} +Le rapport préconise une apporche législative visant à redéfinir le cadre du travail en France à l'heure ou beaucoup de tâches peu qualifé peuvent être automatisés. +C'est aussi en formant à tous les niveau à l'IA que ces technologie pourront être utilisé efficacement est sans casse sociale. + +\paragraph{L’intelligence artificielle au service d’une économie plus écologique.} +L'IA necessite une grande consomation d'énergie, il est donc necessaire d'investir massivement dans l'IA frugale et embarqué qui permet une utilisation réduite d'électricité. +De plus l'IA doit être mise au service de la transition écologique pour aider notament à prédire et comprendre le changement climatique. +Pour cela le rapport indque qu'il faut libérer la donée écologique qui contient les données : \textquote{ météorologiques, agricoles, de transports, +d’énergie, de biodiversité, de climat, +de déchets, cadastrales, de diagnostic +de performance énergétique}. + +\paragraph{Quelle éthique de l’IA ?} +Les utilisateur doivent avoir la possibilité de comprendre les décision que prennent les IA. +Pour cela il est necessaire d'investire plus dans le recherche en explicailité comme nous le verrons à la Section~\ref{sec:contexte-expl}. +De plus le rapport propose une consulation et un dialogue autour des questions de savoir pour quel type de tâche peut-on utiliser l'IA ? +Cette question à déjà été un partie explorée au niveau Européen avec +le règlement (UE) 2024/1689 du parlement européen et du conseil +du 13 juin 2024 +établissant des règles harmonisées concernant l’intelligence artificielle~\cite{aiact}. +Ce règlement à mis en place un liste de tâche dite \textquote{Inacceptables} et \textquote{à haut risque}. +Nous y reviendrons à la Seciont~\ref{sec:contexte-legal-util}. + +\paragraph{Pour une IA inclusive et diverse.} +Pour que l'IA profite à toutes et tous il est necessaite déjà de palier l'écart historique de chois d'étude scientifiqeus entre homme et femme. +Il s'agit aussi de favoriser la mixité sociale dans la recherche et l'industrie en IA. +Cela passe par la médiation scientifique et à une reflexion quand à l'utilisation de l'IA dans le secteur sociale (autre que la santé qui est déjà bien loti). + +\subsection{Plance France 2030} +Le plan France 2030 est un plan d'investissement du gouvernement d'Emannuel Macron de 54 milliards d'Euros~\cite{france2030} ayant pour but de ratraper le retard industriel de la France. +L'IA touchant à plusieur aspect industriels à une part important dans ce plan. +Ce plan est divisé en deux phases~\cite{2030phase}. +La première phase de 2018 à 2022 a pour but de \textquote{Doter la France de capacités de recherche compétitives}. +Avec nottamant la mise en place des (3IA) et du supercalculateur Jean Zay~\cite{jeanzay}. + +La seconde phase de 2021 à 2025 à pour but de \textquote{Diffuser des technologies d’intelligence artificielle au sein de l’économie}. +Nous pouvons citer par exemple le programme \textit{IA Booster}~\cite{iabooster} qui propose en accompagnement aux PME\footnote{Petites et Moyennes Entreprises} pour les aider à intégrer l'IA à leur produits et leur solutions. +Concernant l'IA générative il y l'appel \textit{ +Accélérer l’usage de l’intelligence artificielle générative dans l’économie}~\cite{2030generatif}. +Cet appel à pour but de le dévelopement d'outils de A à Z et met l'accent les different enjeux de l'IA avec des exigence environementale et d'équitée par exemple. +De part son aspect interdisiplinaire, l'IA est aussi présent dans d'autres domaine comme dans la santé par exemple avec l'appel \textit{Data Challenges en santé}~\cite{2030sante}. +Les compétitions donnée\footnote{Data challenge} font partis de la culture de la recherche en informatique et notament en apprentissage automatique comme avec la plateform Kaggle~\cite{kaggle}. +Cet appel à projet à pour but d'encourager la création de compétitions sur les donnée médicales. + +Pour généraliser, concernant l'IA, France 2030 a pour but la souveraineté numérique. +C'est-à dire de réduire la dépendance des institutions française aux services étrangers et notament des GAFAM aux Etats Unis. +Il s'agit d'un aspect fondamentale de la LOI n° 2016-1321 du 7 octobre 2016 pour une République numérique~\cite{loinumerique}. + +Pour coordoner ces investissements en matière d'IA, le directeur général des entreprises du ministère de l’économie et des finances, et en lien avec le secrétariat général pour l’investissement on nomé un coordinateur national pour l’intelligence artificielle. +\textquote{Il aura pour mission la coordination interministérielle de la stratégie nationale en intelligence artificielle}~\cite{coordinateur}. +Ce coordinateur est un exemple d'une réalisation pratique d'une recommendation du rapport Villanni\footnote{Cf. page 63 du rapport Villani}. \begin{figure} \centering @@ -33,6 +127,22 @@ AUtres appels. Les données ont été exportées grâce à Google Trend~\cite{gtrend}.} \label{fig:contexte-trend} \end{figure} +%\subsection{Attentes de l'IA} +%OMS rapport santé~\cite{oms}. + +\subsection{Infrastructures} +\label{sec:contexte-strat-infra} +Le dévelopement de l'IA demande des puissacne de calcul considérable pour faire fonctione les algorithem d'apprantissage automatique. +Par exemple le modèle Llama2 à necessité 3.311.616 GPUheure d'entraînement~\cite{touvron2023llama} ce qui signife qu'il faudrait 378 and à un individu ayant une seul carte graphique\footnote{Graphical Processing Unit} (GPU). +Pour que la France puisse réaliser ses objectif ambitieux en maitère d'IA il est donc necessaire de construire des supercalculateurs permettant de mutualiser entre les différents acteurs. +Nous avons donné l'exemple du supercalculateru Jean Zay~\cite{jeanzay} qui à été construit en parti dans cette optique. +\begin{figure} + \centering + \includegraphics[width=0.4\linewidth]{contexte/figure/g5k-backbone.pdf} + \caption{Grid5000 : une infrastructure de calcul scientifique distribuée. Source : \url{www.grid5000.fr/w/File:G5k-backbone.png}} + \label{fig:contexte-g5k} +\end{figure} -\subsection{Attentes de l'IA} -OMS rapport santé~\cite{oms}. +Dans ce manuscrit les calculs ont été réalisé sur une autre infrastructure : Grid5000 (G5K)~\cite{g5k}. +Il s'agit d'une grille de calcul mettant à disposition des centres de recherche français différent type de machine : des GPU, des CPU, des ordinateurs complets\footnote{Bare metal} ce qui permet un très large éventaille d'experiences. +Comme nous pouvons le voir sur la Figure~\ref{fig:contexte-g5k} l'aspect distribué de G5K permet de réaliser des experiences implique des système distribué comme par exemple l'apprentissage fédéré\footnote{Federated learning}. diff --git a/introduction.tex b/introduction.tex new file mode 100644 index 0000000..53b9b20 --- /dev/null +++ b/introduction.tex @@ -0,0 +1,26 @@ +L'intelligence artificielle (IA) est de plus en plus présente dans de nombreux domaines comme la santé~\cite{dildar2021skin,gulshan2016development,quinn2022three}, les médias~\cite{gptjournal} ou les ressources humaines~\cite{ore2022opportunities}. +Ces technologies induisent des risques pour la confidentialité de donnée personnelles des utilisateurs~\cite{MehnazAttInf,yeom,shokri2017membership,Song2020Overlearning} et peuvent introduire des biais discriminatoires rendant les décisions automatiques non équitables~\cite{fairmetric,fairmetric2,debiase,reductions}. +Mes travaux s'inscrivent dans une lignée florissante de recherches visant à mieux comprendre ces enjeux capitaux et à trouver des solutions pour rentre l'intelligence artificielle morale. + +Ma principale contribution a été publié à la conférence Wise 2024 et vise à comprendre le lien entre l'équité et la confidentialité. +Notre approche théorique nous a amené à démontrer que, sous un certain aspect, la confidentialité et l'équité pouvais travailler de concert pour créer des IA plus fiables. +Nous avons validé ces résultats expérimentalement en étudiant des bases de donnés et des algorithmes standards. + +Outre cette contribution j'ai pu prendre part à deux autres travaux qui on été publié mais qui ne figurent pas dans ce manuscrit car ils s'éloignent légèrement du sujet de cette thèse. +Déjà j'ai pu participer à l'élaboration de MixNN~\cite{Lebrun_2022} : un protocole d'apprentissage fédéré respectueux de la confidentialité des données des participant à l'apprentissage. +MixNN à été publié à la conférence Middleware 2022. +Ensuite j'ai contribué à une étude théorique du protocole LoraWAN : un protocole de communication de l'internet des objets\footnote{\textit{Internet Of Things}} (IOT). +Samuel Pélissier a mis au point une modification de ce protocole visant à protéger la confidentialité des utilisateurs. +J'ai vérifié que cette modification n'entraîne pas de collision de paquet et j'ai précisé les garanties théoriques de confidentialité atteintes. +Nous avons publié cet article~\cite{pelissier2024privacy} à la conférence WiSec 2024. + +Nous allons donc dans ce manuscrit étudier le lien entre équité et confidentialité dans l'IA. +Pour ce faire nous commenceront par présenter un contexte générale dans le Chapitre~\ref{sec:contexte} qui permettra de mieux comprendre ce qu'est l'IA, quels sont les attentes, les enjeux et les régulations. +Nous verrons ainsi que l'équité et la confidentialité sont des points capitaux qu'il faut prendre en compte pour un développement morale de l'IA aligné avec nos valeurs républicaines. +Ensuite, je vous présenterai dans le Chapitre~\ref{sec:pre} les notions clefs dont nous allons avoir besoin pour comprendre mes développements nouveaux. +Il s'agit de fixer les objets mathématiques que nous utiliserons mais aussi de présenter un rapide état de l'art de l'équité et de la confidentialité en IA sur lequel repose les bases de mes contributions. +A partir du Chapitre~\ref{sec:fini} nous ne traiterons plus que de mes travaux originaux, sauf exception avec les parties \textquote{Travaux voisins} ou si je vous le mentionne explicitement. +Le Chapitre~\ref{sec:fini} présente un nouvel algorithme d'apprentissage automatique optimisé pour des bases de données déséquilibré vis à vis d'un attribut. +Grâce à cet algorithme nous construisons une attaque d'inférence d'attribut sensible que nous utilisons au Chapitre~\ref{sec:aia} pour l'étude du lien entre équité et confidentialité. +Au Chapitre~\ref{sec:synth} nous explorerons l'impacte de l'utilisation de données synthétiques sur ces notions. +Le Chapitre~\ref{sec:per} reprend les trois chapitres précédents et propose de nouvelles pistes de recherches. diff --git a/main.tex b/main.tex index 8270611..f42a4d8 100644 --- a/main.tex +++ b/main.tex @@ -2,8 +2,8 @@ \usepackage[french]{babel} \usepackage{placeins} -\usepackage[draft]{graphicx} -%\usepackage{graphicx} +%\usepackage[draft]{graphicx} +\usepackage{graphicx} \usepackage{upgreek} \usepackage{amsmath} \usepackage{amsthm} @@ -100,6 +100,9 @@ breaklines=true \label{sec:synth} \input{synthetic/main} +\chapter{Conclusion} +\input{conclusion} + \bibliographystyle{plain} \bibliography{biblio} diff --git a/notations.tex b/notations.tex index 90b70aa..74e421d 100644 --- a/notations.tex +++ b/notations.tex @@ -1,13 +1,62 @@ Toutes les notations utilisés sont définies le première fois quelle sont introduites. -Pour faciliter la lecture nous fournissons ici un liste des notations avec la referecence de leur définitions. - +Pour faciliter la lecture nous fournissons ici une liste des notations avec la référence de leur définitions. \begin{table} \centering \begin{tabular}{|c|c|c|} \hline \textbf{Symbole}&\textbf{Description}&\textbf{Définition}\\ \hline - $f^{1}$&Fonction inverse ou image reciproque&\\ + $\implies \iff \wedge \vee \neq \forall \exists$&Logique du premier ordre&Section~\ref{sec:background-math}\\ + \hline + $\{\}$&Ensemble&Section~\ref{sec:background-math-zf}\\ + \hline + $\emptyset$&Ensemble vide&Section~\ref{sec:background-math-zf}\\ + \hline + $\cup$&Union&Section~\ref{sec:background-math-zf}\\ + \hline + $\mathcal{P}(\square)$&Ensemble des parties&Section~\ref{sec:background-math-zf}\\ + \hline + $\cap~\backslash$&Intersection et différence&Définition~\ref{def:background-math-int}\\ + \hline + $/$&Ensemble des classes d'équivalences&Définition~\ref{def:background-set-usu}\\ + \hline + $\times$&Produit cartésien&Définition~\ref{def:background-fct}\\ + \hline + $\circ$&Composition&Définition~\ref{def:background-fct}\\ + \hline + $f^{-1}$&Fonction inverse ou image réciproque&\\ + \hline + $n!$&$n$ factoriel&Section~\ref{sec:background-set-ari}\\ + \hline + $[\square,\square]~[|\square,\square|]$&Intervalle&Section~\ref{sec:background-math-int}\\ + \hline + $\#$&Cardinal&Section~\ref{sec:background-math-card}\\ + \hline + $EXP(\square)$&Fonction qui à $x$ associe $EXP(x)$&Définition~\ref{def:background-fct}\\ + \hline + $\text{Tr}(M)$&Trace d'une matrice $M$&Définition~\ref{def:background-alg-tr}\\ + \hline + $\mathcal{L}(E,F)$&Ensemble de applications linéaire de $E$ dans $F$&Section~\ref{sec:background-alg-L}\\ + \hline + $\otimes$&Produit de mesure&Section~\ref{sec:background-proba}\\ + \hline + $\delta_i$&Mesure de Dirac en $i$&Section~\ref{sec:background-proba}\\ + \hline + $P_Y$&Mesure image de $Y$ par $P$&Section~\ref{sec:background-proba}\\ + \hline +  $\langle x,y\rangle$&Produit scalaire euclidien&Définition~\ref{def:background-dif-scal}\\ + \hline +  $||x||$&Norme euclidienne&Définition~\ref{def:background-dif-eucl}\\ + \hline + $lim_{a\rightarrow x}f(a)$&Limite de $f$ en $x$&Définition~\ref{def:background-dif-lim}\\ + \hline + $df(x)$&Différentielle de $f$ en $x$&Définition~\ref{def:background-dif-dif}\\ + \hline + $\mathbb{N}~\mathbb{Q}~\mathbb{R}$&Ensembles usuels&Définition~\ref{def:background-set-usu}\\ + \hline + $S_n$&Groupe de permutations sur $n\in\mathbb{N}$&Section~\ref{sec:aia-theo-aia-eq}\\ + \hline + $BA^d_F(f)$&Exactitude équilibrée empirique&Définition~\ref{def:BA}\\ \hline \end{tabular} \caption{Liste de notations} diff --git a/notes.tex b/notes.tex index 3d7d3c5..7fabcb8 100644 --- a/notes.tex +++ b/notes.tex @@ -1,6 +1,18 @@ -Nous avons souaité rédiger ce manuscrit en français pour plusieurs raison qu'il nous semble important de mettre en avant. +J'ai souhaité rédigé ce manuscrit en français pour plusieurs raisons qu'il me semble important de mettre en avant. + Le sujet premier de ce manuscrit, l'intelligence artificielle est un sujet majeur de souveraineté nationale~\cite{villani2018donner}. -Cette souevraineté est intimement lié à la francophonie car comme l'explique Rachida Dati, ministre de la culture, +Cette souveraineté est intimement lié à la francophonie car comme l'explique Rachida Dati, ministre de la culture, \textquote{la langue doit vivre au même rythme pour restituer la création, l'invention, l'innovation, pour nous permettre de penser et d'exprimer toutes les réalités du monde contemporain. Et pour rester une grande langue internationale, il faut pouvoir tout dire, tout nommer, tout traduire}~\cite{dati2024declaration}. -Ainsi nous nous somme efforcé de traduire les termes techniques de l'apprentissage automatique qui viennet tous de l'anglais. -Pour éviter que notre traduction soit trop confuse pour les lecteurs habitué aux terme anglais, pour chaque terme traduit nous indiquons son originie anglaise en note de bas de page à se premiètre occurence. +Ainsi je me suis efforcé de traduire les termes techniques de l'apprentissage automatique qui viennent tous de l'anglais. +Pour éviter que notre traduction soit trop confuse pour les lecteur.ice.s habitué.e aux termes anglais, pour chaque terme traduit nous indiquons son origine anglaise en note de bas de page à se première occurrence. + +De plus ce manuscrit traite d'équité et de discrimination, ces sujets ont une place particulière dans l'histoire de France ce qui a forgé le rapport des français face à ces questions. +La vision traité sur ces questions dans la littérature scientifique des conférences et journaux internationaux et celle du monde anglo-saxon notamment États Uniens. +Ainsi en rédigeant ce manuscrit en français nous mettons en avant que c'est la vision française, de la loi français et des institution françaises que nous étudions +Bien que pour des raisons pratiques nous ayons du utiliser certain jeu de données standard États Uniens, ils ne sont là qu'a titre d'exemple et d'illustration pour nos résultats théoriques. +Ces résultat sont suffisamment généraux pour s'appliquer à tout type de jeu de donnée qui respecte les hypothèses de chaque théorèmes. + +Enfin, la langue de ce manuscrit ne vas pas à l'encontre de la science ouverte et contrôlé par les pairs~\footnote{\textit{Peer reviewed}} car les résultats ont été publiés en anglais à la conférence internationale Wise 2024~\cite{wise2024}. +La communauté scientifique peut donc les réutiliser et le juger sans avoir à parler français. + + diff --git a/perspectives.tex b/perspectives.tex new file mode 100644 index 0000000..ae84997 --- /dev/null +++ b/perspectives.tex @@ -0,0 +1 @@ +qsdf diff --git a/remerciements.tex b/remerciements.tex index 0e869c4..458c5f9 100644 --- a/remerciements.tex +++ b/remerciements.tex @@ -1,4 +1,4 @@ -Merci à mon épouse, Emeline, pour son soutien, ses conseils, ses rélectures de mon orthopgraphe et pour m'avoir aidé avec le Théorème~\ref{th:fini-em}. +Merci à mon épouse, Emeline, pour son soutien, ses conseils, ses rélectures de mon orthopgraphe et pour m'avoir aidé avec les Théorèmes~\ref{th:fini-em} et~\ref{th:aia-bluey}. Merci à Antoine Boutet et Mathieu Cunche pour leur encadrement. @@ -21,7 +21,11 @@ Abhi, Adrien, Amine, Anthonin, -Bastien, +Arthur, +Clément, +Bastien D., +Bastien M., +Bastien R., Benoit, Benoît, Celestin, @@ -30,6 +34,7 @@ Nathan, Rémi, Samuel, Thomas, +Valentin, Virgile. Merci à Maryse, Jean-Claude et Patricia pour leur bienveillance. diff --git a/template_these_INSA_cotut.pdf b/template_these_INSA_cotut.pdf index 5273483..44864d3 100644 Binary files a/template_these_INSA_cotut.pdf and b/template_these_INSA_cotut.pdf differ diff --git a/template_these_INSA_cotut.tex b/template_these_INSA_cotut.tex index 2293564..44cfc0c 100644 --- a/template_these_INSA_cotut.tex +++ b/template_these_INSA_cotut.tex @@ -1,7 +1,7 @@ \documentclass[a4paper,titlepage,12pt,french,twoside,openright]{report} -%\usepackage{graphicx} -\usepackage[draft]{graphicx} +\usepackage{graphicx} +%\usepackage[draft]{graphicx} \usepackage{xcolor} \usepackage[paper=a4paper,margin=2.5cm]{geometry}% http://ctan.org/pkg/geometry \usepackage[pdftex,colorlinks=false]{hyperref} @@ -28,6 +28,7 @@ \usepackage{multirow} \usepackage{placeins} \usepackage{mathabx} +\usepackage{makecell} \lstset{ basicstyle=\small\ttfamily, columns=flexible, @@ -57,8 +58,8 @@ breaklines=true \begin{document} \hypersetup{ -pdftitle={Titre de la thèse}, %informations dans le titre -pdfauthor={Auteur}, %dans les informations du document +pdftitle={Intelligence artificielle pour des services moraux}, %informations dans le titre +pdfauthor={Jan Aalmoes}, %dans les informations du document pdfsubject={Th\`ese} %sous Acrobat. } @@ -80,11 +81,14 @@ pdfsubject={Th\`ese} %sous Acrobat. \input{remerciements} \chapter*{Avertissement} \input{avertissement} -\chapter*{Notes} +\chapter*{Note sur la langue} \input{notes} \chapter*{Notations} \input{notations} \chapter{Introduction} +\input{introduction} +\chapter{Contexte} +\label{sec:contexte} \section{Qu'est-ce que l'Intelligence Artificielle ?} \label{sec:contexte-ckoi} \input{contexte/ckoi} @@ -100,7 +104,8 @@ pdfsubject={Th\`ese} %sous Acrobat. \input{contexte/legal} \label{sec:contexte-legal} -\chapter{Background} +\chapter{Prérequis} +\label{sec:pre} \input{background/main} \chapter{Classification finie} @@ -111,16 +116,16 @@ pdfsubject={Th\`ese} %sous Acrobat. \label{sec:aia}. \input{aia/main} - \section{Regression} - \subsection{Equitée et regression} - \subsubsection{Une bien-heureuse conséquence de l'\textit{adversarial debiasing}} - - \chapter{Données synthétiques} \label{sec:synth} \input{synthetic/main} +\chapter{Perspectives} +\label{sec:per} +\input{perspectives} + \chapter{Conclusion} +\label{sec:conclusion} \input{conclusion} \bibliographystyle{plain} @@ -128,13 +133,17 @@ pdfsubject={Th\`ese} %sous Acrobat. \appendix \chapter{Mot clé pour la recherche projets IA} +\label{anx:mots} \input{annexe/ai_words} -\newpage -\chapter*{Liste des figures} +\chapter{Liste de 25 critères de discrimination} +\label{anx:discri} +\input{annexe/crit_discri} -\newpage -\chapter*{Liste des tableaux} +%\chapter*{Liste des figures} +\listoffigures +%\chapter*{Liste des tableaux} +\listoftables \newpage \sffamily diff --git a/theorem.tex b/theorem.tex index 1021fc1..ebab7f8 100644 --- a/theorem.tex +++ b/theorem.tex @@ -1,5 +1,6 @@ \newtheorem{definition}{Définition}[chapter] +\newtheorem{conjecture}{Conjecture}[chapter] \newtheorem{theorem}{Théoreme}[chapter] \newtheorem{propriete}{Propriété}[chapter] \newtheorem{lemma}[theorem]{Lemme} -- cgit v1.2.3 From 06c724f61e746772dc46aaf7e11c96abc1a49dd1 Mon Sep 17 00:00:00 2001 From: Jan Aalmoes Date: Sat, 21 Sep 2024 16:28:42 +0200 Subject: biblio --- biblio.bib | 1125 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- main.pdf | Bin 675350 -> 5311368 bytes 2 files changed, 1124 insertions(+), 1 deletion(-) diff --git a/biblio.bib b/biblio.bib index e4ee078..3eddd2b 100644 --- a/biblio.bib +++ b/biblio.bib @@ -1,4 +1,113 @@ ######################"" +@misc{stateth, + titre={Statistiques ethniques}, + howpublished={\url{https://www.insee.fr/fr/information/2108548}}, + note={Dernier accès: 2024-09-19} +} + +@article{howard2000race, + title={Race, socioeconomic status, and cause-specific mortality}, + author={Howard, George and Anderson, Roger T and Russell, Gregory and Howard, Virginia J and Burke, Gregory L}, + journal={Annals of epidemiology}, + volume={10}, + number={4}, + pages={214--223}, + year={2000}, + publisher={Elsevier} +} +@article{williams1996race, + title={Race/ethnicity and socioeconomic status: measurement and methodological issues}, + author={Williams, David R}, + journal={International Journal of Health Services}, + volume={26}, + number={3}, + pages={483--505}, + year={1996}, + publisher={SAGE Publications Sage CA: Los Angeles, CA} +} + +@article{singler2017roko, + title={Roko's Basilisk or Pascal's? Thinking of Singularity Thought Experiments as Implicit Religion.}, + author={Singler, Beth}, + journal={Implicit Religion}, + volume={20}, + number={3}, + year={2017} +} + + +@incollection{green1972race, + title={Race, social status, and criminal arrest}, + author={Green, Edward R}, + booktitle={Readings in Criminology and Penology}, + pages={267--283}, + year={1972}, + publisher={Columbia University Press} +} +@article{walsh2007psychopathy, + title={Psychopathy and violent crime: A prospective study of the influence of socioeconomic status and ethnicity}, + author={Walsh, Zach and Kosson, David S}, + journal={Law and human behavior}, + volume={31}, + pages={209--229}, + year={2007}, + publisher={Springer} +} + + + + +@inproceedings{pelissier2024privacy, +author = {P\'{e}lissier, Samuel and Aalmoes, Jan and Mishra, Abhishek Kumar and Cunche, Mathieu and Roca, Vincent and Donsez, Didier}, +title = {Privacy-Preserving Pseudonyms for LoRaWAN}, +year = {2024}, +isbn = {9798400705823}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +url = {https://doi.org/10.1145/3643833.3656120}, +doi = {10.1145/3643833.3656120}, +abstract = {LoRaWAN, a widely deployed LPWAN protocol, raises privacy concerns due to metadata exposure, particularly concerning the exploitation of stable device identifiers. For the first time in literature, we propose two privacy-preserving pseudonym schemes tailored for LoRaWAN: resolvable pseudonyms and sequential pseudonyms. We extensively evaluate their performance and applicability through theoretical analysis and simulations based on a large-scale real-world dataset of 71 million messages. We conclude that sequential pseudonyms are the best solution.}, +booktitle = {Proceedings of the 17th ACM Conference on Security and Privacy in Wireless and Mobile Networks}, +pages = {14–19}, +numpages = {6}, +keywords = {iot, link-layer, lorawan, privacy, pseudonyms}, +location = {Seoul, Republic of Korea}, +series = {WiSec '24} +} + + + + +@inproceedings{Lebrun_2022, series={Middleware ’22}, + title={MixNN: protection of federated learning against inference attacks by mixing neural network layers}, + volume={2948}, + url={http://dx.doi.org/10.1145/3528535.3565240}, + DOI={10.1145/3528535.3565240}, + booktitle={Proceedings of the 23rd ACM/IFIP International Middleware Conference}, + publisher={ACM}, + author={Lebrun, Thomas and Boutet, Antoine and Aalmoes, Jan and Baud, Adrien}, + year={2022}, + month=nov, pages={135–147}, + collection={Middleware ’22} } + +@article{bergstra2015hyperopt, + title={Hyperopt: a python library for model selection and hyperparameter optimization}, + author={Bergstra, James and Komer, Brent and Eliasmith, Chris and Yamins, Dan and Cox, David D}, + journal={Computational Science \& Discovery}, + volume={8}, + number={1}, + pages={014008}, + year={2015}, + publisher={IOP Publishing} +} + +@misc{iris_53, + author = {Fisher, R. A.}, + title = {{Iris}}, + year = {1936}, + howpublished = {UCI Machine Learning Repository}, + note = {{DOI}: https://doi.org/10.24432/C56C76} +} @misc{chatgpt, title={ChatGPT}, howpublished={\url{https://openai.com/chatgpt/}}, @@ -503,7 +612,7 @@ publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, url = {https://doi.org/10.1145/3278721.3278779}, doi = {10.1145/3278721.3278779}, -abstract = {Machine learning is a tool for building models that accurately represent input training data. When undesired biases concerning demographic groups are in the training data, well-trained models will reflect those biases. We present a framework for mitigating such biases by including a variable for the group of interest and simultaneously learning a predictor and an adversary. The input to the network X, here text or census data, produces a prediction Y, such as an analogy completion or income bracket, while the adversary tries to model a protected variable Z, here gender or zip code. The objective is to maximize the predictor's ability to predict Y while minimizing the adversary's ability to predict Z. Applied to analogy completion, this method results in accurate predictions that exhibit less evidence of stereotyping Z. When applied to a classification task using the UCI Adult (Census) Dataset, it results in a predictive model that does not lose much accuracy while achieving very close to equality of odds (Hardt, et al., 2016). The method is flexible and applicable to multiple definitions of fairness as well as a wide range of gradient-based learning models, including both regression and classification tasks.}, +abstract = {Machine learning is a tool for building models that accurately represent input training data. When undesired biases concerning demographic groups are in the training data, well-trained models will reflect those biases. We present a framework for mitigating such biases by including a variable for the group of interest and simultaneously learning a predictor and an adversary. The input to the network X, here text or census data, produces a prediction Y, such as an analogy completion or income bracket, while the adversary tries to model a protected variable Z, here gender or zip code. The objective is to maximize the predictor's ability to predict Y while minimizing the adversary's ability to predict Z. Applied to analogy completion, this method results in accurate predictions that exhibit less evidence of stereotyping Z. When applied to a classification task using the UCI Adult (Census) Dataset, it results in a predictive model that does not lose much accuracy while achieving very close to equality of odds (Hardt, et al., 2016). The method is flexible and applicable to multiple definitions of fairness as well as a wide range of giradient-based learning models, including both regression and classification tasks.}, booktitle = {Proceedings of the 2018 AAAI/ACM Conference on AI, Ethics, and Society}, pages = {335–340}, numpages = {6}, @@ -2879,3 +2988,1017 @@ number={9}, journal={Conference on Artificial Intelligence}, author={Ghosh, Bish publisher={Wiley Online Library} } + + +@misc{google_vision, + title = {Google vision }, + howpublished = {https://cloud.google.com/vision}, + note = {Accessed: 2021-05-27} +} +@article{ylc, + title="Gradient-Based Learning Applied to Document Recognition", + author="Y. LeCun, L. Bottou, Y. Bengio and P. Haffner", + journal="Proceedings of the IEEE", + volume="86", + number="11", + pages="2278-2324", + year="1998" +} +@misc{RGPD, + title="Le règlement général sur la protection des données", + howpublished="https://www.cnil.fr/fr/reglement-europeen-protection-donnees" +} +@misc{78-17, + title="Loi n° 78-17 du 6 janvier 1978 relative à l'informatique, aux fichiers et aux libertés", + howpublished="https://www.legifrance.gouv.fr/loda/id/LEGITEXT000006068624/2019-06-04/" +} +@misc{art, + title="Adversarial robustness toolbox", + howpublished="https://adversarial-robustness-toolbox.org/" +} +@misc{hardt2016equality, + title={Equality of Opportunity in Supervised Learning}, + author={Moritz Hardt and Eric Price and Nathan Srebro}, + year={2016}, + eprint={1610.02413}, + archivePrefix={arXiv}, + primaryClass={cs.LG} +} +@misc{chang2021privacy, + title={On the Privacy Risks of Algorithmic Fairness}, + author={Hongyan Chang and Reza Shokri}, + year={2021}, + eprint={2011.03731}, + archivePrefix={arXiv}, + primaryClass={stat.ML} +} +@misc{agarwal2018reductions, + title={A Reductions Approach to Fair Classification}, + author={Alekh Agarwal and Alina Beygelzimer and Miroslav Dudík and John Langford and Hanna Wallach}, + year={2018}, + eprint={1803.02453}, + archivePrefix={arXiv}, + primaryClass={cs.LG} +} +@misc{yeom, + title={Privacy Risk in Machine Learning: Analyzing the Connection to Overfitting}, + author={Samuel Yeom and Irene Giacomelli and Matt Fredrikson and Somesh Jha}, + year={2018}, + eprint={1709.01604}, + archivePrefix={arXiv}, + primaryClass={cs.CR} +} +@article{saddlepointsolve, +title = {A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting}, +journal = {Journal of Computer and System Sciences}, +volume = {55}, +number = {1}, +pages = {119-139}, +year = {1997}, +issn = {0022-0000}, +doi = {https://doi.org/10.1006/jcss.1997.1504}, +url = {https://www.sciencedirect.com/science/article/pii/S002200009791504X}, +author = {Yoav Freund and Robert E Schapire}, +abstract = {In the first part of the paper we consider the problem of dynamically apportioning resources among a set of options in a worst-case on-line framework. The model we study can be interpreted as a broad, abstract extension of the well-studied on-line prediction model to a general decision-theoretic setting. We show that the multiplicative weight-update Littlestone–Warmuth rule can be adapted to this model, yielding bounds that are slightly weaker in some cases, but applicable to a considerably more general class of learning problems. We show how the resulting learning algorithm can be applied to a variety of problems, including gambling, multiple-outcome prediction, repeated games, and prediction of points in Rn. In the second part of the paper we apply the multiplicative weight-update technique to derive a new boosting algorithm. This boosting algorithm does not require any prior knowledge about the performance of the weak learning algorithm. We also study generalizations of the new boosting algorithm to the problem of learning functions whose range, rather than being binary, is an arbitrary finite set or a bounded segment of the real line.} +} +@misc{surveyfair, + title={A Survey on Bias and Fairness in Machine Learning}, + author={Ninareh Mehrabi and Fred Morstatter and Nripsuta Saxena and Kristina Lerman and Aram Galstyan}, + year={2019}, + eprint = {1908.09635} +} + +@inproceedings{10.1145/2020408.2020598, +author = {Cormode, Graham}, +title = {Personal Privacy vs Population Privacy: Learning to Attack Anonymization}, +year = {2011}, +booktitle = {KDD}, +pages = {1253–1261}, +} + +@inproceedings{abadi2016deep, + title={Deep learning with differential privacy}, + author={Abadi, Martin and Chu, Andy and Goodfellow, Ian and McMahan, H Brendan and Mironov, Ilya and Talwar, Kunal and Zhang, Li}, + booktitle={Proceedings of the 2016 ACM SIGSAC conference on computer and communications security}, + pages={308--318}, + year={2016} +} + + +@inproceedings{10.1145/3433210.3453095, +author = {Boutet, Antoine and Frindel, Carole and Gambs, S\'{e}bastien and Jourdan, Th\'{e}o and Ngueveu, Rosin Claude}, +title = {DySan: Dynamically Sanitizing Motion Sensor Data Against Sensitive Inferences through Adversarial Networks}, +year = {2021}, +booktitle = {Asia CCS}, +pages = {672–686}, +} + +@inproceedings {272298, +author = {Nishat Koti and Mahak Pancholi and Arpita Patra and Ajith Suresh}, +title = {{SWIFT}: Super-fast and Robust Privacy-Preserving Machine Learning}, +booktitle = {{USENIX} Security}, +year = {2021}, +publisher = {{USENIX} Association}, +} + +@misc{hunt2018chiron, + title={Chiron: Privacy-preserving Machine Learning as a Service}, + author={Tyler Hunt and Congzheng Song and Reza Shokri and Vitaly Shmatikov and Emmett Witchel}, + year={2018}, + eprint={1803.05961}, + archivePrefix={arXiv}, + primaryClass={cs.CR} +} + + +@misc{malekzadeh2021honestbutcurious, + title={Honest-but-Curious Nets: Sensitive Attributes of Private Inputs can be Secretly Coded into the Entropy of Classifiers' Outputs}, + author={Mohammad Malekzadeh and Anastasia Borovykh and Deniz Gündüz}, + year={2021}, + eprint={2105.12049}, + archivePrefix={arXiv}, + primaryClass={cs.LG} +} + +@InProceedings{pmlr-v130-vogel21a, + title = { Learning Fair Scoring Functions: Bipartite Ranking under ROC-based Fairness Constraints }, + author = {Vogel, Robin and Bellet, Aur{\'e}lien and Cl{\'e}men{\c{c}}on, Stephan}, + booktitle = {Proceedings of The 24th International Conference on Artificial Intelligence and Statistics}, + pages = {784--792}, + year = {2021}, + editor = {Banerjee, Arindam and Fukumizu, Kenji}, + volume = {130}, + series = {Proceedings of Machine Learning Research}, + month = {13--15 Apr}, +} + +@misc{chang2021privacy, + title={On the Privacy Risks of Algorithmic Fairness}, + author={Hongyan Chang and Reza Shokri}, + year={2021}, + eprint={2011.03731}, + archivePrefix={arXiv}, + primaryClass={stat.ML} +} + +@misc{fedsurvey, + title={Advances and Open Problems in Federated Learning}, + author={Peter Kairouz et al.}, + year={2019}, + eprint = {1912.04977} +} + +@techreport{ec2019ethics, + author = {High-Level Expert Group on AI}, + year={2019}, + title = {Ethics guidelines for trustworthy AI} +} + +@article{stealingtime, + author = {Vasisht Duddu and + Debasis Samanta and + D. Vijay Rao and + Valentina E. Balas}, + title = {Stealing Neural Networks via Timing Side Channels}, + year = {2018}, + eprint = {1812.11720} +} + +@misc{duddu2019quantifying, + title={Quantifying (Hyper) Parameter Leakage in Machine Learning}, + author={Vasisht Duddu and D. Vijay Rao}, + year={2019}, + eprint={1910.14409} +} + +@inproceedings{stealml, +author = {Tram\`{e}r, Florian and Zhang, Fan and Juels, Ari and Reiter, Michael K. and Ristenpart, Thomas}, +title = {Stealing Machine Learning Models via Prediction APIs}, +year = {2016}, +booktitle = {USENIX Security}, +pages = {601–618}, +} + + +@misc{duddu2021gecko, + title={GECKO: Reconciling Privacy, Accuracy and Efficiency in Embedded Deep Learning}, + author={Vasisht Duddu and Antoine Boutet and Virat Shejwalkar}, + year={2021}, + eprint={2010.00912}, + archivePrefix={arXiv}, + primaryClass={cs.CR} +} + +@misc{duddu2021quantifying, + title={Quantifying Privacy Leakage in Graph Embedding}, + author={Vasisht Duddu and Antoine Boutet and Virat Shejwalkar}, + year={2021}, + eprint={2010.00906}, + archivePrefix={arXiv}, + primaryClass={cs.CR} +} + +@inproceedings{NEURIPS2020_6b8b8e3b, + author = {Zhao, Han and Chi, Jianfeng and Tian, Yuan and Gordon, Geoffrey J}, + booktitle = {Advances in Neural Information Processing Systems}, + editor = {H. Larochelle and M. Ranzato and R. Hadsell and M. F. Balcan and H. Lin}, + pages = {9485--9496}, + publisher = {Curran Associates, Inc.}, + title = {Trade-offs and Guarantees of Adversarial Representation Learning for Information Obfuscation}, + url = {https://proceedings.neurips.cc/paper/2020/file/6b8b8e3bd6ad94b985c1b1f1b7a94cb2-Paper.pdf}, + volume = {33}, + year = {2020} +} + +@inproceedings{10.1145/3319535.3363201, +author = {Jia, Jinyuan and Salem, Ahmed and Backes, Michael and Zhang, Yang and Gong, Neil Zhenqiang}, +title = {MemGuard: Defending against Black-Box Membership Inference Attacks via Adversarial Examples}, +year = {2019}, +booktitle = {CCS}, +pages = {259–274} +} + + +@INPROCEEDINGS{meminf, +author={R. {Shokri} and M. {Stronati} and C. {Song} and V. {Shmatikov}}, +booktitle={SP}, +year = {2017}, +title={Membership Inference Attacks Against Machine Learning Models} +} + +@inproceedings{fedinversion, +author = {Hitaj, Briland and Ateniese, Giuseppe and Perez-Cruz, Fernando}, +title = {Deep Models Under the GAN: Information Leakage from Collaborative Deep Learning}, +year = {2017}, +booktitle = {CCS}, +pages = {603–618} +} + + + + + +@INPROCEEDINGS{fedpriv2, +author={M. {Nasr} and R. {Shokri} and A. {Houmansadr}}, +booktitle={SP}, +year = {2019}, +title={Comprehensive Privacy Analysis of Deep Learning: Passive and Active White-box Inference Attacks against Centralized and Federated Learning}, +pages={739-753}} + + +@inproceedings{fairprivatedata, +author = {Pujol, David and McKenna, Ryan and Kuppam, Satya and Hay, Michael and Machanavajjhala, Ashwin and Miklau, Gerome}, +title = {Fair Decision Making Using Privacy-Protected Data}, +year = {2020}, +booktitle = {FAT*}, +pages = {189–199}, +} + +@inproceedings{compatibility, +author = {Cummings, Rachel and Gupta, Varun and Kimpara, Dhamma and Morgenstern, Jamie}, +title = {On the Compatibility of Privacy and Fairness}, +year = {2019}, +booktitle = {UMAP}, +pages = {309–315} +} + +@inproceedings{Song2020Overlearning, +title={Overlearning Reveals Sensitive Attributes}, +author={Congzheng Song and Vitaly Shmatikov}, +booktitle={International Conference on Learning Representations}, +year={2020} +} + +@ARTICLE{8515092, +author={S. A. {Osia} and A. {Taheri} and A. S. {Shamsabadi} and K. {Katevas} and H. {Haddadi} and H. R. {Rabiee}}, +journal={IEEE Transactions on Knowledge and Data Engineering}, +title={Deep Private-Feature Extraction}, +year={2020}, +volume={32}, +number={1}, +pages={54-66},} + + +@misc{removedispimpactdpsgd, +title={Removing Disparate Impact of Differentially Private Stochastic Gradient Descent on Model Accuracy}, +author={Depeng Xu and Wei Du and Xintao Wu}, +year={2020}, +eprint = {2003.03699}, +} + +@article{incompatibility, +title={Fair Inputs and Fair Outputs: The Incompatibility of Fairness in Privacy and Accuracy}, +author={Rastegarpanah, Bashir and Crovella, Mark and Gummadi, Krishna P}, +eprint = {2005.09209}, +year={2020} +} + +@article{fairvrobust, +author = {Hongyan Chang and Ta Duy Nguyen and Sasi Kumar Murakonda and Ehsan Kazemi and Reza Shokri}, +title = {On Adversarial Bias and the Robustness of Fair Machine Learning}, +year = {2020}, +eprint = {2006.08669} +} + +@article{dispvuln, +author = {Mohammad Yaghini and Bogdan Kulynych and Carmela Troncoso}, +title = {Disparate Vulnerability: on the Unfairness of Privacy Attacks Against Machine Learning}, +year = {2019}, +eprint = {1906.00389} +} + +@incollection{dpaccdisp, +title = {Differential Privacy Has Disparate Impact on Model Accuracy}, +author = {Bagdasaryan, Eugene and Poursaeed, Omid and Shmatikov, Vitaly}, +booktitle = {NIPS}, +pages = {15479--15488}, +year = {2019}} + +@misc{dpmeminf, +title={Privacy for All: Demystify Vulnerability Disparity of Differential Privacy against Membership Inference Attack}, +author={Bo Zhang and Ruotong Yu and Haipei Sun and Yanying Li and Jun Xu and Hui Wang}, +year={2020}, +eprint={2001.08855} +} + + + + + + + + + +@article{advfair, + author = {Alex Beutel and Jilin Chen and Zhe Zhao and Ed H. Chi}, + title = {Data Decisions and Theoretical Implications when Adversarially Learning Fair Representations}, + year = {2017}, + eprint = {1707.00075} +} + +@article{propinf, + title={Dataset-Level Attribute Leakage in Collaborative Learning}, + author={Zhang, Wanrong and Tople, Shruti and Ohrimenko, Olga}, + journal={arXiv:2006.07267}, + year={2020} +} + +@article{propinf2, +author = {Ateniese, Giuseppe and Mancini, Luigi V. and Spognardi, Angelo and Villani, Antonio and Vitali, Domenico and Felici, Giovanni}, +title = {Hacking Smart Machines with Smarter Ones: How to Extract Meaningful Data from Machine Learning Classifiers}, +year = {2015}, +volume = {10}, +number = {3}, +journal = {Int. J. Secur. Netw.}, +month = sep, +pages = {137–150} +} + +@inproceedings{10.5555/3042817.3042973, +author = {Zemel, Richard and Wu, Yu and Swersky, Kevin and Pitassi, Toniann and Dwork, Cynthia}, +title = {Learning Fair Representations}, +year = {2013}, +booktitle = {ICML} +} + +@article{10.5555/3122009.3208010, +author = {Hamm, Jihun}, +title = {Minimax Filter: Learning to Preserve Privacy from Inference Attacks}, +year = {2017}, +volume = {18}, +number = {1}, +journal = {J. Mach. Learn. Res.}, +month = jan, +pages = {4704–4734} +} + +@inproceedings{10.5555/3327546.3327583, +author = {Moyer, Daniel and Gao, Shuyang and Brekelmans, Rob and Steeg, Greg Ver and Galstyan, Aram}, +title = {Invariant Representations without Adversarial Training}, +year = {2018}, +booktitle = {NIPS} +} + +@inproceedings{10.5555/3294771.3294827, +author = {Xie, Qizhe and Dai, Zihang and Du, Yulun and Hovy, Eduard and Neubig, Graham}, +title = {Controllable Invariance through Adversarial Feature Learning}, +year = {2017}, +booktitle = {NIPS} +} + +@InProceedings{pmlr-v80-madras18a, + title = {Learning Adversarially Fair and Transferable Representations}, + author = {Madras, David and Creager, Elliot and Pitassi, Toniann and Zemel, Richard}, + pages = {3384--3393}, + year = {2018}, + volume = {80}, + series = {Proceedings of Machine Learning Research}, +} + +@inproceedings{censoringadv, +title = "Censoring Representations with an Adversary", +author = "Harrison Edwards and Amos Storkey", +year = "2016", +booktitle = “ICLR”} + + + + + + +@inproceedings{propinf3, +author = {Ganju, Karan and Wang, Qi and Yang, Wei and Gunter, Carl A. and Borisov, Nikita}, +title = {Property Inference Attacks on Fully Connected Neural Networks Using Permutation Invariant Representations}, +year = {2018}, +booktitle = {CCS}, +pages = {619–633} +} + +@inproceedings {whiteboxmeminf, +author = {Klas Leino and Matt Fredrikson}, +title = {Stolen Memories: Leveraging Model Memorization for Calibrated White-Box Membership Inference}, +booktitle = {USENIX Security}, +year = {2020}, +pages = {1605--1622} +} + + +@inproceedings{modelinv, +author = {Fredrikson, Matt and Jha, Somesh and Ristenpart, Thomas}, +title = {Model Inversion Attacks That Exploit Confidence Information and Basic Countermeasures}, +year = {2015}, +booktitle = {CCS}, +pages = {1322–1333} +} + +@inproceedings{advtrain, +author = {Louppe, Gilles and Kagan, Michael and Cranmer, Kyle}, +title = {Learning to Pivot with Adversarial Networks}, +year = {2017}, +booktitle = {NeurIPS}, +pages = {982–991} +} + +@inproceedings {attriguard, +author = {Jinyuan Jia and Neil Zhenqiang Gong}, +title = {AttriGuard: A Practical Defense Against Attribute Inference Attacks via Adversarial Machine Learning}, +booktitle = {USENIX Security}, +year = {2018}, +pages = {513--529}, +} + + + + + + + + +@INPROCEEDINGS{fedinference, +author={L. {Melis} and C. {Song} and E. {De Cristofaro} and V. {Shmatikov}}, +booktitle={SP}, +title={Exploiting Unintended Feature Leakage in Collaborative Learning}, +year={2019}, +pages={691-706}} + +@article{fairmetric, +author = {Muhammad Bilal Zafar and Isabel Valera and Manuel Gomez-Rodriguez and Krishna P. Gummadi}, +title = {Fairness Constraints: A Flexible Approach for Fair Classification}, +journal = {Journal of Machine Learning Research}, +year = {2019}, +volume = {20}, +number = {75}, +pages = {1-42} +} + +@inproceedings{fairmetric2, +author = {Hardt, Moritz and Price, Eric and Srebro, Nathan}, +title = {Equality of Opportunity in Supervised Learning}, +year = {2016}, +booktitle = {NIPS}, +pages = {3323–3331} +} + + +@misc{yeom, + title={Privacy Risk in Machine Learning: Analyzing the Connection to Overfitting}, + author={Samuel Yeom and Irene Giacomelli and Matt Fredrikson and Somesh Jha}, + year={2018}, + booktitle = {CSF} +} + +@inproceedings{Mahajan2020DoesLS, + title={Does Learning Stable Features Provide Privacy Benefits for Machine Learning Models?}, + author={Divyat Mahajan, Shruti Tople, Amit Sharma}, + booktitle = {NeurIPS PPML Workshop}, + year={2020} +} + +@msic{advrobtool, + title={Adversarial robustness toolbox}, + howpublished={\url{https://adversarial-robustness-toolbox.org}}, + note = {Accessed: 2021-06-22} +} + + +@inproceedings{debiase, +author = {Zhang, Brian Hu and Lemoine, Blake and Mitchell, Margaret}, +title = {Mitigating Unwanted Biases with Adversarial Learning}, +year = {2018}, +booktitle = {AIES}, +pages = {335–340}, +location = {New Orleans, LA, USA} +} + + +@article{preprocessing, +author = {Kamiran, Faisal and Calders, Toon}, +year = {2011}, +month = {10}, +pages = {}, +title = {Data Pre-Processing Techniques for Classification without Discrimination}, +volume = {33}, +journal = {Knowledge and Information Systems}, +doi = {10.1007/s10115-011-0463-8} +} + + +@InProceedings{reductions, + title = {A Reductions Approach to Fair Classification}, + author = {Agarwal, Alekh and Beygelzimer, Alina and Dudik, Miroslav and Langford, John and Wallach, Hanna}, + booktitle = {Proceedings of the 35th International Conference on Machine Learning}, + pages = {60--69}, + year = {2018}, + editor = {Dy, Jennifer and Krause, Andreas}, + volume = {80}, + series = {Proceedings of Machine Learning Research}, + month = {10--15 Jul}, + publisher = {PMLR}, + pdf = {http://proceedings.mlr.press/v80/agarwal18a/agarwal18a.pdf}, + url = {http://proceedings.mlr.press/v80/agarwal18a.html}, + abstract = {We present a systematic approach for achieving fairness in a binary classification setting. While we focus on two well-known quantitative definitions of fairness, our approach encompasses many other previously studied definitions as special cases. The key idea is to reduce fair classification to a sequence of cost-sensitive classification problems, whose solutions yield a randomized classifier with the lowest (empirical) error subject to the desired constraints. We introduce two reductions that work for any representation of the cost-sensitive classifier and compare favorably to prior baselines on a variety of data sets, while overcoming several of their disadvantages.} +} +@article{recomender, + title={Data Poisoning Attacks to Deep Learning Based Recommender Systems}, + ISBN={1891562665}, + url={http://dx.doi.org/10.14722/ndss.2021.24525}, + DOI={10.14722/ndss.2021.24525}, + journal={Proceedings 2021 Network and Distributed System Security Symposium}, + publisher={Internet Society}, + author={Huang, Hai and Mu, Jiaming and Gong, Neil Zhenqiang and Li, Qi and Liu, Bin and Xu, Mingwei}, + year={2021} +} + + +@book{ortiz2015smartphone, + title={Smartphone-based human activity recognition}, + author={Reyes-Ortiz, J. L.}, + year={2015}, + publisher={Springer} +} + +% Encoding: UTF-8 + +@inproceedings{DBLP:conf/srds/ContiuVPPFR19, + author = {Stefan Contiu and + S{\'{e}}bastien Vaucher and + Rafael Pires and + Marcelo Pasin and + Pascal Felber and + Laurent R{\'{e}}veill{\`{e}}re}, + title = {Anonymous and Confidential File Sharing over Untrusted Clouds}, + booktitle = {SRDS}, + pages = {21--31}, + year = {2019}, +} + +@article{10.1504/IJSN.2015.071829, +author = {Ateniese, Giuseppe and Mancini, Luigi V. and Spognardi, Angelo and Villani, Antonio and Vitali, Domenico and Felici, Giovanni}, +title = {Hacking Smart Machines with Smarter Ones: How to Extract Meaningful Data from Machine Learning Classifiers}, +year = {2015}, +volume = {10}, +number = {3}, +journal = {Int. J. Secur. Netw.}, +month = sep, +pages = {137–150}, +numpages = {14} +} + + + +@article{salem2018mlleaks, + title={ML-Leaks: Model and Data Independent Membership Inference Attacks and Defenses on Machine Learning Models}, + author={Ahmed Salem and Yang Zhang and Mathias Humbert and Pascal Berrang and Mario Fritz and Michael Backes}, + year={2018}, + journal={arXiv:1806.01246}, +} + +@inproceedings{DBLP:conf/middleware/SilvaMCNRR19, + author = {Simon Da Silva and + Sonia Ben Mokhtar and + Stefan Contiu and + Daniel N{\'{e}}gru and + Laurent R{\'{e}}veill{\`{e}}re and + Etienne Rivi{\`{e}}re}, + title = {PrivaTube: Privacy-Preserving Edge-Assisted Video Streaming}, + booktitle = {Middleware}, + pages = {189--201}, + year = {2019}, +} + +@inproceedings{duriakova2019pdmfrec, + title={{PDMFRec}: a decentralised matrix factorisation with tunable user-centric privacy}, + author={Duriakova, Erika and Tragos, Elias Z and Smyth, Barry and Hurley, Neil and Pe{\~n}a, Francisco J and Symeonidis, Panagiotis and Geraci, James and Lawlor, Aonghus}, + booktitle={RecSys}, + pages={457--461}, + year={2019}, +} + +@article{shin2018privacy, + title={Privacy enhanced matrix factorization for recommendation with local differential privacy}, + author={Shin, Hyejin and Kim, Sungwook and Shin, Junbum and Xiao, Xiaokui}, + journal={TKDE}, + volume={30}, + number={9}, + pages={1770--1782}, + year={2018}, +} +@inproceedings{dwork2008differential, + title={Differential privacy: A survey of results}, + author={Dwork, Cynthia}, + booktitle={TAMC}, + pages={1--19}, + year={2008}, +} + +@inproceedings{wang2019cryptorec, + title={Novel Collaborative Filtering Recommender Friendly to Privacy Protection}, + author={Wang, Jun and Tang, Qiang and Arriaga, Afonso and Ryan, Peter YA}, + booktitle={IJCAI}, + year={2019} +} +@inproceedings{narayanan2008robust, + title={Robust de-anonymization of large datasets (how to break anonymity of the Netflix prize dataset)}, + author={Narayanan, Arvind and Shmatikov, Vitaly}, + booktitle={S\&P}, + year={2008} +} + +@article{zhang2020datasetlevel, + title={Dataset-Level Attribute Leakage in Collaborative Learning}, + author={Wanrong Zhang and Shruti Tople and Olga Ohrimenko}, + year={2020}, + journal={arXiv:2006.07267} +} + +@inproceedings{calandrino2011you, + title={"You might also like:" Privacy risks of collaborative filtering}, + author={Calandrino, Joseph A and Kilzer, Ann and Narayanan, Arvind and Felten, Edward W and Shmatikov, Vitaly}, + booktitle={S\&P}, + pages={231--246}, + year={2011}, +} +@article{mousa2015trust, + title={Trust management and reputation systems in mobile participatory sensing applications: A survey}, + author={Mousa, Hayam and Mokhtar, Sonia Ben and Hasan, Omar and Younes, Osama and Hadhoud, Mohiy and Brunie, Lionel}, + journal={Computer Networks}, + volume={90}, + pages={49--73}, + year={2015}, +} +@inproceedings{butin2015guide, + title={A guide to end-to-end privacy accountability}, + author={Butin, Denis and Le M{\'e}tayer, Daniel}, + booktitle={TEchnical and LEgal aspects of data pRivacy and SEcurity}, + pages={20--25}, + year={2015}, +} +@article{gunes2014shilling, + title={Shilling attacks against recommender systems: a comprehensive survey}, + author={Gunes, Ihsan and Kaleli, Cihan and Bilge, Alper and Polat, Huseyin}, + journal={Artificial Intelligence Review}, + volume={42}, + number={4}, + pages={767--799}, + year={2014}, +} + +@inproceedings{boutet2018collaborative, + title={Collaborative filtering under a sybil attack: Similarity metrics do matter!}, + author={Boutet, Antoine and De Moor, Florestant and Frey, Davide and Guerraoui, Rachid and Kermarrec, Anne-Marie and Rault, Antoine}, + booktitle={DSN}, + pages={466--477}, + year={2018}, +} +@article{boutet2016privacy, + title={Privacy-preserving distributed collaborative filtering}, + author={Boutet, Antoine and Frey, Davide and Guerraoui, Rachid and J{\'e}gou, Arnaud and Kermarrec, Anne-Marie}, + journal={Computing}, + volume={98}, + number={8}, + pages={827--846}, + year={2016}, +} +@inproceedings{gan2020enhancing, + title={Enhancing recommendation diversity using determinantal point processes on knowledge graphs}, + author={Gan, Lu and Nurbakova, Diana and Laporte, L{\'e}a and Calabretto, Sylvie}, + booktitle={SIGIR}, + pages={2001--2004}, + year={2020} +} +@inproceedings{diarra2014fullreview, + title={Fullreview: Practical accountability in presence of selfish nodes}, + author={Diarra, Amadou and Mokhtar, Sonia Ben and Aublin, Pierre-Louis and Qu{\'e}ma, Vivien}, + booktitle={SRDS}, + pages={271--280}, + year={2014}, +} + +@inproceedings{contiu2018ibbe, + title={IBBE-SGX: Cryptographic group access control using trusted execution environments}, + author={Contiu, Stefan and Pires, Rafael and Vaucher, S{\'e}bastien and Pasin, Marcelo and Felber, Pascal and R{\'e}veill{\`e}re, Laurent}, + booktitle={DSN}, + pages={207--218}, + year={2018}, +} + +@article{damaskinos2020fleet, + title={FLeet: Online Federated Learning via Staleness Awareness and Performance Prediction}, + author={Damaskinos, Georgios and Guerraoui, Rachid and Kermarrec, Anne-Marie and Nitu, Vlad and Patra, Rhicheek and Taiani, Francois}, + journal={arXiv:2006.07273}, + year={2020} +} + +@inproceedings{jiang2020detection, + title={On the Detection of Shilling Attacks in Federated Collaborative Filtering}, + author={Jiang, Yangfan and Zhou, Yipeng and Wu, Di and Li, Chao and Wang, Yan}, + booktitle={SRDS}, + pages={185--194}, + year={2020}, +} + +@article{bonawitz2016practical, + title={Practical secure aggregation for federated learning on user-held data}, + author={Bonawitz, Keith and Ivanov, Vladimir and Kreuter, Ben and Marcedone, Antonio and McMahan, H Brendan and Patel, Sarvar and Ramage, Daniel and Segal, Aaron and Seth, Karn}, + journal={arXiv:1611.04482}, + year={2016} +} + + + +@article{wang2020attack, + title={Attack of the tails: Yes, you really can backdoor federated learning}, + author={Wang, Hongyi and Sreenivasan, Kartik and Rajput, Shashank and Vishwakarma, Harit and Agarwal, Saurabh and Sohn, Jy-yong and Lee, Kangwook and Papailiopoulos, Dimitris}, + journal={arXiv:2007.05084}, + year={2020} +} + +@inproceedings{muhammad2020fedfast, + title={FedFast: Going Beyond Average for Faster Training of Federated Recommender Systems}, + author={Muhammad, Khalil and Wang, Qinqin and O'Reilly-Morgan, Diarmuid and Tragos, Elias and Smyth, Barry and Hurley, Neil and Geraci, James and Lawlor, Aonghus}, + booktitle={SIGKDD}, + pages={1234--1242}, + year={2020} +} +@article{zhang2018explainable, + title={Explainable recommendation: A survey and new perspectives}, + author={Zhang, Yongfeng and Chen, Xu}, + volume = {14}, + journal = {Foundations and Trends in Information Retrieval}, + number = {1}, + pages = {1-101}, + year={2020} +} + +@inproceedings{fleder2007recommender, + title={Recommender systems and their impact on sales diversity}, + author={Fleder, Daniel M and Hosanagar, Kartik}, + booktitle={Conference on Electronic Commerce}, + pages={192--199}, + year={2007}, +} + +@inproceedings{garcin2014offline, + title={Offline and online evaluation of news recommender systems at {swissinfo.ch}}, + author={Garcin, Florent and Faltings, Boi and Donatsch, Olivier and Alazzawi, Ayar and Bruttin, Christophe and Huber, Amr}, + booktitle={RecSys}, + pages={169--176}, + year={2014}, +} + +@inproceedings{ge2010beyond, + title={Beyond accuracy: evaluating recommender systems by coverage and serendipity}, + author={Ge, Mouzhi and Delgado-Battenfeld, Carla and Jannach, Dietmar}, + booktitle={RecSys}, + pages={257--260}, + year={2010}, +} + +@article{bobadilla2013recommender, + title={Recommender systems survey}, + author={Bobadilla, Jes{\'u}s and Ortega, Fernando and Hernando, Antonio and Guti{\'e}rrez, Abraham}, + journal={Knowledge-Based Systems}, + volume={46}, + __pages={109--132}, + year={2013}, +} + +@inproceedings{tan2020federated, + title={A Federated Recommender System for Online Services}, + author={Tan, Ben and Liu, Bo and Zheng, Vincent and Yang, Qiang}, + booktitle={RecSys}, + pages={579--581}, + year={2020} +} + +@inproceedings{gao2020dplcf, + title={DPLCF: Differentially Private Local Collaborative Filtering}, + author={Gao, Chen and Huang, Chao and Lin, Dongsheng and Jin, Depeng and Li, Yong}, + booktitle={SIGIR}, + pages={961--970}, + year={2020} +} + +@inproceedings{guerraoui2017know, + title={I know nothing about you but here is what you might like}, + author={Guerraoui, Rachid and Kermarrec, Anne-Marie and Patra, Rhicheek and Valiyev, Mahammad and Wang, Jingjing}, + booktitle={DSN}, + pages={439--450}, + year={2017}, +} + + +@article{MovieLens, + author = {Harper, F. Maxwell and Konstan, Joseph A.}, + title = {The MovieLens Datasets: History and Context}, + journal = {TIIS}, + volume={5}, + number={4}, + year={2016}, +} + +@incollection{burke2015robust, + title={Robust collaborative recommendation}, + author={Burke, Robin and O’Mahony, Michael P and Hurley, Neil J}, + booktitle={Recommender systems handbook}, + pages={961--995}, + year={2015}, +} + +@inproceedings{dasilva2019privatube, + title={PrivaTube: Privacy-Preserving Edge-Assisted Video Streaming}, + author={Da Silva, Simon and Ben Mokhtar, Sonia and Contiu, Stefan and N{\'e}gru, Daniel and R{\'e}veill{\`e}re, Laurent and Rivi{\`e}re, Etienne}, + booktitle={Middleware}, + year={2019} +} + +@article{haeberlen2007peerreview, + title={PeerReview: Practical accountability for distributed systems}, + author={Haeberlen, Andreas and Kouznetsov, Petr and Druschel, Peter}, + journal={SIGOPS operating systems review}, + volume={41}, + number={6}, + year={2007}, +} + +@inproceedings{decouchant2019p3ls, + title={P3LS: Plausible Deniability for Practical Privacy-Preserving Live Streaming}, + author={Decouchant, J{\'e}r{\'e}mie and Boutet, Antoine and Yu, Jiangshan and Esteves-Verissimo, Paulo}, + booktitle={SRDS}, + year={2019} +} + + +@article{georgopoulos2014distributed, + title={Distributed machine learning in networks by consensus}, + author={Georgopoulos, Leonidas and Hasler, Martin}, + journal={Neurocomputing}, + volume={124}, + pages={2--12}, + year={2014}, +} + +@article{fierimonte2016fully, + title={Fully decentralized semi-supervised learning via privacy-preserving matrix completion}, + author={Fierimonte, Roberto and Scardapane, Simone and Uncini, Aurelio and Panella, Massimo}, + journal={Transactions on neural networks and learning systems}, + volume={28}, + number={11}, + pages={2699--2711}, + year={2016}, +} + + +@inproceedings{ling2012decentralized, + title={Decentralized low-rank matrix completion}, + author={Ling, Qing and Xu, Yangyang and Yin, Wotao and Wen, Zaiwen}, + booktitle={ICASSP}, + pages={2925--2928}, + year={2012}, +} + +@inproceedings{chang2014factorized, + title={Factorized similarity learning in networks}, + author={Chang, Shiyu and Qi, Guo-Jun and Aggarwal, Charu C and Zhou, Jiayu and Wang, Meng and Huang, Thomas S}, + booktitle={ICDM}, + pages={60--69}, + year={2014}, +} + +@inproceedings{boutet:hal-00769291, + TITLE = {{WhatsUp Decentralized Instant News Recommender}}, + AUTHOR = {Boutet, Antoine and Frey, Davide and Guerraoui, Rachid and J{\'e}gou, Arnaud and Kermarrec, Anne-Marie}, + BOOKTITLE = {IPDPS}, + YEAR = {2013}, +} + + +@article{koren2009matrix, + title={Matrix factorization techniques for recommender systems}, + author={Koren, Yehuda and Bell, Robert and Volinsky, Chris}, + journal={Computer}, + volume={42}, + number={8}, + pages={30--37}, + year={2009}, +} + + +@misc{eachmovie, + title={EachMovie collaborative filtering data set}, + howpublished={https://www.cs.cmu.edu/~lebanon/IR-lab/data.html} +} + +@Book{Pearl1988, + title = {\href{https://dl.acm.org/citation.cfm?id=52121}{Probabilistic Reasoning in Intelligent Systems: Networks of Plausible Inference}}, + publisher = {Morgan Kaufmann}, + year = {1988}, + author = {Pearl, J.}, + owner = {Vincent}, + timestamp = {2018.03.25}, +} + +@Article{Zadeh1965, + author = {Zadeh, L. A.}, + title = {\href{https://doi.org/10.1016/S0019-9958(65)90241-X}{Fuzzy sets}}, + journal = {Information and Control}, + year = {1965}, + volume = {8}, + number = {3}, + pages = {338-353}, + owner = {Vincent}, + timestamp = {2018.03.25}, +} + +@InProceedings{Agrawal1993, + author = {Agrawal, R. and Imieliński, T. and Swami, A.}, + title = {\href{https://doi.org/10.1145/170036.170072}{Mining association rules between sets of items in large databases}}, + booktitle = {ACM SIGMOD International Conference on Management of data}, + year = {1993}, + pages = {207-216}, + owner = {Vincent}, + timestamp = {2018.03.25}, +} + +@misc{ppstream, + title={PPStream}, + howpublished={http://www.ppstream.com} +} + +@inproceedings{datta2015automated, + title={Automated Experiments on Ad Privacy Settings: A Tale of Opacity, Choice, and Discrimination}, + author={Amit Datta and Michael Carl Tschantz and Anupam Datta}, + year={2015}, + booktitle={PETS}, +} + +@inproceedings{barkan2020explainable, + title={Explainable recommendations via attentive multi-persona collaborative filtering}, + author={Barkan, Oren and Fuchs, Yonatan and Caciularu, Avi and Koenigstein, Noam}, + booktitle={RecSys}, + pages={468--473}, + year={2020} +} + +@inproceedings{Afchar_2020, + title={Making Neural Networks Interpretable with Attribution: Application to Implicit Signals Prediction}, + booktitle={RecSys}, + author={Afchar, Darius and Hennequin, Romain}, + year={2020}, +} + +@inproceedings{Schnabel2020TheIO, + title={The Impact of More Transparent Interfaces on Behavior in Personalized Recommendation}, + author={Tobias Schnabel and Saleema Amershi and P. Bennett and P. Bailey and T. Joachims}} + +@BOOK{Bourrigan2021-dd, + title = "Maths {MPSI-MP2I}: tout-en-un", + author = "Bourrigan, Maxime and Delsinne, Emmanuel and Gentric, Yoann and + Lussier, Fran{\c c}ois and Mullaert, Chlo{\'e} and ), Serge + Nicolas (math{\'e}maticien) and Nougayr{\`e}de, Jean and + T{\^e}te, Claire and Volcker, Michel", + year = 2021, + language = "fr" +} + + diff --git a/main.pdf b/main.pdf index 735118c..bdfbb23 100644 Binary files a/main.pdf and b/main.pdf differ -- cgit v1.2.3