Rahul Sukthankar

194 papers A* 49A 16B 9C 2Misc 2Journal 67Unranked 48
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Chuhan Zhang, Guillaume Le Moing, Skanda Koppula, Ignacio Rocco, Liliane Momeni, Junyu Xie, Shuyang Sun, Rahul Sukthankar, Joëlle K. Barral, Raia Hadsell, Zoubin Ghahramani, Andrew Zisserman, Junlin Zhang, Mehdi S. M. Sajjadi
2023 conf
ICCV (Workshops)
Alina Marcu, Mihai Cristian Pîrvu, Dragos Costea, Emanuela Haller, Emil Slusanschi, Nabil Belbachir, Rahul Sukthankar, Marius Leordeanu
2023 J jnl
CoRR
Alina Marcu, Mihai Cristian Pîrvu, Dragos Costea, Emanuela Haller, Emil Slusanschi, Ahmed Nabil Belbachir, Rahul Sukthankar, Marius Leordeanu
2022 A* conf
ICLR
Chengzhi Mao, Lu Jiang, Mostafa Dehghani, Carl Vondrick, Rahul Sukthankar, Irfan Essa
2022 A* conf
ICRA
Vlad Licaret, Victor Robu, Alina Marcu, Dragos Costea, Emil Slusanschi, Rahul Sukthankar, Marius Leordeanu
2021 conf
CVPR Workshops
Mihai Cristian Pîrvu, Victor Robu, Vlad Licaret, Dragos Costea, Alina Marcu, Emil Slusanschi, Rahul Sukthankar, Marius Leordeanu
2021 J jnl
CoRR
Chengzhi Mao, Lu Jiang, Mostafa Dehghani, Carl Vondrick, Rahul Sukthankar, Irfan Essa
2021 J jnl
CoRR
Eduard Gabriel Bazavan, Andrei Zanfir, Mihai Zanfir, William T. Freeman, Rahul Sukthankar, Cristian Sminchisescu
2021 A* conf
CVPR
Andrei Zanfir, Eduard Gabriel Bazavan, Mihai Zanfir, William T. Freeman, Rahul Sukthankar, Cristian Sminchisescu
2021 A* conf
AAAI
Marius Leordeanu, Mihai Cristian Pîrvu, Dragos Costea, Alina Elena Marcu, Emil Slusanschi, Rahul Sukthankar
2021 A* conf
ICCV
Mihai Zanfir, Andrei Zanfir, Eduard Gabriel Bazavan, William T. Freeman, Rahul Sukthankar, Cristian Sminchisescu
2021 J jnl
CoRR
Mihai Zanfir, Andrei Zanfir, Eduard Gabriel Bazavan, William T. Freeman, Rahul Sukthankar, Cristian Sminchisescu
2020 J jnl
Int. J. Comput. Vis.
Saurabh Gupta, Varun Tolani, James Davidson, Sergey Levine, Rahul Sukthankar, Jitendra Malik
2020 A conf
WACV
Jonathan C. Stroud, David A. Ross, Chen Sun, Jia Deng, Rahul Sukthankar
2020 A* conf
CVPR
Hongyi Xu, Eduard Gabriel Bazavan, Andrei Zanfir, William T. Freeman, Rahul Sukthankar, Cristian Sminchisescu
2020 J jnl
CoRR
Jonathan C. Stroud, David A. Ross, Chen Sun, Jia Deng, Rahul Sukthankar, Cordelia Schmid
2020 J jnl
CoRR
Andrei Zanfir, Eduard Gabriel Bazavan, Mihai Zanfir, William T. Freeman, Rahul Sukthankar, Cristian Sminchisescu
2020 A conf
IROS
Saif Alabachi, Gita Sukthankar, Rahul Sukthankar
2020 J jnl
CoRR
Marius Leordeanu, Mihai Cristian Pîrvu, Dragos Costea, Alina Marcu, Emil Slusanschi, Rahul Sukthankar
2020 A* conf
CVPR
Arsha Nagrani, Chen Sun, David Ross, Rahul Sukthankar, Cordelia Schmid, Andrew Zisserman
2020 J jnl
CoRR
Arsha Nagrani, Chen Sun, David Ross, Rahul Sukthankar, Cordelia Schmid, Andrew Zisserman
2020 J jnl
CoRR
Samuel Albanie, Yang Liu, Arsha Nagrani, Antoine Miech, Ernesto Coto, Ivan Laptev, Rahul Sukthankar, Bernard Ghanem, Andrew Zisserman, Valentin Gabeur, Chen Sun, Karteek Alahari, Cordelia Schmid, Shizhe Chen, Yida Zhao, Qin Jin, Kaixu Cui, Hui Liu, Chen Wang, Yudong Jiang, Xiaoshuai Hao
2020 conf
ECCV (6)
Andrei Zanfir, Eduard Gabriel Bazavan, Hongyi Xu, William T. Freeman, Rahul Sukthankar, Cristian Sminchisescu
2020 J jnl
CoRR
Andrei Zanfir, Eduard Gabriel Bazavan, Hongyi Xu, Bill Freeman, Rahul Sukthankar, Cristian Sminchisescu
2019 A conf
BMVC
Rui Hou, Chen Chen, Rahul Sukthankar, Mubarak Shah
2019 J jnl
CoRR
Rui Hou, Chen Chen, Rahul Sukthankar, Mubarak Shah
2019 A* conf
ICRA
Saif Alabachi, Gita Sukthankar, Rahul Sukthankar
2019 J jnl
CoRR
Saif Alabachi, Gita Sukthankar, Rahul Sukthankar
2019 A* conf
CVPR
Chen Sun, Abhinav Shrivastava, Carl Vondrick, Rahul Sukthankar, Kevin Murphy, Cordelia Schmid
2019 J jnl
CoRR
Chen Sun, Abhinav Shrivastava, Carl Vondrick, Rahul Sukthankar, Kevin Murphy, Cordelia Schmid
2019 J jnl
CoRR
Saif Alabachi, Gita Sukthankar, Rahul Sukthankar
2018 A* conf
CVPR
Chunhui Gu, Chen Sun, David A. Ross, Carl Vondrick, Caroline Pantofaru, Yeqing Li, Sudheendra Vijayanarasimhan, George Toderici, Susanna Ricco, Rahul Sukthankar, Cordelia Schmid, Jitendra Malik
2018 conf
ECCV (11)
Chen Sun, Abhinav Shrivastava, Carl Vondrick, Kevin Murphy, Rahul Sukthankar, Cordelia Schmid
2018 J jnl
CoRR
Chen Sun, Abhinav Shrivastava, Carl Vondrick, Kevin Murphy, Rahul Sukthankar, Cordelia Schmid
2018 J jnl
CoRR
Jonathan C. Stroud, David A. Ross, Chen Sun, Jia Deng, Rahul Sukthankar
2018 J jnl
IEEE Signal Process. Mag.
Fatih Porikli, Shiguang Shan, Cees Snoek, Rahul Sukthankar, Xiaogang Wang
2018 J jnl
Comput. Vis. Image Underst.
Lamberto Ballan, Shih-Fu Chang, Gang Hua, Thomas Mensink, Greg Mori, Rahul Sukthankar
2018 J jnl
CoRR
Alexander Pashevich, Danijar Hafner, James Davidson, Rahul Sukthankar, Cordelia Schmid
2018 J jnl
CoRR
Steven Hickson, Anelia Angelova, Irfan A. Essa, Rahul Sukthankar
2018 A* conf
CVPR
Yu-Wei Chao, Sudheendra Vijayanarasimhan, Bryan Seybold, David A. Ross, Jia Deng, Rahul Sukthankar
2018 J jnl
CoRR
Yu-Wei Chao, Sudheendra Vijayanarasimhan, Bryan Seybold, David A. Ross, Jia Deng, Rahul Sukthankar
2018 conf
ECCV Workshops (4)
Joonseok Lee, Apostol Natsev, Walter Reade, Rahul Sukthankar, George Toderici
2017 J jnl
CoRR
Chunhui Gu, Chen Sun, Sudheendra Vijayanarasimhan, Caroline Pantofaru, David A. Ross, George Toderici, Yeqing Li, Susanna Ricco, Rahul Sukthankar, Cordelia Schmid, Jitendra Malik
2017 J jnl
Int. J. Comput. Vis.
Luca Del Pero, Susanna Ricco, Rahul Sukthankar, Vittorio Ferrari
2017 conf
GIoTS
Mahadev Satyanarayanan, Phillip B. Gibbons, Lily B. Mummert, Padmanabhan Pillai, Pieter Simoens, Rahul Sukthankar
2017 A* conf
CVPR
Saurabh Gupta, James Davidson, Sergey Levine, Rahul Sukthankar, Jitendra Malik
2017 J jnl
CoRR
Saurabh Gupta, James Davidson, Sergey Levine, Rahul Sukthankar, Jitendra Malik
2017 J jnl
IEEE Signal Process. Mag.
Fatih Porikli, Shiguang Shan, Cees Snoek, Rahul Sukthankar, Xiaogang Wang
2017 J jnl
CoRR
Katerina Fragkiadaki, Jonathan Huang, Alex Alemi, Sudheendra Vijayanarasimhan, Susanna Ricco, Rahul Sukthankar
2017 A conf
BMVC
Rui Hou, Rahul Sukthankar, Mubarak Shah
2017 A* conf
ICML
Lerrel Pinto, James Davidson, Rahul Sukthankar, Abhinav Gupta
2017 J jnl
CoRR
Lerrel Pinto, James Davidson, Rahul Sukthankar, Abhinav Gupta
2017 J jnl
CoRR
Sudheendra Vijayanarasimhan, Susanna Ricco, Cordelia Schmid, Rahul Sukthankar, Katerina Fragkiadaki
2017 J jnl
Comput. Vis. Image Underst.
Haroon Idrees, Amir R. Zamir, Yu-Gang Jiang, Alex Gorban, Ivan Laptev, Rahul Sukthankar, Mubarak Shah
2017 J jnl
CoRR
Shumeet Baluja, Michele Covell, Rahul Sukthankar
2017 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Le Wang, Gang Hua, Rahul Sukthankar, Jianru Xue, Zhenxing Niu, Nanning Zheng
2017 J jnl
CoRR
Wen Li, Limin Wang, Wei Li, Eirikur Agustsson, Jesse Berent, Abhinav Gupta, Rahul Sukthankar, Luc Van Gool
2016 J jnl
CoRR
Abhinav Shrivastava, Rahul Sukthankar, Jitendra Malik, Abhinav Gupta
2016 A* conf
CVPR
Luca Del Pero, Susanna Ricco, Rahul Sukthankar, Vittorio Ferrari
2016 A* conf
AAAI
Marius Leordeanu, Alexandra Radu, Shumeet Baluja, Rahul Sukthankar
2016 B conf
SAS
Rahul Sukthankar, Michele Covell, Shumeet Baluja
2016 Misc conf
FLAIRS
Rey Coaguila, Gita Reese Sukthankar, Rahul Sukthankar
2016 J jnl
CoRR
Haroon Idrees, Amir R. Zamir, Yu-Gang Jiang, Alex Gorban, Ivan Laptev, Rahul Sukthankar, Mubarak Shah
2016 A* conf
ICLR (Poster)
George Toderici, Sean M. O'Malley, Sung Jin Hwang, Damien Vincent, David Minnen, Shumeet Baluja, Michele Covell, Rahul Sukthankar
2015 conf
ITSC
Shumeet Baluja, Michele Covell, Rahul Sukthankar
2015 A* conf
CVPR
Luca Del Pero, Susanna Ricco, Rahul Sukthankar, Vittorio Ferrari
2015 J jnl
CoRR
Luca Del Pero, Susanna Ricco, Rahul Sukthankar, Vittorio Ferrari
2015 J jnl
CoRR
Abhimanyu Dubey, Nikhil Naik, Dan Raviv, Rahul Sukthankar, Ramesh Raskar
2015 J jnl
ACM Trans. Interact. Intell. Syst.
Eugene M. Taranta II, Thaddeus K. Simons, Rahul Sukthankar, Joseph J. LaViola Jr.
2015 J jnl
CoRR
Marius Leordeanu, Alexandra Radu, Shumeet Baluja, Rahul Sukthankar
2015 A* conf
CVPR
Xufeng Han, Thomas Leung, Yangqing Jia, Rahul Sukthankar, Alexander C. Berg
2015 conf
ITSC
Michele Covell, Shumeet Baluja, Rahul Sukthankar
2015 conf
ICCV Workshops
Dinesh Manocha, Marc Pollefeys, Rif Saurous, Rahul Sukthankar, Ruigang Yang
2015 A* conf
CVPR
Zhengyang Wu, Fuxin Li, Rahul Sukthankar, James M. Rehg
2015 A* conf
ACM Multimedia
Chen Sun, Sanketh Shetty, Rahul Sukthankar, Ram Nevatia
2015 J jnl
CoRR
Chen Sun, Sanketh Shetty, Rahul Sukthankar, Ram Nevatia
2015 conf
CAIP (2)
Shumeet Baluja, Michele Covell, Rahul Sukthankar
2014 J jnl
CoRR
Luca Del Pero, Susanna Ricco, Rahul Sukthankar, Vittorio Ferrari
2014 J jnl
IEEE Trans. Multim.
Subhabrata Bhattacharya, Ramin Mehran, Rahul Sukthankar, Mubarak Shah
2014 conf
ECCV (3)
Rui Hou, Amir Roshan Zamir, Rahul Sukthankar, Mubarak Shah
2014 J jnl
CoRR
Marius Leordeanu, Alexandra Radu, Rahul Sukthankar
2014 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Marius Leordeanu, Rahul Sukthankar, Cristian Sminchisescu
2014 A* conf
CVPR
Andrej Karpathy, George Toderici, Sanketh Shetty, Thomas Leung, Rahul Sukthankar, Li Fei-Fei
2014 A* conf
CVPR
Subhabrata Bhattacharya, Mahdi M. Kalayeh, Rahul Sukthankar, Mubarak Shah
2014 J jnl
CoRR
Luca Del Pero, Susanna Ricco, Rahul Sukthankar, Vittorio Ferrari
2014 J jnl
CoRR
Marius Leordeanu, Rahul Sukthankar
2014 conf
ECCV (4)
Le Wang, Gang Hua, Rahul Sukthankar, Jianru Xue, Nanning Zheng
2013 conf
3DV
Aydin Arpa, Luca Ballan, Rahul Sukthankar, Gabriel Taubin, Marc Pollefeys, Ramesh Raskar
2013 A* conf
CVPR
Kevin D. Tang, Rahul Sukthankar, Jay Yagnik, Li Fei-Fei
2013 J jnl
Int. J. Comput. Vis.
Christopher Ellis, Syed Zain Masood, Marshall F. Tappen, Joseph J. LaViola Jr., Rahul Sukthankar
2013 A* conf
ICRA
Pyry Matikainen, P. Michael Furlong, Rahul Sukthankar, Martial Hebert
2013 J jnl
AI Mag.
Vita Markman, Georgi Stojanov, Bipin Indurkhya, Takashi Kido, Keiki Takadama, George Dimitri Konidaris, Eric Eaton, Naohiro Matsumura, Renate Fruchter, Donald A. Sofge, William F. Lawless, Omid Madani, Rahul Sukthankar
2013 A* conf
CVPR
Yicong Tian, Rahul Sukthankar, Mubarak Shah
2012 J jnl
CoRR
Liu Yang, Rong Jin, Rahul Sukthankar
2012 A conf
WACV
Debadeepta Dey, Lily B. Mummert, Rahul Sukthankar
2012 conf
ECCV Workshops (1)
Pyry Matikainen, Rahul Sukthankar, Martial Hebert
2012 A* conf
CVPR
Felix von Hundelshausen, Rahul Sukthankar
2012 conf
ECCV (4)
Marius Leordeanu, Rahul Sukthankar, Cristian Sminchisescu
2012 J jnl
CoRR
Marius Leordeanu, Rahul Sukthankar, Cristian Sminchisescu
2012 B conf
ICPR
Liyue Zhao, Gita Sukthankar, Rahul Sukthankar
2012 A* conf
CVPR
Pyry Matikainen, Rahul Sukthankar, Martial Hebert
2012 J jnl
Int. J. Comput. Vis.
Marius Leordeanu, Rahul Sukthankar, Martial Hebert
2012 conf
ECCV Workshops (1)
Glenn Hartmann, Matthias Grundmann, Judy Hoffman, David Tsai, Vivek Kwatra, Omid Madani, Sudheendra Vijayanarasimhan, Irfan A. Essa, James M. Rehg, Rahul Sukthankar
2011 J jnl
ACM Trans. Multim. Comput. Commun. Appl.
Subhabrata Bhattacharya, Rahul Sukthankar, Mubarak Shah
2011 A* conf
CVPR
Subhabrata Bhattacharya, Rahul Sukthankar, Rong Jin, Mubarak Shah
2011 J jnl
Pattern Recognit.
Oscar Déniz, Gloria Bueno García, Enrique Bermejo Nievas, Rahul Sukthankar
2011 A* conf
ICCV
Pyry Matikainen, Rahul Sukthankar, Martial Hebert
2011 conf
SocialCom/PASSAT
Liyue Zhao, Gita Sukthankar, Rahul Sukthankar
2011 J jnl
IEEE Multim.
Rong Yan, Benoit Huet, Rahul Sukthankar
2011 conf
CVPR Workshops
Hakan Boyraz, Marshall F. Tappen, Rahul Sukthankar
2011 conf
ICCV Workshops
Syed Zain Masood, Christopher Ellis, Adarsh Nagaraja, Marshall F. Tappen, Joseph J. LaViola Jr., Rahul Sukthankar
2011 B conf
FG
Pyry Matikainen, Padmanabhan Pillai, Lily B. Mummert, Rahul Sukthankar, Martial Hebert
2011 conf
Human Computation
Liyue Zhao, Gita Sukthankar, Rahul Sukthankar
2011 conf
CAIP (2)
Enrique Bermejo Nievas, Oscar Déniz-Suárez, Gloria Bueno García, Rahul Sukthankar
2010 J jnl
IEEE Trans. Pattern Anal. Mach. Intell.
Liu Yang, Rong Jin, Lily B. Mummert, Rahul Sukthankar, Adam Goode, Bin Zheng, Steven C. H. Hoi, Mahadev Satyanarayanan
2010 A* conf
ACM Multimedia
Subhabrata Bhattacharya, Rahul Sukthankar, Mubarak Shah
2010 conf
Multimedia Information Retrieval
Ming-yu Chen, Lily B. Mummert, Padmanabhan Pillai, Alexander G. Hauptmann, Rahul Sukthankar
2010 J jnl
Autom.
Peng Yang, Randy A. Freeman, Geoffrey J. Gordon, Kevin M. Lynch, Siddhartha S. Srinivasa, Rahul Sukthankar
2010 A conf
MMSys
Ming-yu Chen, Lily B. Mummert, Padmanabhan Pillai, Alexander G. Hauptmann, Rahul Sukthankar
2010 A* conf
CVPR
Shulin Yang, Mei Chen, Dean Pomerleau, Rahul Sukthankar
2010 J jnl
IEEE Pervasive Comput.
Tim Kindberg, Thomas Pederson, Rahul Sukthankar
2010 B conf
ICPR
Liyue Zhao, Xi Wang, Gita Sukthankar, Rahul Sukthankar
2010 A* conf
CVPR
Kevin D. Tang, Marshall F. Tappen, Rahul Sukthankar, Christoph H. Lampert
2010 conf
ECCV (1)
Pyry Matikainen, Martial Hebert, Rahul Sukthankar
2010 J jnl
Int. J. Next Gener. Comput.
Mahadev Satyanarayanan, Rahul Sukthankar, Adam Goode, Nilton Bila, Lily B. Mummert, Jan Harkes, Adam Wolbach, Larry Huston, Eyal de Lara
2010 J jnl
J. Internet Serv. Appl.
Mahadev Satyanarayanan, Rahul Sukthankar, Lily B. Mummert, Adam Goode, Jan Harkes, Steven W. Schlosser
2010 J jnl
Int. J. Comput. Vis.
Yan Ke, Rahul Sukthankar, Martial Hebert
2009 conf
NIPS
Marius Leordeanu, Martial Hebert, Rahul Sukthankar
2009 B conf
ICIP
Mei Chen, Kapil Dhingra, Wen Wu, Lei Yang, Rahul Sukthankar, Jie Yang
2009 ed.
LS-MMRM@ACM Multimedia
Rong Yan, Qi Tian, John R. Smith, Rahul Sukthankar
2009 B conf
NOSSDAV
Padmanabhan Pillai, Lily B. Mummert, Steven W. Schlosser, Rahul Sukthankar, Casey Helfrich
2009 A* conf
ACM Multimedia
Rong Yan, John R. Smith, Qi Tian, Rahul Sukthankar
2009 conf
ICCV Workshops
Pyry Matikainen, Martial Hebert, Rahul Sukthankar
2008 J jnl
IEEE Pervasive Comput.
Nigel Davies, Daniel P. Siewiorek, Rahul Sukthankar
2008 C conf
ACC
Peng Yang, Randy A. Freeman, Geoffrey J. Gordon, Kevin M. Lynch, Siddhartha S. Srinivasa, Rahul Sukthankar
2008 conf
ISBI
Adam Goode, Rahul Sukthankar, Lily B. Mummert, Mei Chen, Jeffrey Saltzman, David A. Ross, Stacey Szymanski, Anil Tarachandani, Mahadev Satyanarayanan
2008 A conf
BMVC
Pyry Matikainen, Rahul Sukthankar, Martial Hebert, Yan Ke
2008 A* conf
CVPR
Dhruv Batra, Rahul Sukthankar, Tsuhan Chen
2008 A conf
BMVC
Dhruv Batra, Rahul Sukthankar, Tsuhan Chen
2008 conf
NIPS
Liu Yang, Rong Jin, Rahul Sukthankar
2008 A* conf
CVPR
Liu Yang, Rong Jin, Rahul Sukthankar, Frédéric Jurie
2007 A conf
UAI
Liu Yang, Rong Jin, Rahul Sukthankar
2007 A* conf
CVPR
Marius Leordeanu, Martial Hebert, Rahul Sukthankar
2007 A* conf
CVPR
Liu Yang, Rong Jin, Caroline Pantofaru, Rahul Sukthankar
2007 A* conf
ICCV
Yan Ke, Rahul Sukthankar, Martial Hebert
2007 A conf
WACV
Devi Parikh, Rahul Sukthankar, Tsuhan Chen, Mei Chen
2007 A conf
ICME
Adam Goode, Mei Chen, Anil Tarachandani, Lily B. Mummert, Rahul Sukthankar, Casey Helfrich, Alice Stefanni, Limor Fix, Jeffrey Saltzman, Mahadev Satyanarayanan
2007 conf
Computer-Aided Diagnosis
Liu Yang, Rong Jin, Rahul Sukthankar, Bin Zheng, Lily B. Mummert, Mahadev Satyanarayanan, Mei Chen, Drazen Jukic
2007 conf
ECML
Rong Jin, Ming Wu, Rahul Sukthankar
2007 J jnl
IEEE Trans. Vis. Comput. Graph.
Jay Summet, Matthew Flagg, Tat-Jen Cham, James M. Rehg, Rahul Sukthankar
2007 A* conf
CVPR
Yan Ke, Rahul Sukthankar, Martial Hebert
2006 A* conf
AAAI
Liu Yang, Rong Jin, Rahul Sukthankar, Yi Liu
2006 conf
CVPR (2)
Feng Kang, Rong Jin, Rahul Sukthankar
2006 conf
NIPS
Stanislav Funiak, Carlos Guestrin, Mark A. Paskin, Rahul Sukthankar
2006 conf
IPSN
Stanislav Funiak, Carlos Guestrin, Mark A. Paskin, Rahul Sukthankar
2006 conf
Toward Category-Level Object Recognition
Yutaka Hirano, Christophe Garcia, Rahul Sukthankar, Anthony Hoogs
2006 conf
CVPR Workshops
Rahul Sukthankar, Yan Ke, Derek Hoiem
2005 A* conf
ICRA
Jason Campbell, Rahul Sukthankar, Illah R. Nourbakhsh, Aroon Pahwa
2005 conf
CVPR (1)
Yan Ke, Derek Hoiem, Rahul Sukthankar
2005 conf
CVPR (2)
Yan Ke, Derek Hoiem, Rahul Sukthankar
2005 A conf
HPDC
Larry Huston, Alex Nizhner, Padmanabhan Pillai, Rahul Sukthankar, Peter Steenkiste, Jiaying Zhang
2005 A* conf
ICCV
Yan Ke, Rahul Sukthankar, Martial Hebert
2005 A conf
ICME
Larry Huston, Rahul Sukthankar, Yan Ke
2005 A* conf
ACM Multimedia
Jason Campbell, Phillip B. Gibbons, Suman Nath, Padmanabhan Pillai, Srinivasan Seshan, Rahul Sukthankar
2005 conf
ICASSP (5)
Derek Hoiem, Yan Ke, Rahul Sukthankar
2005 J jnl
IEEE Computer Graphics and Applications
Grant Wallace, Otto J. Anshus, Peng Bi, Han Chen, Yuqun Chen, Douglas W. Clark, Perry R. Cook, Adam Finkelstein, Thomas A. Funkhouser, Anoop Gupta, Matthew A. Hibbs, Kai Li, Zhiyan Liu, Rudrajit Samanta, Rahul Sukthankar, Olga G. Troyanskaya
2005 conf
Pervasive
Jay Summet, Rahul Sukthankar
2004 conf
CVPR (2)
Mark Ashdown, Matthew Flagg, Rahul Sukthankar, James M. Rehg
2004 A* conf
ACM Multimedia
Yan Ke, Rahul Sukthankar, Larry Huston
2004 A conf
FAST
Larry Huston, Rahul Sukthankar, Rajiv Wickremesinghe, Mahadev Satyanarayanan, Gregory R. Ganger, Erik Riedel, Anastassia Ailamaki
2004 conf
VSSN@MM
Larry Huston, Rahul Sukthankar, Jason Campbell, Padmanabhan Pillai
2004 conf
CVPR (2)
Derek Hoiem, Rahul Sukthankar, Henry Schneiderman, Larry Huston
2004 conf
CVPR (2)
Yan Ke, Rahul Sukthankar
2004 Misc conf
ICIG
Larry Huston, Rahul Sukthankar, Derek Hoiem, Jiaying Zhang
2004 A conf
IROS
Jason Campbell, Rahul Sukthankar, Illah R. Nourbakhsh
2004 A* conf
AAAI
Jason Campbell, Rahul Sukthankar, Illah R. Nourbakhsh
2003 conf
CVPR (2)
Tat-Jen Cham, James M. Rehg, Rahul Sukthankar, Gita Sukthankar
2002 conf
ICPR (3)
Brandon C. S. Sanders, Randal C. Nelson, Rahul Sukthankar
2002 C conf
ICARCV
James M. Rehg, Matthew Flagg, Tat-Jen Cham, Rahul Sukthankar, Gita Sukthankar
2002 A conf
IEEE Visualization
Han Chen, Rahul Sukthankar, Grant Wallace, Kai Li
2002 conf
AAAI/IAAI
Brandon C. S. Sanders, Randal C. Nelson, Rahul Sukthankar
2001 J jnl
IEEE Intell. Syst.
Rahul Sukthankar, Robert G. Stockton
2001 conf
CVPR (2)
Rahul Sukthankar, Tat-Jen Cham, Gita Sukthankar
2001 A* conf
ICCV
Rahul Sukthankar, Tat-Jen Cham, Gita Sukthankar, James M. Rehg, David Hsu, Thomas Leung
2001 A* conf
ICCV
Rahul Sukthankar, Robert G. Stockton, Matthew D. Mullin
2000 J jnl
Comput. Intell.
Shumeet Baluja, Vibhu O. Mittal, Rahul Sukthankar
2000 B conf
ICMI
Rahul Sukthankar, Robert G. Stockton, Matthew D. Mullin
2000 A* conf
ICML
Matthew D. Mullin, Rahul Sukthankar
2000 B conf
ICPR
Robert G. Stockton, Rahul Sukthankar
2000 B conf
FG
Terence Sim, Rahul Sukthankar, Matthew D. Mullin, Shumeet Baluja
1999 conf
AAAI/IAAI
Rahul Sukthankar, Robert G. Stockton
1999 conf
ASA/MA
Rahul Sukthankar, Antoine Brusseau, Ray Pelletier, Robert G. Stockton
1998 J jnl
Appl. Intell.
Rahul Sukthankar, Shumeet Baluja, John A. Hancock
1997 A* conf
ICRA
Rahul Sukthankar, Shumeet Baluja, John A. Hancock
tests/unit/test_apk_decompile_extractor.py
← Index tests/unit/test_apk_decompile_extractor.py python
"""
Unit tests for DecompileAPK extractor, export data, and ClickHouse schemas.

Tests the main DecompileAPK extractor class following the DecompileBinja test pattern.
All analysis is mocked — no JADX/apktool/Java installation required.
"""
import hashlib
import os
import tempfile
import zipfile

import pytest
from unittest.mock import MagicMock, patch, PropertyMock
from dataclasses import asdict

pytestmark = [pytest.mark.unit, pytest.mark.apk, pytest.mark.decompile]


def _create_fake_apk_file():
    """Create a minimal APK file for testing and return its path."""
    tmpdir = tempfile.mkdtemp()
    apk_path = os.path.join(tmpdir, "test.apk")
    with zipfile.ZipFile(apk_path, "w") as zf:
        zf.writestr("AndroidManifest.xml", b"<manifest/>")
        zf.writestr("classes.dex", b"dex\n035\x00" + b"\x00" * 100)
    return apk_path


# ============================================================================
# DecompileAPK Extractor Tests
# ============================================================================

class TestDecompileAPK:
    """Tests for the DecompileAPK extractor class."""

    def test_tag(self):
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        apk_path = _create_fake_apk_file()
        try:
            ext = DecompileAPK(apk_path, MagicMock())
            assert ext.tag() == "apk_decompiled"
        finally:
            os.unlink(apk_path)

    def test_get_clickhouse_table(self):
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        apk_path = _create_fake_apk_file()
        try:
            ext = DecompileAPK(apk_path, MagicMock())
            assert ext.get_clickhouse_table() is None
        finally:
            os.unlink(apk_path)

    def test_timeout_default(self):
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        apk_path = _create_fake_apk_file()
        try:
            ext = DecompileAPK(apk_path, MagicMock())
            assert ext.APK_DECOMPILE_TIMEOUT == 600
        finally:
            os.unlink(apk_path)

    def test_timeout_from_env(self):
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        apk_path = _create_fake_apk_file()
        try:
            with patch.dict(os.environ, {"APK_DECOMPILE_TIMEOUT": "900"}):
                ext = DecompileAPK(apk_path, MagicMock())
                assert ext.APK_DECOMPILE_TIMEOUT == 900
        finally:
            os.unlink(apk_path)

    def test_timeout_invalid_env(self):
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        apk_path = _create_fake_apk_file()
        try:
            with patch.dict(os.environ, {"APK_DECOMPILE_TIMEOUT": "not_a_number"}):
                ext = DecompileAPK(apk_path, MagicMock())
                assert ext.APK_DECOMPILE_TIMEOUT == 600
        finally:
            os.unlink(apk_path)

    def test_calculate_md5(self):
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        apk_path = _create_fake_apk_file()
        try:
            ext = DecompileAPK(apk_path, MagicMock())
            result = ext.calculate_md5("test_string")
            assert len(result) == 32
            assert result == hashlib.md5(b"test_string").hexdigest()
        finally:
            os.unlink(apk_path)

    def test_context_manager(self):
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        apk_path = _create_fake_apk_file()
        try:
            with DecompileAPK(apk_path, MagicMock()) as ext:
                assert ext is not None
        finally:
            os.unlink(apk_path)

    def test_cleanup_run(self):
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        apk_path = _create_fake_apk_file()
        try:
            ext = DecompileAPK(apk_path, MagicMock())
            ext.analyzer = MagicMock()
            ext.cleanup_run()
            assert ext.analyzer is None
        finally:
            os.unlink(apk_path)


# ============================================================================
# Export Data Tests
# ============================================================================

class TestPrepareExportData:
    """Tests for DecompileAPK.prepare_export_data() ClickHouse schemas."""

    def _make_extractor_with_results(self):
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        apk_path = _create_fake_apk_file()
        ext = DecompileAPK(apk_path, MagicMock())
        ext.analysis_results = {
            "sha256": "a" * 64,
            "sha1": "b" * 40,
            "md5": "c" * 32,
            "decompiled_content": [
                {
                    "decompiled_method_hash": "d" * 64,
                    "decompiled_method": "public void foo() {}",
                    "decompiled_method_type": "USER",
                    "decompiled_has_string_encryption": False,
                    "decompiled_has_reflection_calls": False,
                    "decompiled_excessive_goto_count": False,
                }
            ],
            "decompiled_refs": [
                {
                    "decompiled_method_hash": "d" * 64,
                    "smali_method_hash": "e" * 64,
                    "decompiled_class_name": "com.example.Foo",
                    "decompiled_method_name": "foo",
                    "decompiled_method_signature": "()V",
                    "decompiled_method_prototype": "void foo()",
                    "functions_caller": ["bar"],
                    "functions_call": ["baz"],
                }
            ],
            "smali_content": [
                {
                    "smali_method_hash": "e" * 64,
                    "smali_method": "invoke-virtual {p0}, Lfoo;->bar()V\nreturn-void",
                    "smali_method_type": "USER",
                    "smali_instructions_count": 10,
                    "smali_register_count": 3,
                    "smali_has_string_encryption": False,
                    "smali_has_reflection_calls": False,
                    "smali_excessive_goto_count": False,
                    "smali_flattened_score": 0.0,
                    "smali_mba_score": 0.0,
                }
            ],
            "smali_refs": [
                {
                    "smali_method_hash": "e" * 64,
                    "decompiled_method_hash": "d" * 64,
                    "smali_class_name": "com.example.Foo",
                    "smali_method_name": "foo",
                    "smali_method_signature": "()V",
                    "ssdeep_smali": None,
                    "tlsh_smali": None,
                }
            ],
            "similarity_metrics": [
                {
                    "smali_method_hash": "e" * 64,
                    "cyclomatic_complexity": 2,
                    "ssdeep_smali": None,
                    "tlsh_smali": None,
                    "ssdeep_smali_normalized": None,
                    "tlsh_smali_normalized": None,
                    "minhash": [],
                }
            ],
            "cfg": [
                {
                    "smali_method_hash": "e" * 64,
                    "cfg_topology_hash": b'\x01' * 16,
                    "block_count": 3,
                    "edge_count": 3,
                    "cfg_instructions_count": 10,
                    "call_count": 1,
                    "cyclomatic_complexity": 2,
                    "loop_count": 0,
                    "max_depth": 2,
                    "max_fan_out": 2,
                    "md_index_topdown": 12345,
                    "md_index_bottomup": 67890,
                    "prime_product_smali": 999,
                    "cfg_feature_tlsh": None,
                    "wl_minhash": [0] * 128,
                    "bb_features": [[5, 1, 0, 1, 1, 0, 0, 2]] * 3,
                    "cfg_adjacency": [0x00000001, 0x00000002],
                }
            ],
            "strings": [
                {
                    "string": "https://evil.example.com/payload",
                    "string_encoding": "UTF8",
                    "string_offset": 0,
                    "string_length": 31,
                    "string_entropy": 3.95,
                }
            ],
            "analysis_errors": [
                {
                    "class_name": "com.example.Foo",
                    "method_name": "bar",
                    "error_location": "jadx",
                    "error_message": "timeout",
                    "error_type": "TimeoutError",
                }
            ],
        }
        return ext, apk_path

    def test_returns_none_when_no_results(self):
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        apk_path = _create_fake_apk_file()
        try:
            ext = DecompileAPK(apk_path, MagicMock())
            assert ext.prepare_export_data("ClickHouseExporter") is None
        finally:
            os.unlink(apk_path)

    def test_multi_table_flag(self):
        ext, apk_path = self._make_extractor_with_results()
        try:
            export = ext.prepare_export_data("ClickHouseExporter")
            assert export["multi_table"] is True
        finally:
            os.unlink(apk_path)

    def test_all_table_keys_present(self):
        ext, apk_path = self._make_extractor_with_results()
        try:
            export = ext.prepare_export_data("ClickHouseExporter")
            assert "decompiled_content" in export
            assert "decompiled_refs" in export
            assert "smali_content" in export
            assert "smali_refs" in export
            assert "method_similarity_metrics" in export
            assert "strings_raw" in export
            assert "analysis_errors" in export
        finally:
            os.unlink(apk_path)

    def test_decompiled_content_schema(self):
        ext, apk_path = self._make_extractor_with_results()
        try:
            export = ext.prepare_export_data("ClickHouseExporter")
            dc = export["decompiled_content"]
            assert dc["table"] == "code_apk_decompiled_methods_content"
            assert len(dc["column_names"]) == 7
            assert len(dc["column_type_names"]) == 7
            assert "decompiled_method_hash" in dc["column_names"]
            assert "decompiled_method" in dc["column_names"]
            assert "analysis_date" in dc["column_names"]
            assert len(dc["data"]) == 1
            assert len(dc["data"][0]) == 7
        finally:
            os.unlink(apk_path)

    def test_decompiled_refs_schema(self):
        ext, apk_path = self._make_extractor_with_results()
        try:
            export = ext.prepare_export_data("ClickHouseExporter")
            dr = export["decompiled_refs"]
            assert dr["table"] == "code_apk_decompiled_methods_references"
            assert len(dr["column_names"]) == 10
            assert len(dr["column_type_names"]) == 10
            assert "sha256" in dr["column_names"]
            assert "sha1" not in dr["column_names"]
            assert "md5" not in dr["column_names"]
            assert "functions_caller" in dr["column_names"]
            assert "functions_call" in dr["column_names"]
        finally:
            os.unlink(apk_path)

    def test_smali_content_schema(self):
        ext, apk_path = self._make_extractor_with_results()
        try:
            export = ext.prepare_export_data("ClickHouseExporter")
            sc = export["smali_content"]
            assert sc["table"] == "code_apk_smali_methods_content"
            assert len(sc["column_names"]) == 11
            assert len(sc["column_type_names"]) == 11
            assert "smali_instructions_count" in sc["column_names"]
            assert "smali_register_count" in sc["column_names"]
            assert "smali_flattened_score" in sc["column_names"]
            assert "smali_mba_score" in sc["column_names"]
        finally:
            os.unlink(apk_path)

    def test_smali_refs_schema(self):
        ext, apk_path = self._make_extractor_with_results()
        try:
            export = ext.prepare_export_data("ClickHouseExporter")
            sr = export["smali_refs"]
            assert sr["table"] == "code_apk_smali_methods_references"
            assert len(sr["column_names"]) == 7
            assert len(sr["column_type_names"]) == 7
            assert "sha1" not in sr["column_names"]
            assert "md5" not in sr["column_names"]
            assert "ssdeep_smali" not in sr["column_names"]
            assert "tlsh_smali" not in sr["column_names"]
        finally:
            os.unlink(apk_path)

    def test_similarity_metrics_schema(self):
        ext, apk_path = self._make_extractor_with_results()
        try:
            export = ext.prepare_export_data("ClickHouseExporter")
            sm = export["method_similarity_metrics"]
            assert sm["table"] == "code_apk_method_similarity_metrics"
            assert len(sm["column_names"]) == 7
            assert "minhash" in sm["column_names"]
            assert "ssdeep_smali_normalized" in sm["column_names"]
            assert "tlsh_smali_normalized" in sm["column_names"]
            # cyclomatic_complexity moved to cfg table
            assert "cyclomatic_complexity" not in sm["column_names"]
            assert "block_count" not in sm["column_names"]
            assert "loop_count" not in sm["column_names"]
        finally:
            os.unlink(apk_path)

    def test_analysis_errors_schema(self):
        ext, apk_path = self._make_extractor_with_results()
        try:
            export = ext.prepare_export_data("ClickHouseExporter")
            ae = export["analysis_errors"]
            assert ae["table"] == "code_apk_analysis_errors"
            assert len(ae["column_names"]) == 9
            assert "error_hash" in ae["column_names"]
            assert "status" in ae["column_names"]
        finally:
            os.unlink(apk_path)

    def test_sha256_propagated_to_refs(self):
        ext, apk_path = self._make_extractor_with_results()
        try:
            export = ext.prepare_export_data("ClickHouseExporter")
            # Check that sha256 from analysis_results appears in ref rows
            dr_row = export["decompiled_refs"]["data"][0]
            assert dr_row[0] == "a" * 64  # sha256
            # sha1 and md5 no longer included in refs
            assert "sha1" not in export["decompiled_refs"]["column_names"]
            assert "md5" not in export["decompiled_refs"]["column_names"]
        finally:
            os.unlink(apk_path)

    def test_empty_tables_not_included(self):
        from redb.extractors.decompiler.DecompileAPK import DecompileAPK
        apk_path = _create_fake_apk_file()
        try:
            ext = DecompileAPK(apk_path, MagicMock())
            ext.analysis_results = {
                "sha256": "a" * 64,
                "sha1": "b" * 40,
                "md5": "c" * 32,
                "decompiled_content": [],
                "decompiled_refs": [],
                "smali_content": [],
                "smali_refs": [],
                "similarity_metrics": [],
                "cfg": [],
                "strings": [],
                "analysis_errors": [],
            }
            export = ext.prepare_export_data("ClickHouseExporter")
            assert export == {"multi_table": True}
        finally:
            os.unlink(apk_path)

    def test_non_clickhouse_exporter_returns_none(self):
        ext, apk_path = self._make_extractor_with_results()
        try:
            result = ext.prepare_export_data("ElasticsearchExporter")
            assert result is None
        finally:
            os.unlink(apk_path)


# ============================================================================
# Dataclass Tests
# ============================================================================

class TestAPKCodeAnalysisDataclasses:
    """Tests for the new APK code analysis dataclasses."""

    def test_decompiled_method_content(self):
        from redb.models.dataclasses import APKDecompiledMethodContent
        dc = APKDecompiledMethodContent(
            decompiled_method_hash="a" * 64,
            decompiled_method="public void foo() {}",
            decompiled_method_type="USER",
        )
        assert dc.decompiled_has_string_encryption is False
        assert dc.decompiled_has_reflection_calls is False
        assert dc.decompiled_excessive_goto_count is False

    def test_decompiled_method_content_populated(self):
        from redb.models.dataclasses import APKDecompiledMethodContent
        dc = APKDecompiledMethodContent(
            decompiled_method_hash="a" * 64,
            decompiled_method="public void foo() {}",
            decompiled_method_type="USER",
            decompiled_has_string_encryption=True,
            decompiled_has_reflection_calls=True,
            decompiled_excessive_goto_count=True,
        )
        assert dc.decompiled_has_string_encryption is True
        d = asdict(dc)
        assert d["decompiled_method_hash"] == "a" * 64

    def test_decompiled_method_reference(self):
        from redb.models.dataclasses import APKDecompiledMethodReference
        dr = APKDecompiledMethodReference(
            sha256="a" * 64,
            sha1="b" * 40,
            md5="c" * 32,
            decompiled_method_hash="d" * 64,
        )
        assert dr.functions_caller == []
        assert dr.functions_call == []
        assert dr.smali_method_hash is None

    def test_smali_method_content(self):
        from redb.models.dataclasses import APKSmaliMethodContent
        sc = APKSmaliMethodContent(
            smali_method_hash="e" * 64,
            smali_method="invoke-virtual {p0}, Lfoo;->bar()V",
            smali_method_type="USER",
            smali_instructions_count=5,
            smali_register_count=3,
        )
        assert sc.smali_instructions_count == 5
        assert sc.smali_register_count == 3

    def test_smali_method_reference(self):
        from redb.models.dataclasses import APKSmaliMethodReference
        sr = APKSmaliMethodReference(
            sha256="a" * 64,
            sha1="b" * 40,
            md5="c" * 32,
            smali_method_hash="e" * 64,
        )
        assert sr.decompiled_method_hash is None
        assert sr.ssdeep_smali is None
        assert sr.tlsh_smali is None

    def test_method_similarity_metrics(self):
        from redb.models.dataclasses import APKMethodSimilarityMetrics
        ms = APKMethodSimilarityMetrics(smali_method_hash="e" * 64)
        assert ms.cyclomatic_complexity is None
        assert ms.ssdeep_smali_normalized is None
        assert ms.tlsh_smali_normalized is None
        assert ms.minhash == []

    def test_code_analysis_error(self):
        from redb.models.dataclasses import APKCodeAnalysisError
        err = APKCodeAnalysisError(
            sha256="a" * 64,
            error_location="jadx",
            error_message="timeout",
        )
        assert err.class_name is None
        assert err.method_name is None
        assert err.error_type is None


# ============================================================================
# Tag Enum Tests
# ============================================================================

class TestAPKDecompiledTag:
    """Tests for the APK_DECOMPILED tag enum."""

    def test_tag_exists(self):
        from redb.extractors.enum import Tag
        assert hasattr(Tag, "APK_DECOMPILED")

    def test_tag_value(self):
        from redb.extractors.enum import Tag
        assert Tag.APK_DECOMPILED.value == "apk_decompiled"


# ============================================================================
# Worker Integration Tests
# ============================================================================

class TestAPKWorkerDecompileIntegration:
    """Tests that DecompileAPK is registered in workers.py."""

    def test_module_registered(self):
        """Verify DecompileAPK is discoverable via the extractor registry."""
        from redb.extractor_registry import get_extractor_class
        cls = get_extractor_class("DecompileAPK")
        assert cls is not None, "DecompileAPK not found in extractor registry"
        assert cls.__name__ == "DecompileAPK"

    def test_worker_apk_dispatch_includes_decompile(self):
        import inspect
        import redb.workers as workers
        source = inspect.getsource(workers.process_binary_file)
        assert "DecompileAPK" in source