Ram Sarkar

353 papers A 1B 4C 1Journal 277Unranked 70
YearRankTypeTitle / Venue / Authors
2026 J jnl
Int. J. Comput. Intell. Syst.
Asfak Ali, Akash Dutta, Dmitrii I. Kaplun, Sergei Romanov, Ram Sarkar
2026 J jnl
Netw. Model. Anal. Health Informatics Bioinform.
Ananya Saha, Gouranga Maity, Ram Sarkar
2026 J jnl
Evol. Syst.
Anurup Naskar, Shivam Singh, Ram Sarkar
2026 J jnl
Quantum Mach. Intell.
Soumyadip Sahoo, Diptarka Mandal, Asfak Ali, Dmitrii I. Kaplun, Sergei Romanov, Ram Sarkar
2026 J jnl
Int. J. Mach. Learn. Cybern.
Soumyajit Gayen, Sourajit Maity, Sujan Sarkar, Erik Cuevas, Ram Sarkar
2025 conf
DeLTA
Saptarshi Pani, Gouranga Maity, Dmitrii I. Kaplun, Alexander S. Voznesensky, Ram Sarkar
2025 conf
IPTA
Sayani Dhar, Sourajit Maity, Asfak Ali, Dmitrii I. Kaplun, Daria Sidorina, Ram Sarkar
2025 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Kunal Biswas, Shivakumara Palaiahnakote, Saumik Bhattacharya, Umapada Pal, Ram Sarkar
2025 conf
AIIIMA
Jotiraditya Banerjee, Rajdeep Pal, Ram Sarkar
2025 conf
MECO
Sourajit Maity, Vyacheslav Gulvanskii, Dmitrii I. Kaplun, Ram Sarkar
2025 J jnl
Multim. Tools Appl.
Sk Mohiuddin, Ayush Roy, Saptarshi Pani, Samir Malakar, Ram Sarkar
2025 J jnl
Biomed. Signal Process. Control.
Daria Valenkova, Asya I. Lyanova, Aleksandr Sinitca, Ram Sarkar, Dmitry I. Kaplun
2025 J jnl
Multim. Tools Appl.
Manish Hazra, Nandita Gautam, Jaydip Dey, Ram Sarkar
2025 J jnl
J. Intell. Syst.
Akash Halder, Arup Sau, Surya Majumder, Dmitrii I. Kaplun, Ram Sarkar
2025 conf
MICCAI (13)
Debasmit Roy, Srinjoy Dutta, Soham Bose, Friedhelm Schwenker, Ram Sarkar
2025 J jnl
Evol. Intell.
Erik Cuevas, Oscar A. González-Sánchez, Ignacio Gómez-Gracián, Daniel Zaldivar, Alma Rodríguez-Vázquez, Ram Sarkar
2025 conf
ICONIP (3)
Asfak Ali, Annada Dash, Dmitrii I. Kaplun, Sergei Romanov, Ram Sarkar
2025 J jnl
Multim. Tools Appl.
Nandita Gautam, Sohini Ghosh, Ram Sarkar
2025 conf
SIPAIM
Saptarshi Pani, Asya I. Lyanova, Dmitrii I. Kaplun, Ram Sarkar
2025 conf
MRAC@MM
Om Karmakar, Sk Mohiuddin, Asfak Ali, Dmitrii I. Kaplun, Sergei Romanov, Ram Sarkar
2025 conf
ACPR (2)
Saptarshi Pani, Asya I. Lyanova, Dmitrii I. Kaplun, Ram Sarkar
2025 conf
ICANN (2)
Sanchita Das, Asfak Ali, Dmitrii I. Kaplun, Sergei Antonov, Ram Sarkar
2025 conf
MIUA (3)
Utathya Aich, Ritabrata Roy, Alexander Eroshkin, Dmitrii I. Kaplun, Ram Sarkar
2025 conf
VISIGRAPP (2): VISAPP
Ayush Roy, Sk Mohiuddin, Maxim V. Minenko, Dmitrii I. Kaplun, Ram Sarkar
2025 conf
EANN (1)
Asfak Ali, Jotiraditya Banerjee, Debam Saha, Akash Dutta, Friedhelm Schwenker, Ram Sarkar
2025 conf
CAI
Dipika Ray, Sujan Sarkar, Diego Oliva, Oscar Ramos-Soto, Ram Sarkar
2025 C conf
ISPA
Asfak Ali, Jotiraditya Banerjee, Vyacheslav Gulvanskii, Dmitry I. Kaplun, Ram Sarkar
2025 J jnl
Appl. Soft Comput.
Erik Cuevas, Oscar A. González-Sánchez, Francisco Orozco-Jiménez, Daniel Zaldivar, Alma Rodríguez-Vázquez, Ram Sarkar
2025 J jnl
Appl. Soft Comput.
Asfak Ali, Rajdeep Pal, Aishik Paul, Ram Sarkar
2025 conf
SIPAIM
Ritabrata Roy, Utathya Aich, Asya I. Lyanova, Dmitrii I. Kaplun, Ram Sarkar
2025 J jnl
Appl. Soft Comput.
Anurup Naskar, Soumyajit Ghosh, Mahantapas Kundu, Ram Sarkar
2025 B conf
CBMS
Saptarshi Pani, Gouranga Maity, Irina I. Shpakovskaya, Dmitrii I. Kaplun, Ram Sarkar
2025 conf
DeLTA
Diptarka Mandal, Sujan Sarkar, Siddhant Majumder, Dmitrii I. Kaplun, Daria Sidorina, Ram Sarkar
2025 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Kunal Biswas, Shivakumara Palaiahnakote, Umapada Pal, Ram Sarkar
2025 J jnl
IEEE Trans. Artif. Intell.
Surya Majumder, Aishik Paul, Friedhelm Schwenker, Ram Sarkar
2025 J jnl
Neural Comput. Appl.
Soumyajit Gayen, Sourajit Maity, Pawan Kumar Singh, Ram Sarkar
2025 J jnl
Prog. Artif. Intell.
Pushan Mondal, Apu Sarkar, Ram Sarkar
2025 conf
MECO
Gouranga Maity, Souvik Pramanik, Diptarka Mandal, Dmitrii I. Kaplun, Vyacheslav Gulvanskii, Ram Sarkar
2024 J jnl
Netw. Model. Anal. Health Informatics Bioinform.
Mridul Biswas, Ritodeep Sikdar, Ram Sarkar, Mahantapas Kundu
2024 conf
MECO
Soham Chakraborty, Ayush Roy, Payel Pramanik, Daria Valenkova, Ram Sarkar
2024 J jnl
CoRR
Soham Chakraborty, Ayush Roy, Payel Pramanik, Daria Valenkova, Ram Sarkar
2024 conf
MECO
Triyas Ghosh, Soumyajit Gayen, Sourajit Maity, Daria Valenkova, Ram Sarkar
2024 J jnl
IEEE Access
Erik Cuevas, Carlos Guzmán-Rosales, Marco Pérez-Cisneros, Ram Sarkar
2024 conf
ANNPR
Akash Halder, Sugata Laha, Saptarshi Bandyopadhyay, Friedhelm Schwenker, Ram Sarkar
2024 J jnl
IEEE Trans. Artif. Intell.
Ayush Roy, Sk Mohiuddin, Ram Sarkar
2024 conf
ISBI
Ayush Roy, Sujan Sarkar, Sohom Ghosal, Dmitrii I. Kaplun, Asya I. Lyanova, Ram Sarkar
2024 J jnl
CoRR
Ayush Roy, Sujan Sarkar, Sohom Ghosal, Dmitry I. Kaplun, Asya I. Lyanova, Ram Sarkar
2024 J jnl
J. Ambient Intell. Humaniz. Comput.
Pawan Kumar Singh, Ram Sarkar, Vikrant Bhateja, Mita Nasipuri
2024 J jnl
CoRR
Ayush Roy, Payel Pramanik, Dmitrii I. Kaplun, Sergei Antonov, Ram Sarkar
2024 conf
ISBI
Ayush Roy, Payel Pramanik, Dmitrii I. Kaplun, Sergei Antonov, Ram Sarkar
2024 conf
MICAD
Triyas Ghosh, Soham Chakraborty, Dmitrii I. Kaplun, Vyacheslav Gulvanskii, Ram Sarkar
2024 B conf
ICIP
Sayan Acharya, Aditya Ganguly, Ram Sarkar, Abin Jose
2024 J jnl
SN Comput. Sci.
Rajdeep Bhattacharya, Rajonya De, Anuran Chakraborty, Ram Sarkar
2024 conf
ICPR (28)
Amartya Ray, Soumyajit Gayen, Dmitrii I. Kaplun, Ram Sarkar
2024 conf
CogMI
Surya Majumder, Kushaj Mallick, Wrick Pal, Somenath Chakraborty, Ram Sarkar
2024 J jnl
IEEE Trans. Instrum. Meas.
Ayush Roy, Payel Pramanik, Ram Sarkar
2024 B conf
CBMS
Ayush Roy, Anurag Bhattacharjee, Diego Oliva, Oscar Ramos-Soto, Francisco Javier Alvarez Padilla, Ram Sarkar
2024 J jnl
CoRR
Ayush Roy, Anurag Bhattacharjee, Diego Oliva, Oscar Ramos-Soto, Francisco Javier Alvarez Padilla, Ram Sarkar
2024 J jnl
CoRR
Ayush Roy, Payel Pramanik, Sohom Ghosal, Daria Valenkova, Dmitry I. Kaplun, Ram Sarkar
2024 conf
MIUA (1)
Ayush Roy, Payel Pramanik, Sohom Ghosal, Daria Valenkova, Dmitrii I. Kaplun, Ram Sarkar
2024 conf
ICPR (34)
Asfak Ali, Arya Pandit, Shirshendu Mandal, Srinjan Bhattacharjee, Sauptik Maiti, Suvojit Acharjee, Ram Sarkar, Sheli Sinha Chaudhuri, Sos S. Agaian, Khalifa Djemal
2024 J jnl
Multim. Tools Appl.
Asfak Ali, Ram Sarkar, Debesh Kumar Das
2024 J jnl
Multim. Tools Appl.
Sourajit Maity, Debam Saha, Pawan Kumar Singh, Ram Sarkar
2024 J jnl
Neural Comput. Appl.
Nandita Gautam, Abhishek Basu, Ram Sarkar
2024 J jnl
IEEE Trans. Artif. Intell.
Debasmit Roy, Rishav Pramanik, Ram Sarkar
2024 J jnl
Multim. Tools Appl.
Somnath Chatterjee, Debyarati Saha, Shibaprasad Sen, Diego Oliva, Ram Sarkar
2024 J jnl
Multim. Tools Appl.
Sayan Mondal, Pratyay De, Samir Malakar, Ram Sarkar
2024 conf
MICAD
Srinjan Dutta, Jibesh Roy, Diptarka Mandal, Dmitrii I. Kaplun, Irina I. Shpakovskaya, Ram Sarkar
2024 conf
SIPAIM
Sujan Sarkar, Saptarshi Pani, Alexander S. Voznesensky, Dmitrij I. Kaplun, Ram Sarkar
2024 J jnl
Multim. Tools Appl.
Trinav Bhattacharyya, Bitanu Chatterjee, Ram Sarkar, Mahantapas Kundu
2024 conf
SIPAIM
Sujan Sarkar, Siddhant Majumder, Diptarka Mandal, Vyacheslav Gulvanskii, Dmitrii I. Kaplun, Ram Sarkar
2024 J jnl
J. King Saud Univ. Comput. Inf. Sci.
Soumyajit Gayen, Sourajit Maity, Pawan Kumar Singh, Zong Woo Geem, Ram Sarkar
2024 J jnl
Discov. Artif. Intell.
Arpan Basu, Rishav Pramanik, Ram Sarkar
2024 J jnl
Pattern Recognit.
Asfak Ali, Ram Sarkar, Sheli Sinha Chaudhuri
2023 conf
ACPR (2)
Kunal Biswas, Palaiahnakote Shivakumara, Umapada Pal, Ram Sarkar
2023 J jnl
IEEE Access
Karla Avila, Erik Cuevas, Marco Pérez, Ram Sarkar
2023 J jnl
Multim. Tools Appl.
Sk Mohiuddin, Samir Malakar, Munish Kumar, Ram Sarkar
2023 J jnl
Multim. Tools Appl.
Soham Chattopadhyay, Arijit Dey, Pawan Kumar Singh, Ali Ahmadian, Ram Sarkar
2023 J jnl
Neural Comput. Appl.
Sk Mohiuddin, Khalid Hassan Sheikh, Samir Malakar, Juan D. Velásquez, Ram Sarkar
2023 J jnl
Eng. Appl. Artif. Intell.
Debjit Sarkar, Sourodeep Roy, Samir Malakar, Ram Sarkar
2023 J jnl
Appl. Intell.
Erik Cuevas, Héctor Escobar, Ram Sarkar, Heba F. Eid
2023 J jnl
Expert Syst. J. Knowl. Eng.
Bitanu Chatterjee, Trinav Bhattacharyya, Kushal Kanti Ghosh, Agneet Chatterjee, Ram Sarkar
2023 J jnl
J. Ambient Intell. Humaniz. Comput.
Pratik Bhowal, Subhankar Sen, Ram Sarkar
2023 J jnl
Multim. Tools Appl.
Sk Mohiuddin, Samir Malakar, Ram Sarkar
2023 J jnl
Expert Syst. Appl.
Rishav Pramanik, Payel Pramanik, Ram Sarkar
2023 conf
CICBA (2)
Shib Sankar Sarkar, Md. Salman Ansari, Kalyani Mali, Ram Sarkar
2023 J jnl
Multim. Tools Appl.
Sagnik Ganguly, Sanmit Mandal, Samir Malakar, Ram Sarkar
2023 J jnl
Neural Comput. Appl.
Apu Sarkar, S. K. Sabbir Hossain, Ram Sarkar
2023 J jnl
Biomed. Signal Process. Control.
Agnish Bhattacharya, Biswajit Saha, Soham Chattopadhyay, Ram Sarkar
2023 J jnl
Neural Comput. Appl.
Payel Pramanik, Souradeep Mukhopadhyay, Seyedali Mirjalili, Ram Sarkar
2023 J jnl
J. Comput. Sci.
Ritam Guha, Kushal Kanti Ghosh, Suman Kumar Bera, Ram Sarkar, Seyedali Mirjalili
2023 J jnl
Frontiers Neuroinformatics
Dmitrii I. Kaplun, Mikhail Bogachev, Pawan Kumar Singh, Ram Sarkar
2023 J jnl
IEEE Trans. Fuzzy Syst.
Pratik Bhowal, Subhankar Sen, Jin Hee Yoon, Zong Woo Geem, Ram Sarkar
2023 J jnl
Expert Syst. Appl.
Samriddha Majumdar, Payel Pramanik, Ram Sarkar
2023 J jnl
Multim. Tools Appl.
Anubhab Das, Arka Choudhuri, Arpan Basu, Ram Sarkar
2023 J jnl
Vis. Comput.
Samir Malakar, Samanway Sahoo, Anuran Chakraborty, Ram Sarkar, Mita Nasipuri
2023 J jnl
Neural Comput. Appl.
Apu Sarkar, S. K. Sabbir Hossain, Ram Sarkar
2023 J jnl
Soft Comput.
Souradeep Mukhopadhyay, S. K. Sabbir Hossain, Samir Malakar, Erik Cuevas, Ram Sarkar
2023 J jnl
Neural Comput. Appl.
Ashis Paul, Arpan Basu, Mufti Mahmud, M. Shamim Kaiser, Ram Sarkar
2023 J jnl
Multim. Tools Appl.
Avirup Bhattacharyya, Avigyan Bhattacharya, Sourajit Maity, Pawan Kumar Singh, Ram Sarkar
2023 J jnl
Expert Syst. Appl.
Anurup Naskar, Rishav Pramanik, S. K. Sabbir Hossain, Seyedali Mirjalili, Ram Sarkar
2023 J jnl
Eng. Appl. Artif. Intell.
Rishav Pramanik, Bihan Banerjee, Ram Sarkar
2023 J jnl
J. Ambient Intell. Humaniz. Comput.
Sourodeep Roy, Debjit Sarkar, Samir Malakar, Ram Sarkar
2023 J jnl
J. King Saud Univ. Comput. Inf. Sci.
Samir Malakar, Swaraj Sen, Sergei Romanov, Dmitry I. Kaplun, Ram Sarkar
2023 J jnl
Comput. Biol. Medicine
Shyam Marjit, Trinav Bhattacharyya, Bitanu Chatterjee, Ram Sarkar
2023 J jnl
Eng. Appl. Artif. Intell.
Rishav Pramanik, Ritodeep Sikdar, Ram Sarkar
2022 J jnl
Expert Syst. Appl.
Bitanu Chatterjee, Shameem Ahmed, Trinav Bhattacharyya, Ram Sarkar
2022 J jnl
Expert Syst. Appl.
Arya Sarkar, Avinandan Banerjee, Pawan Kumar Singh, Ram Sarkar
2022 J jnl
ACM Trans. Asian Low Resour. Lang. Inf. Process.
Pawan Kumar Singh, Ram Sarkar, Ajith Abraham, Mita Nasipuri
2022 J jnl
SN Comput. Sci.
Ankan Bhattacharyya, Rajatsubhra Chakraborty, Soumyajit Saha, Shibaprasad Sen, Ram Sarkar, Kaushik Roy
2022 J jnl
Comput. Methods Programs Biomed.
Rishav Pramanik, Momojit Biswas, Shibaprasad Sen, Luis Antônio de Souza Júnior, João Paulo Papa, Ram Sarkar
2022 J jnl
Multim. Tools Appl.
S. K. Sabbir Hossain, Souradeep Mukhopadhyay, Biswarup Ray, Sudipta Kumar Ghosal, Ram Sarkar
2022 J jnl
J. Ambient Intell. Humaniz. Comput.
Pratik Bhowal, Debanshu Banerjee, Samir Malakar, Ram Sarkar
2022 conf
MICCAI (8)
Hritam Basak, Sagnik Ghosal, Ram Sarkar
2022 J jnl
CoRR
Hritam Basak, Sagnik Ghosal, Ram Sarkar
2022 J jnl
Comput. Biol. Medicine
Rohit Kundu, Soham Chattopadhyay, Erik Cuevas, Ram Sarkar
2022 J jnl
CoRR
Rishav Pramanik, Sourodip Sarkar, Ram Sarkar
2022 J jnl
Appl. Soft Comput.
Rishav Pramanik, Sourodip Sarkar, Ram Sarkar
2022 J jnl
Comput. Biol. Medicine
Alma Rodríguez, Erik Cuevas, Daniel Zaldivar, Bernardo Morales-Castañeda, Ram Sarkar, Essam H. Houssein
2022 J jnl
Expert Syst. Appl.
Essam H. Houssein, Mohamed A. Mahdy, Doaa Shebl, Awais Manzoor, Ram Sarkar, Waleed M. Mohamed
2022 J jnl
Neural Comput. Appl.
Avinandan Banerjee, Sayantan Roy, Rohit Kundu, Pawan Kumar Singh, Vikrant Bhateja, Ram Sarkar
2022 J jnl
Neural Comput. Appl.
Ashis Paul, Rishav Pramanik, Samir Malakar, Ram Sarkar
2022 J jnl
Complex Intell. Syst.
Bodhan Chakraborty, Agneet Chatterjee, Samir Malakar, Ram Sarkar
2022 J jnl
Appl. Soft Comput.
Subhrajit Dey, Rajarshi Roychoudhury, Samir Malakar, Ram Sarkar
2022 J jnl
Soft Comput.
Soulib Ghosh, Khalid Hassan Sheikh, Hussain Ali Khan, Ankur Manna, Showmik Bhowmik, Ram Sarkar
2022 J jnl
Ecol. Informatics
Shreyan Ganguly, Pratik Bhowal, Diego Oliva, Ram Sarkar
2022 J jnl
Expert Syst. Appl.
Shameem Ahmed, Khalid Hassan Sheikh, Seyedali Mirjalili, Ram Sarkar
2022 J jnl
Comput. Biol. Medicine
Somnath Chatterjee, Shreya Biswas, Arindam Majee, Shibaprasad Sen, Diego Oliva, Ram Sarkar
2022 J jnl
Biomed. Signal Process. Control.
Avinandan Banerjee, Arya Sarkar, Sayantan Roy, Pawan Kumar Singh, Ram Sarkar
2022 J jnl
Expert Syst. Appl.
Arpan Basu, Khalid Hassan Sheikh, Erik Cuevas, Ram Sarkar
2022 J jnl
IEEE ACM Trans. Comput. Biol. Bioinform.
Ritabrata Sanyal, Devroop Kar, Ram Sarkar
2022 J jnl
Int. J. Comput. Intell. Syst.
Debanshu Banerjee, Pratik Bhowal, Samir Malakar, Erik Cuevas, Marco Antonio Pérez Cisneros, Ram Sarkar
2022 J jnl
Expert Syst. Appl.
Subhrajit Dey, Rajdeep Bhattacharya, Samir Malakar, Friedhelm Schwenker, Ram Sarkar
2022 J jnl
Comput. Biol. Medicine
Soham Chattopadhyay, Arijit Dey, Pawan Kumar Singh, Ram Sarkar
2022 J jnl
Multim. Tools Appl.
Rohit Kundu, Pawan Kumar Singh, Massimiliano Ferrara, Ali Ahmadian, Ram Sarkar
2022 J jnl
Multim. Tools Appl.
Ritam Guha, Imran Alam, Suman Kumar Bera, Neeraj Kumar, Ram Sarkar
2022 J jnl
Soft Comput.
Ali Hussain Khan, Shameem Ahmed, Suman Kumar Bera, Seyedali Mirjalili, Diego Oliva, Ram Sarkar
2022 J jnl
Expert Syst. Appl.
Pratik Bhowal, Subhankar Sen, Juan D. Velásquez, Ram Sarkar
2022 J jnl
Neural Comput. Appl.
Avishek Garain, Biswarup Ray, Fabio Giampaolo, Juan D. Velásquez, Pawan Kumar Singh, Ram Sarkar
2022 J jnl
IEEE Access
Ritam Guha, Soulib Ghosh, Kushal Kanti Ghosh, Erik Cuevas, Marco Antonio Pérez Cisneros, Ram Sarkar
2022 J jnl
Multim. Tools Appl.
Riktim Mondal, Samir Malakar, Elisa H. Barney Smith, Ram Sarkar
2022 J jnl
Multim. Tools Appl.
Neelotpal Chakraborty, Arkoprobho Mitra, Ayush Choudhury, Ayatullah Faruk Mollah, Subhadip Basu, Ram Sarkar
2022 J jnl
J. Ambient Intell. Humaniz. Comput.
Chiradeep Dey, Rajarshi Bose, Kushal Kanti Ghosh, Samir Malakar, Ram Sarkar
2022 J jnl
CoRR
Hritam Basak, Rohit Kundu, Ram Sarkar
2022 J jnl
Pattern Recognit.
Hritam Basak, Rohit Kundu, Ram Sarkar
2022 J jnl
Comput. Biol. Medicine
Soham Chattopadhyay, Arijit Dey, Pawan Kumar Singh, Diego Oliva, Erik Cuevas, Ram Sarkar
2022 J jnl
IEEE Internet Things J.
Sagnik Ghosal, Mainak Sarkar, Ram Sarkar
2022 J jnl
Multim. Tools Appl.
Biswarup Ray, Soulib Ghosh, Shameem Ahmed, Ram Sarkar, Mita Nasipuri
2022 J jnl
Int. J. Intell. Syst.
Soumitri Chattopadhyay, Rohit Kundu, Pawan Kumar Singh, Seyedali Mirjalili, Ram Sarkar
2022 J jnl
Multim. Tools Appl.
Subhrajit Dey, Rajarshi Roychoudhury, Samir Malakar, Ram Sarkar
2022 J jnl
Expert Syst. Appl.
Shreyan Ganguly, Aditya Ganguly, Sk Mohiuddin, Samir Malakar, Ram Sarkar
2022 J jnl
Pattern Anal. Appl.
Shreyan Ganguly, Sk Mohiuddin, Samir Malakar, Erik Cuevas, Ram Sarkar
2022 J jnl
Int. J. Comput. Intell. Syst.
Debanshu Banerjee, Pratik Bhowal, Samir Malakar, Eirk Cuevas, Marco Antonio Pérez Cisneros, Ram Sarkar
2021 J jnl
Sensors
Moumita Mandal, Pawan Kumar Singh, Muhammad Fazal Ijaz, Jana Shafi, Ram Sarkar
2021 J jnl
Appl. Intell.
Shibaprasad Sen, Soumyajit Saha, Somnath Chatterjee, Seyedali Mirjalili, Ram Sarkar
2021 J jnl
Expert Syst. J. Knowl. Eng.
Pawan Kumar Singh, Iman Chatterjee, Ram Sarkar, Elisa H. Barney Smith, Mita Nasipuri
2021 J jnl
Expert Syst. Appl.
Debanshu Banerjee, Bitanu Chatterjee, Pratik Bhowal, Trinav Bhattacharyya, Samir Malakar, Ram Sarkar
2021 J jnl
Multim. Tools Appl.
Suman Kumar Bera, Soulib Ghosh, Showmik Bhowmik, Ram Sarkar, Mita Nasipuri
2021 J jnl
J. Inf. Secur. Appl.
Agneet Chatterjee, Soulib Ghosh, Anuran Chakraborty, Sudipta Kumar Ghosal, Ram Sarkar
2021 J jnl
Neural Comput. Appl.
Mrityunjoy Dey, Shoif Md Mia, Navonil Sarkar, Archan Bhattacharya, Soham Roy, Samir Malakar, Ram Sarkar
2021 J jnl
Multim. Tools Appl.
Shamik Majumder, Subhrangshu Ghosh, Samir Malakar, Ram Sarkar, Mita Nasipuri
2021 J jnl
Knowl. Based Syst.
Shameem Ahmed, Kushal Kanti Ghosh, Seyedali Mirjalili, Ram Sarkar
2021 conf
CVIP (2)
Neelotpal Chakraborty, Ayatullah Faruk Mollah, Subhadip Basu, Ram Sarkar
2021 J jnl
Multim. Tools Appl.
Akash Saha, Agneet Chatterjee, Soulib Ghosh, Neeraj Kumar, Ram Sarkar
2021 J jnl
Appl. Soft Comput.
Biswarup Ray, Avishek Garain, Ram Sarkar
2021 J jnl
Neural Comput. Appl.
Samir Malakar, Ram Sarkar, Subhadip Basu, Mahantapas Kundu, Mita Nasipuri
2021 J jnl
Trans. Emerg. Telecommun. Technol.
Sudipta Kumar Ghosal, Souradeep Mukhopadhyay, S. K. Sabbir Hossain, Ram Sarkar
2021 J jnl
Expert Syst. Appl.
Shemim Begum, Ram Sarkar, Debasis Chakraborty, Sagnik Sen, Ujjwal Maulik
2021 J jnl
Multim. Tools Appl.
Neelotpal Chakraborty, Agneet Chatterjee, Pawan Kumar Singh, Ayatullah Faruk Mollah, Ram Sarkar
2021 J jnl
Multim. Tools Appl.
Showmik Bhowmik, Soumyadeep Kundu, Ram Sarkar
2021 J jnl
Multim. Tools Appl.
Indra Narayan Dutta, Neelotpal Chakraborty, Ayatullah Faruk Mollah, Subhadip Basu, Ram Sarkar
2021 J jnl
ACM Trans. Asian Low Resour. Lang. Inf. Process.
Shibaprasad Sen, Ankan Bhattacharyya, Ram Sarkar, Kaushik Roy
2021 J jnl
Big Data Res.
Soham Das, Soumya Deep Roy, Samir Malakar, Juan D. Velásquez, Ram Sarkar
2021 J jnl
Neural Comput. Appl.
Ritam Guha, Hussain Ali Khan, Pawan Kumar Singh, Ram Sarkar, Debotosh Bhattacharjee
2021 J jnl
Comput. Biol. Medicine
Rohit Kundu, Pawan Kumar Singh, Seyedali Mirjalili, Ram Sarkar
2021 J jnl
Multim. Tools Appl.
Soulib Ghosh, Agneet Chatterjee, Shibaprasad Sen, Neeraj Kumar, Ram Sarkar
2021 J jnl
IEEE J. Biomed. Health Informatics
Pratik Bhowal, Subhankar Sen, Jin Hee Yoon, Zong Woo Geem, Ram Sarkar
2021 J jnl
Comput. Biol. Medicine
Subhrajit Dey, Rajdeep Bhattacharya, Samir Malakar, Seyedali Mirjalili, Ram Sarkar
2021 J jnl
Multim. Tools Appl.
Manosij Ghosh, Kushal Kanti Ghosh, Showmik Bhowmik, Ram Sarkar
2021 J jnl
Sensors
Soumya Deep Roy, Soham Das, Devroop Kar, Friedhelm Schwenker, Ram Sarkar
2021 J jnl
Artif. Intell. Rev.
Tauseef Khan, Ram Sarkar, Ayatullah Faruk Mollah
2021 J jnl
Evol. Intell.
Ritam Guha, Manosij Ghosh, Souvik Kapri, Sushant Shaw, Shyok Mutsuddi, Vikrant Bhateja, Ram Sarkar
2021 J jnl
Neural Comput. Appl.
Avishek Garain, Arpan Basu, Fabio Giampaolo, Juan D. Velásquez, Ram Sarkar
2021 J jnl
Expert Syst. Appl.
Suman Kumar Bera, Soumyadeep Kundu, Neeraj Kumar, Ram Sarkar
2021 conf
CICBA
Sk Mohiuddin, Samir Malakar, Ram Sarkar
2021 J jnl
Sensors
Debadyuti Mukherjee, Koustav Dhar, Friedhelm Schwenker, Ram Sarkar
2021 J jnl
Comput. Electr. Eng.
Sudipta Kumar Ghosal, Souradeep Mukhopadhyay, S. K. Sabbir Hossain, Ram Sarkar
2021 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Avinandan Banerjee, Pawan Kumar Singh, Ram Sarkar
2021 J jnl
Expert Syst. Appl.
Avishek Garain, Pawan Kumar Singh, Ram Sarkar
2021 J jnl
IEEE Access
Avishek Garain, Biswarup Ray, Pawan Kumar Singh, Ali Ahmadian, Norazak Senu, Ram Sarkar
2021 J jnl
Multim. Tools Appl.
Dibyajyoti Dhar, Avishek Garain, Pawan Kumar Singh, Ram Sarkar
2021 J jnl
Appl. Soft Comput.
Rajarshi Bandyopadhyay, Arpan Basu, Erik Cuevas, Ram Sarkar
2021 J jnl
Sensors
Subhranil Kundu, Samir Malakar, Zong Woo Geem, Yoon Young Moon, Pawan Kumar Singh, Ram Sarkar
2021 J jnl
J. Intell. Syst.
Shemim Begum, Ram Sarkar, Debasis Chakraborty, Ujjwal Maulik
2021 J jnl
Multim. Syst.
Sudipta Kumar Ghosal, Agneet Chatterjee, Ram Sarkar
2021 J jnl
Multim. Tools Appl.
Biswarup Ray, Souradeep Mukhopadhyay, S. K. Sabbir Hossain, Sudipta Kumar Ghosal, Ram Sarkar
2021 J jnl
Neural Comput. Appl.
Shameem Ahmed, Kushal Kanti Ghosh, Laura García-Hernández, Ajith Abraham, Ram Sarkar
2021 J jnl
Comput. Electr. Eng.
Soumyadeep Thakur, Anuran Chakraborty, Rajonya De, Neeraj Kumar, Ram Sarkar
2021 J jnl
J. Ambient Intell. Humaniz. Comput.
Neelotpal Chakraborty, Soumyadeep Kundu, Sayantan Paul, Ayatullah Faruk Mollah, Subhadip Basu, Ram Sarkar
2021 J jnl
Vis. Comput.
Soulib Ghosh, Agneet Chatterjee, Pawan Kumar Singh, Showmik Bhowmik, Ram Sarkar
2021 J jnl
Appl. Soft Comput.
Anuran Chakraborty, Kushal Kanti Ghosh, Rajonya De, Erik Cuevas, Ram Sarkar
2021 J jnl
Algorithms
Subhrajit Dey, Rajdeep Bhattacharya, Friedhelm Schwenker, Ram Sarkar
2021 J jnl
Knowl. Based Syst.
Alberto Luque, Erik Cuevas, Marco Antonio Pérez Cisneros, Fernando Fausto, Arturo Valdivia-Gonzalez, Ram Sarkar
2021 J jnl
Appl. Soft Comput.
Manosij Ghosh, Sagnik Sen, Ram Sarkar, Ujjwal Maulik
2021 J jnl
Remote. Sens.
Rukhshanda Hussain, Yash Karbhari, Muhammad Fazal Ijaz, Marcin Wozniak, Pawan Kumar Singh, Ram Sarkar
2021 J jnl
Neural Comput. Appl.
Kushal Kanti Ghosh, Ritam Guha, Suman Kumar Bera, Neeraj Kumar, Ram Sarkar
2021 J jnl
Multim. Tools Appl.
Souradeep Mukhopadhyay, S. K. Sabbir Hossain, Sudipta Kumar Ghosal, Ram Sarkar
2021 J jnl
CoRR
Rajarshi Bandyopadhyay, Rohit Kundu, Diego Oliva, Ram Sarkar
2021 J jnl
Knowl. Based Syst.
Rajarshi Bandyopadhyay, Rohit Kundu, Diego Oliva, Ram Sarkar
2021 J jnl
Expert Syst. Appl.
Kushal Kanti Ghosh, Shemim Begum, Aritra Sardar, Sukdev Adhikary, Manosij Ghosh, Munish Kumar, Ram Sarkar
2021 J jnl
Multim. Tools Appl.
Saikat Chakraborty, Riktim Mondal, Pawan Kumar Singh, Ram Sarkar, Debotosh Bhattacharjee
2021 J jnl
Multim. Tools Appl.
Rajdeep Bhattacharya, Samir Malakar, Soulib Ghosh, Showmik Bhowmik, Ram Sarkar
2021 J jnl
IEEE Trans. Instrum. Meas.
Riktim Mondal, Showmik Bhowmik, Ram Sarkar
2020 J jnl
Neural Comput. Appl.
Samir Malakar, Manosij Ghosh, Showmik Bhowmik, Ram Sarkar, Mita Nasipuri
2020 J jnl
IEEE Access
Arijit Dey, Soham Chattopadhyay, Pawan Kumar Singh, Ali Ahmadian, Massimiliano Ferrara, Ram Sarkar
2020 J jnl
IEEE Access
Aankit Das, Samarpan Guha, Pawan Kumar Singh, Ali Ahmadian, Norazak Senu, Ram Sarkar
2020 J jnl
CoRR
Ritam Guha, Manosij Ghosh, Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2020 J jnl
CoRR
Pawan Kumar Singh, Supratim Das, Ram Sarkar, Mita Nasipuri
2020 J jnl
Int. J. Comput. Vis. Image Process.
Roopkatha Samanta, Soulib Ghosh, Agneet Chatterjee, Ram Sarkar
2020 J jnl
J. Intell. Syst.
Suman Kumar Bera, Radib Kar, Souvik Saha, Akash Chakrabarty, Sagnik Lahiri, Samir Malakar, Ram Sarkar
2020 J jnl
Pattern Recognit. Lett.
Shibaprasad Sen, Shubham Chowdhury, Mridul Mitra, Friedhelm Schwenker, Ram Sarkar, Kaushik Roy
2020 J jnl
Medical Biol. Eng. Comput.
Kushal Kanti Ghosh, Soulib Ghosh, Sagnik Sen, Ram Sarkar, Ujjwal Maulik
2020 J jnl
Medical Biol. Eng. Comput.
Rajonya De, Anuran Chakraborty, Agneet Chatterjee, Ram Sarkar
2020 J jnl
Neural Comput. Appl.
Manosij Ghosh, Ritam Guha, Ram Sarkar, Ajith Abraham
2020 J jnl
CoRR
Kushal Kanti Ghosh, Ritam Guha, Soulib Ghosh, Suman Kumar Bera, Ram Sarkar
2020 J jnl
J. Intell. Syst.
Manosij Ghosh, Ritam Guha, Imran Alam, Priyank Lohariwal, Devesh Jalan, Ram Sarkar
2020 J jnl
IEEE Access
Kushal Kanti Ghosh, Pawan Kumar Singh, Junhee Hong, Zong Woo Geem, Ram Sarkar
2020 J jnl
J. Intell. Syst.
Samir Malakar, Manosij Ghosh, Ram Sarkar, Mita Nasipuri
2020 J jnl
IEEE Signal Process. Lett.
Rajonya De, Anuran Chakraborty, Ram Sarkar
2020 J jnl
IEEE Access
Khalid Hassan Sheikh, Shameem Ahmed, Krishnendu Mukhopadhyay, Pawan Kumar Singh, Jin Hee Yoon, Zong Woo Geem, Ram Sarkar
2020 J jnl
CoRR
Ritam Guha, Manosij Ghosh, Shyok Mutsuddi, Ram Sarkar, Seyedali Mirjalili
2020 J jnl
Soft Comput.
Ritam Guha, Manosij Ghosh, Shyok Mutsuddi, Ram Sarkar, Seyedali Mirjalili
2020 J jnl
Multim. Tools Appl.
Debadyuti Mukherjee, Riktim Mondal, Pawan Kumar Singh, Ram Sarkar, Debotosh Bhattacharjee
2020 J jnl
Multim. Tools Appl.
Shaswata Saha, Anuran Chakraborty, Agneet Chatterjee, Souvik Dhargupta, Sudipta Kumar Ghosal, Ram Sarkar
2020 J jnl
CoRR
Devroop Kar, Manosij Ghosh, Ritam Guha, Ram Sarkar, Laura García-Hernández, Ajith Abraham
2020 J jnl
Eng. Appl. Artif. Intell.
Devroop Kar, Manosij Ghosh, Ritam Guha, Ram Sarkar, Laura García-Hernández, Ajith Abraham
2020 conf
ICPR Workshops (2)
Rajdeep Bhattacharya, Samir Malakar, Friedhelm Schwenker, Ram Sarkar
2020 J jnl
IEEE Access
Shameem Ahmed, Kushal Kanti Ghosh, Suman Kumar Bera, Friedhelm Schwenker, Ram Sarkar
2020 J jnl
J. Ambient Intell. Humaniz. Comput.
Pratik Ahamed, Soumyadeep Kundu, Tauseef Khan, Vikrant Bhateja, Ram Sarkar, Ayatullah Faruk Mollah
2020 J jnl
Appl. Artif. Intell.
Jishnu Mukhoti, Sukanya Dutta, Ram Sarkar
2020 B conf
ICPR
Anuran Chakraborty, Rajonya De, Samir Malakar, Friedhelm Schwenker, Ram Sarkar
2020 J jnl
J. Intell. Syst.
Anirban Mukhopadhyay, Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2020 J jnl
CoRR
Pawan Kumar Singh, Iman Chatterjee, Ram Sarkar, Mita Nasipuri
2020 J jnl
Neural Comput. Appl.
Samir Malakar, Sayantan Paul, Soumyadeep Kundu, Showmik Bhowmik, Ram Sarkar, Mita Nasipuri
2020 J jnl
IEEE Access
Samarpan Guha, Aankit Das, Pawan Kumar Singh, Ali Ahmadian, Norazak Senu, Ram Sarkar
2020 J jnl
IEEE Access
Shameem Ahmed, Kushal Kanti Ghosh, Pawan Kumar Singh, Zong Woo Geem, Ram Sarkar
2020 J jnl
IEEE Access
Kushal Kanti Ghosh, Shameem Ahmed, Pawan Kumar Singh, Zong Woo Geem, Ram Sarkar
2020 J jnl
Appl. Soft Comput.
Ritam Guha, Manosij Ghosh, Akash Chakrabarti, Ram Sarkar, Seyedali Mirjalili
2020 J jnl
Multim. Tools Appl.
Agneet Chatterjee, Sudipta Kumar Ghosal, Ram Sarkar
2020 J jnl
IEEE Access
Bitanu Chatterjee, Trinav Bhattacharyya, Kushal Kanti Ghosh, Pawan Kumar Singh, Zong Woo Geem, Ram Sarkar
2020 J jnl
J. Intell. Syst.
Ritam Guha, Manosij Ghosh, Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2020 J jnl
IEEE Access
Trinav Bhattacharyya, Bitanu Chatterjee, Pawan Kumar Singh, Jin Hee Yoon, Zong Woo Geem, Ram Sarkar
2020 J jnl
Pattern Recognit. Lett.
Shaswata Saha, Neelotpal Chakraborty, Soumyadeep Kundu, Sayantan Paul, Ayatullah Faruk Mollah, Subhadip Basu, Ram Sarkar
2020 J jnl
Int. J. Comput. Vis. Image Process.
Dibyajyoti Dhar, Neelotpal Chakraborty, Sayan Choudhury, Ashis Paul, Ayatullah Faruk Mollah, Subhadip Basu, Ram Sarkar
2020 J jnl
Multim. Tools Appl.
Soham Roy, Archan Bhattacharya, Navonil Sarkar, Samir Malakar, Ram Sarkar
2020 J jnl
Multim. Tools Appl.
Samir Malakar, Manosij Ghosh, Agneet Chatterjee, Showmik Bhowmik, Ram Sarkar
2020 J jnl
Neural Comput. Appl.
Shibaprasad Sen, Ankan Bhattacharyya, Mridul Mitra, Kaushik Roy, Sudip Kumar Naskar, Ram Sarkar
2020 J jnl
Int. J. Comput. Vis. Image Process.
Prosenjit Mukherjee, Shibaprasad Sen, Kaushik Roy, Ram Sarkar
2020 conf
CVIP (2)
Rajatsubhra Chakraborty, Soumyajit Saha, Ankan Bhattacharyya, Shibaprasad Sen, Ram Sarkar, Kaushik Roy
2020 J jnl
Expert Syst. Appl.
Souvik Dhargupta, Manosij Ghosh, Seyedali Mirjalili, Ram Sarkar
2020 J jnl
Expert Syst. Appl.
Soumyadeep Kundu, Sayantan Paul, Suman Kumar Bera, Ajith Abraham, Ram Sarkar
2020 J jnl
J. Electronic Imaging
Arpan Basu, Riktim Mondal, Showmik Bhowmik, Ram Sarkar
2020 J jnl
Neural Comput. Appl.
Soumyadeep Kundu, Sayantan Paul, Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2020 J jnl
CoRR
Pawan Kumar Singh, Shubham Sinha, Sagnik Pal Chowdhury, Ram Sarkar, Mita Nasipuri
2019 J jnl
Expert Syst. J. Knowl. Eng.
Iman Chatterjee, Manosij Ghosh, Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2019 J jnl
Evol. Intell.
Manosij Ghosh, Ritam Guha, Pawan Kumar Singh, Vikrant Bhateja, Ram Sarkar
2019 J jnl
Neural Process. Lett.
Shibaprasad Sen, Mridul Mitra, Ankan Bhattacharyya, Ram Sarkar, Friedhelm Schwenker, Kaushik Roy
2019 J jnl
Multim. Tools Appl.
Manosij Ghosh, Tuhin Kundu, Dipayan Ghosh, Ram Sarkar
2019 conf
ICANN (2)
Anuran Chakraborty, Rajonya De, Agneet Chatterjee, Friedhelm Schwenker, Ram Sarkar
2019 J jnl
Multim. Tools Appl.
Souvik Dhargupta, Anuran Chakraborty, Sudipta Kumar Ghosal, Shaswata Saha, Ram Sarkar
2019 J jnl
Medical Biol. Eng. Comput.
Manosij Ghosh, Sukdev Adhikary, Kushal Kanti Ghosh, Aritra Sardar, Shemim Begum, Ram Sarkar
2019 J jnl
IEEE Trans. Image Process.
Showmik Bhowmik, Ram Sarkar, Bishwadeep Das, David S. Doermann
2019 J jnl
Int. J. Comput. Vis. Image Process.
Anirban Mukhopadhyay, Sourav Kumar, Souvik Roy Chowdhury, Neelotpal Chakraborty, Ayatullah Faruk Mollah, Subhadip Basu, Ram Sarkar
2019 J jnl
Pattern Recognit. Lett.
Suman Kumar Bera, Akash Chakrabarti, Sagnik Lahiri, Elisa H. Barney Smith, Ram Sarkar
2019 J jnl
Neural Comput. Appl.
Showmik Bhowmik, Samir Malakar, Ram Sarkar, Subhadip Basu, Mahantapas Kundu, Mita Nasipuri
2019 J jnl
Expert Syst. Appl.
Manosij Ghosh, Shemim Begum, Ram Sarkar, Debasis Chakraborty, Ujjwal Maulik
2019 conf
SoCPaR
Sukrit Bhattacharya, Vaibhav Shaw, Pawan Kumar Singh, Ram Sarkar, Debotosh Bhattacharjee
2018 J jnl
J. Imaging
Anirban Mukhopadhyay, Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2018 J jnl
Int. J. Appl. Pattern Recognit.
Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2018 conf
CICBA (1)
Suryadipto Sarkar, Manosij Ghosh, Agneet Chatterjee, Samir Malakar, Ram Sarkar
2018 J jnl
ACM Trans. Asian Low Resour. Lang. Inf. Process.
Shibaprasad Sen, Ankan Bhattacharyya, Pawan Kumar Singh, Ram Sarkar, Kaushik Roy, David S. Doermann
2018 J jnl
Multim. Tools Appl.
Pawan Kumar Singh, Ram Sarkar, Nibaran Das, Subhadip Basu, Mahantapas Kundu, Mita Nasipuri
2018 J jnl
Comput. Intell.
Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2018 conf
CICBA (1)
Arijit De, Nirmal Das, Ram Sarkar, Punam Kumar Saha, Subhadip Basu
2018 J jnl
J. Intell. Syst.
Pawan Kumar Singh, Supratim Das, Ram Sarkar, Mita Nasipuri
2018 J jnl
J. Intell. Fuzzy Syst.
Samanway Sahoo, Subham Kumar Nandi, Sourav Barua, Pallavi, Showmik Bhowmik, Samir Malakar, Ram Sarkar
2018 J jnl
Multim. Tools Appl.
Sudipta Kumar Ghosal, Jyotsna Kumar Mandal, Ram Sarkar
2018 conf
CICBA (1)
Neelotpal Chakraborty, Saikat Biswas, Ayatullah Faruk Mollah, Subhadip Basu, Ram Sarkar
2018 conf
DAR@ICVGIP
Shibaprasad Sen, Jewel Chakraborty, Snehanjan Chatterjee, Rohit Mitra, Ram Sarkar, Kaushik Roy
2018 J jnl
CoRR
Pawan Kumar Singh, Supratim Das, Ram Sarkar, Mita Nasipuri
2018 J jnl
Int. J. Comput. Vis. Robotics
Pawan Kumar Singh, Supratim Das, Ram Sarkar, Mita Nasipuri
2018 J jnl
Int. J. Document Anal. Recognit.
Showmik Bhowmik, Ram Sarkar, Mita Nasipuri, David S. Doermann
2018 J jnl
J. Imaging
Sourav Ghosh, Dibyadwati Lahiri, Showmik Bhowmik, Ergina Kavallieratou, Ram Sarkar
2018 conf
DAR@ICVGIP
Soulib Ghosh, Rajdeep Bhattacharya, Sandipan Majhi, Showmik Bhowmik, Samir Malakar, Ram Sarkar
2017 conf
ICAPR
Prithwish Jana, Soulib Ghosh, Ram Sarkar, Mita Nasipuri
2017 J jnl
CoRR
Supratim Das, Pawan Kumar Singh, Showmik Bhowmik, Ram Sarkar, Mita Nasipuri
2017 J jnl
Int. J. Comput. Vis. Image Process.
Samir Malakar, Pankaj Sharma, Pankaj Kumar Singh, Maitrayee Das, Ram Sarkar, Mita Nasipuri
2017 conf
ICITAM
Showmik Bhowmik, Soumyadeep Kundu, Bikram Kumar De, Ram Sarkar, Mita Nasipuri
2017 conf
ICITAM
Shibaprasad Sen, Dwaipayan Shaoo, Mridul Mitra, Ram Sarkar, Kaushik Roy
2017 conf
CICBA (2)
Manosij Ghosh, Samir Malakar, Showmik Bhowmik, Ram Sarkar, Mita Nasipuri
2016 J jnl
Appl. Comput. Intell. Soft Comput.
Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2016 conf
SoCPaR
Bishwadeep Das, Showmik Bhowmik, Aniruddha Saha, Ram Sarkar
2016 conf
ACSS (2)
Shibaprasad Sen, Ram Sarkar, Kaushik Roy
2016 conf
FICTA (1)
Shilpi Barua, Samir Malakar, Showmik Bhowmik, Ram Sarkar, Mita Nasipuri
2016 conf
FICTA (1)
Pawan Kumar Singh, Supratim Das, Ram Sarkar, Mita Nasipuri
2016 J jnl
Int. J. Comput. Vis. Image Process.
Pawan Kumar Singh, Supratim Das, Ram Sarkar, Mita Nasipuri
2016 conf
ANNPR
Shibaprasad Sen, Mridul Mitra, Shubham Chowdhury, Ram Sarkar, Kaushik Roy
2016 conf
FICTA (1)
Shibaprasad Sen, Ram Sarkar, Kaushik Roy, Naoto Hori
2016 J jnl
Int. J. Comput. Sci. Math.
Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2016 conf
ACSS (2)
Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2016 conf
FICTA (1)
Neelotpal Chakraborty, Sambit Mukherjee, Ashes Ranjan Naskar, Samir Malakar, Ram Sarkar, Mita Nasipuri
2015 J jnl
CoRR
Nibaran Das, Subhadip Basu, Punam Kumar Saha, Ram Sarkar, Mahantapas Kundu, Mita Nasipuri
2015 conf
FICTA
Shibaprasad Sen, Ram Sarkar, Kaushik Roy
2015 J jnl
Int. J. Appl. Pattern Recognit.
Showmik Bhowmik, Sanjib Polley, Md. Galib Roushan, Samir Malakar, Ram Sarkar, Mita Nasipuri
2015 J jnl
Int. J. Intell. Syst. Technol. Appl.
Pawan Kumar Singh, Ram Sarkar
2015 J jnl
CoRR
Nibaran Das, Subhadip Basu, Ram Sarkar, Mahantapas Kundu, Mita Nasipuri, Dipak Kumar Basu
2015 J jnl
CoRR
Nibaran Das, Sandip Pramanik, Subhadip Basu, Punam Kumar Saha, Ram Sarkar, Mahantapas Kundu
2015 J jnl
Pattern Recognit.
Nibaran Das, Ram Sarkar, Subhadip Basu, Punam Kumar Saha, Mahantapas Kundu, Mita Nasipuri
2015 J jnl
CoRR
Ram Sarkar, Bibhash Sen, Nibaran Das, Subhadip Basu
2015 J jnl
Comput. Sci. Rev.
Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2015 conf
ReTIS
Pawan Kumar Singh, Iman Chatterjee, Ram Sarkar
2015 J jnl
Int. J. Appl. Pattern Recognit.
Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2015 J jnl
Int. J. Syst. Dyn. Appl.
Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2015 A conf
ICDAR
Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri, David S. Doermann
2014 J jnl
Int. J. Document Anal. Recognit.
Nibaran Das, Kallol Acharya, Ram Sarkar, Subhadip Basu, Mahantapas Kundu, Mita Nasipuri
2014 J jnl
J. Intell. Syst.
Ram Sarkar, Nibaran Das, Subhadip Basu, Mahantapas Kundu, Mita Nasipuri
2014 J jnl
CoRR
Nibaran Das, Sandip Pramanik, Subhadip Basu, Punam Kumar Saha, Ram Sarkar, Mahantapas Kundu, Mita Nasipuri
2014 J jnl
Int. J. Appl. Pattern Recognit.
Pawan Kumar Singh, Ram Sarkar, Nibaran Das, Subhadip Basu, Mita Nasipuri
2014 conf
FICTA (1)
Pawan Kumar Singh, Arafat Mondal, Showmik Bhowmik, Ram Sarkar, Mita Nasipuri
2013 conf
PReMI
Soumik Datta, Pawan Kumar Singh, Ram Sarkar, Mita Nasipuri
2013 conf
PReMI
Pawan Kumar Singh, Ram Sarkar, Nibaran Das, Subhadip Basu, Mita Nasipuri
2012 J jnl
Appl. Soft Comput.
Nibaran Das, Ram Sarkar, Subhadip Basu, Mahantapas Kundu, Mita Nasipuri, Dipak Kumar Basu
2012 J jnl
Appl. Soft Comput.
Nibaran Das, Jagan Mohan Reddy, Ram Sarkar, Subhadip Basu, Mahantapas Kundu, Mita Nasipuri, Dipak Kumar Basu
2012 J jnl
CoRR
Subhadip Basu, Nibaran Das, Ram Sarkar, Mahantapas Kundu, Mita Nasipuri, Dipak Kumar Basu
2012 J jnl
Int. J. Document Anal. Recognit.
Ram Sarkar, Nibaran Das, Subhadip Basu, Mahantapas Kundu, Mita Nasipuri, Dipak Kumar Basu
2012 J jnl
CoRR
Subhadip Basu, Nibaran Das, Ram Sarkar, Mahantapas Kundu, Mita Nasipuri, Dipak Kumar Basu
2011 conf
IICAI
Samir Malakar, Prasenjit Ghosh, Ram Sarkar, Nibaran Das, Subhadip Basu, Mita Nasipuri
2011 J jnl
J. Intell. Syst.
Ram Sarkar, Samir Malakar, Nibaran Das, Subhadip Basu, Mahantapas Kundu, Mita Nasipuri
2011 conf
IICAI
Ram Sarkar, Sanjay Moulik, Nibaran Das, Subhadip Basu, Mita Nasipuri, Dipak Kumar Basu
2010 J jnl
CoRR
Nibaran Das, Ayatullah Faruk Mollah, Ram Sarkar, Subhadip Basu
2010 J jnl
Pattern Recognit.
Subhadip Basu, Nibaran Das, Ram Sarkar, Mahantapas Kundu, Mita Nasipuri, Dipak Kumar Basu
2010 J jnl
CoRR
Ayatullah Faruk Mollah, Subhadip Basu, Nibaran Das, Ram Sarkar, Mita Nasipuri, Mahantapas Kundu
2010 J jnl
CoRR
Nibaran Das, Bindaban Das, Ram Sarkar, Subhadip Basu, Mahantapas Kundu, Mita Nasipuri
2010 J jnl
CoRR
Ayatullah Faruk Mollah, Subhadip Basu, Nibaran Das, Ram Sarkar, Mita Nasipuri, Mahantapas Kundu
2010 J jnl
CoRR
Ram Sarkar, Nibaran Das, Subhadip Basu, Mahantapas Kundu, Mita Nasipuri, Dipak Kumar Basu
2009 J jnl
Pattern Recognit.
Subhadip Basu, Nibaran Das, Ram Sarkar, Mahantapas Kundu, Mita Nasipuri, Dipak Kumar Basu
2009 conf
IICAI
Nibaran Das, Subhadip Basu, Ram Sarkar, Mahantapas Kundu, Mita Nasipuri
2009 conf
IICAI
Ram Sarkar, Subhadip Basu, Nibaran Das, Ayatullah Faruk Mollah, Mahantapas Kundu, Mita Nasipuri
2009 conf
PReMI
Subhadip Basu, Nibaran Das, Ram Sarkar, Mahantapas Kundu, Mita Nasipuri, Dipak Kumar Basu
2009 conf
PReMI
Abhishek Khandelwal, Pritha Choudhury, Ram Sarkar, Subhadip Basu, Mita Nasipuri, Nibaran Das
2007 conf
ICCTA
Subhadip Basu, Ram Sarkar, Nibaran Das, Mahantapas Kundu, Mita Nasipuri, Dipak Kumar Basu
2005 conf
IICAI
Subhadip Basu, Nibaran Das, Ram Sarkar, Mahantapas Kundu, Mita Nasipuri, Dipak Kumar Basu
2005 conf
PReMI
Subhadip Basu, Ram Sarkar, Nibaran Das, Mahantapas Kundu, Mita Nasipuri, Dipak Kumar Basu
tests/unit/test_apk_code_analyzer.py
← Index tests/unit/test_apk_code_analyzer.py python
"""
Unit tests for APK code analysis components.

Tests APKCodeAnalyzer, LibraryFilter, SmaliParser, method enumeration,
library filtering, and method key matching. All external tools are mocked.
"""
import os
import tempfile
import textwrap

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

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


def _has_mmh3():
    try:
        import mmh3  # noqa: F401
        return True
    except ImportError:
        return False


# ============================================================================
# LibraryFilter Tests
# ============================================================================

class TestLibraryFilter:
    """Tests for package-based library filtering."""

    def test_default_prefixes_loaded(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("android.app.Activity")
        assert lf.is_library("androidx.core.app.NotificationCompat")

    def test_user_class_not_filtered(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert not lf.is_library("com.example.myapp.MainActivity")
        assert not lf.is_library("org.myorg.MyClass")

    def test_dalvik_descriptor_format(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("Landroid/app/Activity;")
        assert lf.is_library("Landroidx/core/app/NotificationCompat;")
        assert not lf.is_library("Lcom/example/myapp/MainActivity;")

    def test_custom_prefixes(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter(prefixes=["com.custom."])
        assert lf.is_library("com.custom.SomeClass")
        assert not lf.is_library("android.app.Activity")

    def test_env_var_override(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        with patch.dict(os.environ, {"APK_LIBRARY_PREFIXES": "my.lib.,other.lib."}):
            lf = LibraryFilter()
            assert lf.is_library("my.lib.SomeClass")
            assert lf.is_library("other.lib.AnotherClass")
            assert not lf.is_library("android.app.Activity")

    def test_filter_stats(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        lf.is_library("android.app.Activity")
        lf.is_library("com.example.MyClass")
        lf.is_library("kotlin.Unit")
        stats = lf.get_filter_stats()
        assert stats["library"] == 2
        assert stats["user"] == 1

    def test_normalize_class_name(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        assert LibraryFilter._normalize_class_name("Lcom/example/Foo;") == "com.example.Foo"
        assert LibraryFilter._normalize_class_name("com.example.Foo") == "com.example.Foo"
        assert LibraryFilter._normalize_class_name("com/example/Foo") == "com.example.Foo"

    def test_google_libraries_filtered(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("com.google.android.gms.ads.AdView")
        assert lf.is_library("com.google.firebase.messaging.FirebaseMessagingService")
        assert lf.is_library("com.google.gson.Gson")

    def test_kotlin_filtered(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("kotlin.Unit")
        assert lf.is_library("kotlinx.coroutines.CoroutineScope")

    def test_third_party_libs_filtered(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert lf.is_library("com.squareup.okhttp3.OkHttpClient")
        assert lf.is_library("io.reactivex.Observable")
        assert lf.is_library("org.apache.commons.io.IOUtils")

    def test_empty_class_name(self):
        from redb.extractors.decompiler.apk.library_filter import LibraryFilter
        lf = LibraryFilter()
        assert not lf.is_library("")


# ============================================================================
# SmaliParser Tests
# ============================================================================

class TestSmaliParser:
    """Tests for smali file parsing."""

    SAMPLE_SMALI = textwrap.dedent("""\
        .class public Lcom/example/MyClass;
        .super Ljava/lang/Object;

        .method public constructor <init>()V
            .registers 1
            invoke-direct {p0}, Ljava/lang/Object;-><init>()V
            return-void
        .end method

        .method public onCreate(Landroid/os/Bundle;)V
            .registers 4
            .param p1, "savedInstanceState"

            .line 10
            invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
            const/high16 v0, 0x7f090000
            invoke-virtual {p0, v0}, Lcom/example/MyClass;->setContentView(I)V
            const-string v1, "hello"
            invoke-virtual {p0, v1}, Lcom/example/MyClass;->log(Ljava/lang/String;)V
            return-void
        .end method

        .method public abstract doSomething()V
        .end method

        .method public native nativeMethod()V
        .end method
    """)

    def test_parse_smali_content(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        # abstract and native should be skipped
        assert len(methods) == 2

    def test_method_names_extracted(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        names = {m.method_name for m in methods}
        assert "<init>" in names
        assert "onCreate" in names

    def test_class_name_extracted(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        for m in methods:
            assert m.class_name == "Lcom/example/MyClass;"

    def test_method_signature(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        oncreate = [m for m in methods if m.method_name == "onCreate"][0]
        assert oncreate.method_signature == "(Landroid/os/Bundle;)V"

    def test_instruction_count(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        oncreate = [m for m in methods if m.method_name == "onCreate"][0]
        # invoke-super, const/high16, invoke-virtual, const-string, invoke-virtual, return-void
        assert oncreate.instruction_count == 6

    def test_register_count(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        oncreate = [m for m in methods if m.method_name == "onCreate"][0]
        assert oncreate.register_count == 4

    def test_register_count_locals_directive(self):
        """apktool outputs .locals by default, not .registers."""
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        smali_with_locals = textwrap.dedent("""\
            .class public Lcom/example/Locals;
            .super Ljava/lang/Object;

            .method public doWork()V
                .locals 3
                const/4 v0, 0x0
                const/4 v1, 0x1
                add-int v2, v0, v1
                return-void
            .end method
        """)
        methods = SmaliParser._parse_smali_content(smali_with_locals)
        assert len(methods) == 1
        assert methods[0].register_count == 3

    def test_abstract_native_skipped(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content(self.SAMPLE_SMALI)
        names = {m.method_name for m in methods}
        assert "doSomething" not in names
        assert "nativeMethod" not in names

    def test_normalize_smali_body(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        body = textwrap.dedent("""\
            .registers 4
            .line 10
            # comment
            invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

            const-string v1, "hello"
        """)
        normalized = SmaliParser.normalize_smali_body(body)
        assert ".line" not in normalized
        assert "# comment" not in normalized
        assert "invoke-super" in normalized
        assert "const-string" in normalized

    def test_count_instructions(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        body = textwrap.dedent("""\
            .registers 4
            .param p1, "x"
            invoke-virtual {p0}, Lcom/example/Foo;->bar()V
            const/4 v0, 0x0
            :label_0
            if-eqz v0, :label_1
            return-void
            :label_1
            goto :label_0
        """)
        assert SmaliParser.count_instructions(body) == 5

    def test_make_method_key(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        key = SmaliParser.make_method_key(
            "Lcom/example/Foo;", "bar", "(I)V"
        )
        assert key == "Lcom/example/Foo;->bar(I)V"

    def test_parse_smali_file(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        with tempfile.NamedTemporaryFile(
            mode="w", suffix=".smali", delete=False
        ) as f:
            f.write(self.SAMPLE_SMALI)
            f.flush()
            try:
                methods = SmaliParser.parse_smali_file(f.name)
                assert len(methods) == 2
            finally:
                os.unlink(f.name)

    def test_parse_smali_directory(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        with tempfile.TemporaryDirectory() as tmpdir:
            # Create nested dir structure
            pkg_dir = os.path.join(tmpdir, "com", "example")
            os.makedirs(pkg_dir)
            with open(os.path.join(pkg_dir, "MyClass.smali"), "w") as f:
                f.write(self.SAMPLE_SMALI)

            result = SmaliParser.parse_smali_directory(tmpdir)
            assert len(result) == 2
            # Check keys are in expected format
            for key in result:
                assert "->" in key

    def test_empty_smali_file(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        methods = SmaliParser._parse_smali_content("")
        assert methods == []

    def test_class_only_no_methods(self):
        from redb.extractors.decompiler.apk.smali_parser import SmaliParser
        content = ".class public Lcom/example/Empty;\n.super Ljava/lang/Object;\n"
        methods = SmaliParser._parse_smali_content(content)
        assert methods == []


# ============================================================================
# MethodExtractor Tests (Hashing, Obfuscation, Type Conversion)
# ============================================================================

class TestMethodExtractor:
    """Tests for method-level content extraction and hashing."""

    def test_compute_sha256(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        h = compute_sha256("test content")
        assert len(h) == 64
        assert h == compute_sha256("test content")  # deterministic

    def test_compute_sha256_different_input(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_sha256
        assert compute_sha256("a") != compute_sha256("b")

    def test_compute_ssdeep_short_input(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_ssdeep
        result = compute_ssdeep("short")
        assert result is None

    def test_compute_ssdeep_long_input(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_ssdeep
        result = compute_ssdeep("x" * 200)
        # May be None depending on entropy, but shouldn't crash
        assert result is None or isinstance(result, str)

    def test_compute_tlsh_short_input(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_tlsh
        result = compute_tlsh("short")
        assert result is None

    def test_compute_tlsh_long_input(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_tlsh
        data = "".join(chr(i % 256) for i in range(200))
        result = compute_tlsh(data)
        assert result is None or isinstance(result, str)

    def test_compute_minhash_returns_none_without_mmh3(self):
        from unittest.mock import patch
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        with patch.dict("sys.modules", {"mmh3": None}):
            # Force reimport to hit ImportError
            import importlib
            import redb.extractors.decompiler.apk.method_extractor as mod
            importlib.reload(mod)
            result = mod.compute_minhash("line1\nline2\nline3\nline4")
            # mmh3 may or may not be available; just check it doesn't crash
            assert result is None or isinstance(result, list)
            importlib.reload(mod)  # restore

    def test_compute_minhash_too_few_lines(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        result = compute_minhash("invoke-direct {v0}, Lfoo;->bar()V")
        # Only 1 instruction line, need at least 3 for 3-grams
        assert result is None

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_deterministic(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        smali = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        sig1 = compute_minhash(smali)
        sig2 = compute_minhash(smali)
        assert sig1 is not None
        assert sig1 == sig2

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_signature_length(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        smali = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        sig = compute_minhash(smali)
        assert sig is not None
        assert len(sig) == 64  # SIGNATURE_LENGTH

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_value_range(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        smali = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        sig = compute_minhash(smali)
        assert sig is not None
        for val in sig:
            assert 0 <= val < 256  # 8-bit values

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_different_inputs_differ(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        smali_a = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        smali_b = (
            "sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;\n"
            "const-string v1, \"world\"\n"
            "invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V\n"
            "return-void"
        )
        sig_a = compute_minhash(smali_a)
        sig_b = compute_minhash(smali_b)
        assert sig_a is not None
        assert sig_b is not None
        assert sig_a != sig_b

    @pytest.mark.skipif(
        not _has_mmh3(), reason="mmh3 not installed"
    )
    def test_compute_minhash_skips_directives_and_labels(self):
        from redb.extractors.decompiler.apk.method_extractor import compute_minhash
        # Directives and labels should be filtered out
        smali = (
            ".registers 3\n"
            ":start\n"
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            ".line 10\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        smali_clean = (
            "invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "const-string v0, \"hello\"\n"
            "iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "return-void"
        )
        sig_with_directives = compute_minhash(smali)
        sig_clean = compute_minhash(smali_clean)
        assert sig_with_directives == sig_clean

    def test_dalvik_to_java_class(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_class
        assert dalvik_to_java_class("Lcom/example/Foo;") == "com.example.Foo"
        assert dalvik_to_java_class("com.example.Foo") == "com.example.Foo"

    def test_dalvik_type_to_java(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_type_to_java
        assert dalvik_type_to_java("V") == "void"
        assert dalvik_type_to_java("I") == "int"
        assert dalvik_type_to_java("Z") == "boolean"
        assert dalvik_type_to_java("Ljava/lang/String;") == "String"
        assert dalvik_type_to_java("[I") == "int[]"
        assert dalvik_type_to_java("[Ljava/lang/String;") == "String[]"

    def test_dalvik_to_java_prototype(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("onCreate", "(Landroid/os/Bundle;)V")
        assert result == "void onCreate(Bundle)"

    def test_dalvik_to_java_prototype_no_params(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("toString", "()Ljava/lang/String;")
        assert result == "String toString()"

    def test_dalvik_to_java_prototype_multiple_params(self):
        from redb.extractors.decompiler.apk.method_extractor import dalvik_to_java_prototype
        result = dalvik_to_java_prototype("foo", "(ILjava/lang/String;Z)V")
        assert result == "void foo(int, String, boolean)"

    def test_detect_obfuscation_short_name(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        result = detect_obfuscation_indicators("a", "Lcom/example/Foo;", "", 10)
        assert result["short_method_name"] is True
        result = detect_obfuscation_indicators("onCreate", "Lcom/example/Foo;", "", 10)
        assert result["short_method_name"] is False

    def test_detect_obfuscation_short_class(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        result = detect_obfuscation_indicators("foo", "Lcom/example/a;", "", 10)
        assert result["short_class_name"] is True
        result = detect_obfuscation_indicators("foo", "Lcom/example/MainActivity;", "", 10)
        assert result["short_class_name"] is False

    def test_detect_reflection_calls(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "invoke-virtual {v0}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;"
        result = detect_obfuscation_indicators("foo", "Lcom/Foo;", smali, 10)
        assert result["has_reflection_calls"] is True

    def test_detect_no_reflection(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "invoke-virtual {p0}, Lcom/example/Foo;->bar()V"
        result = detect_obfuscation_indicators("foo", "Lcom/Foo;", smali, 10)
        assert result["has_reflection_calls"] is False

    def test_detect_string_encryption(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = 'const-string v0, "encrypted"\n    invoke-static {v0}, Lcom/example/Crypto;->decrypt(Ljava/lang/String;)Ljava/lang/String;'
        result = detect_obfuscation_indicators("foo", "Lcom/Foo;", smali, 10)
        assert result["has_string_encryption"] is True

    def test_detect_excessive_goto(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "\n".join(["goto :label_0"] * 20)
        result = detect_obfuscation_indicators("foo", "Lcom/Foo;", smali, 30)
        # threshold = max(5, 30*0.15) = 5, 20 > 5
        assert result["excessive_goto_count"] is True

    def test_detect_no_excessive_goto(self):
        from redb.extractors.decompiler.apk.method_extractor import detect_obfuscation_indicators
        smali = "goto :label_0\nreturn-void"
        result = detect_obfuscation_indicators("foo", "Lcom/Foo;", smali, 100)
        assert result["excessive_goto_count"] is False

    def test_parse_dalvik_params_empty(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        assert _parse_dalvik_params("") == []

    def test_parse_dalvik_params_primitives(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("IZJ")
        assert result == ["I", "Z", "J"]

    def test_parse_dalvik_params_object(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("Ljava/lang/String;")
        assert result == ["Ljava/lang/String;"]

    def test_parse_dalvik_params_mixed(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("ILjava/lang/String;Z")
        assert result == ["I", "Ljava/lang/String;", "Z"]

    def test_parse_dalvik_params_array(self):
        from redb.extractors.decompiler.apk.method_extractor import _parse_dalvik_params
        result = _parse_dalvik_params("[I[Ljava/lang/String;")
        assert result == ["[I", "[Ljava/lang/String;"]


# ============================================================================
# APKCodeAnalyzer Tests (mocked tools)
# ============================================================================

class TestAPKCodeAnalyzer:
    """Tests for the APKCodeAnalyzer orchestration."""

    def test_init_defaults(self):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        analyzer = APKCodeAnalyzer("/fake/path.apk")
        assert analyzer.filepath == "/fake/path.apk"
        assert analyzer.timeout == 600
        assert analyzer.min_instructions == 5

    def test_init_custom_timeout(self):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        analyzer = APKCodeAnalyzer("/fake/path.apk", timeout=300)
        assert analyzer.timeout == 300

    def test_init_min_instructions_env(self):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        with patch.dict(os.environ, {"APK_MIN_METHOD_INSTRUCTIONS": "10"}):
            analyzer = APKCodeAnalyzer("/fake/path.apk")
            assert analyzer.min_instructions == 10

    @patch("redb.extractors.decompiler.apk.analyzer.APKCodeAnalyzer._run_androguard")
    @patch.object(
        __import__("redb.extractors.decompiler.apk.apktool_wrapper", fromlist=["ApktoolDisassembler"]).ApktoolDisassembler,
        "disassemble",
        return_value=False,
    )
    @patch.object(
        __import__("redb.extractors.decompiler.apk.jadx_wrapper", fromlist=["JADXDecompiler"]).JADXDecompiler,
        "decompile",
        return_value=False,
    )
    def test_extract_returns_dict_keys(self, mock_jadx, mock_apktool, mock_androguard):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        mock_analysis = MagicMock()
        mock_analysis.get_methods.return_value = []
        mock_androguard.return_value = (MagicMock(), [], mock_analysis)

        analyzer = APKCodeAnalyzer("/fake/path.apk", log=MagicMock())
        results = analyzer.extract()

        assert "decompiled_content" in results
        assert "decompiled_refs" in results
        assert "smali_content" in results
        assert "smali_refs" in results
        assert "similarity_metrics" in results
        assert "strings" in results
        assert "analysis_errors" in results
        analyzer.cleanup()

    @patch("redb.extractors.decompiler.apk.analyzer.APKCodeAnalyzer._run_androguard")
    def test_extract_androguard_failure(self, mock_androguard):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        mock_androguard.side_effect = Exception("Analysis failed")

        analyzer = APKCodeAnalyzer("/fake/path.apk", log=MagicMock())
        results = analyzer.extract()

        assert len(results["analysis_errors"]) > 0
        analyzer.cleanup()

    def test_cleanup_removes_temp_dirs(self):
        from redb.extractors.decompiler.apk.analyzer import APKCodeAnalyzer
        analyzer = APKCodeAnalyzer("/fake/path.apk")
        tmpdir = tempfile.mkdtemp()
        analyzer._temp_dirs.append(tmpdir)
        assert os.path.isdir(tmpdir)
        analyzer.cleanup()
        assert not os.path.isdir(tmpdir)

    def test_normalize_java(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_java
        source = "  public void foo() {\n    int x = 1;\n  }\n"
        normalized = _normalize_java(source)
        assert normalized == "public void foo() {\nint x = 1;\n}"


class TestNormalizeAndroguardOperands:
    """Tests for androguard-to-apktool output normalization."""

    def test_invoke_adds_braces(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "invoke-direct",
            "v1, Ljava/lang/Object;-><init>()V"
        )
        assert result == "{v1}, Ljava/lang/Object;-><init>()V"

    def test_invoke_virtual_multiple_regs(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "invoke-virtual",
            "v0, v1, Ljava/lang/String;->equals(Ljava/lang/Object;)Z"
        )
        assert result == "{v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z"

    def test_invoke_static_no_regs(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        # invoke-static with no register args (rare but possible)
        result = _normalize_androguard_operands(
            "invoke-static",
            "Ljava/lang/System;->gc()V"
        )
        # First part starts with L, so no registers to wrap
        assert result == "Ljava/lang/System;->gc()V"

    def test_invoke_range(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "invoke-virtual/range",
            "v3, v4, v5, Landroid/util/Log;->d(Ljava/lang/String; Ljava/lang/String;)I"
        )
        assert result == "{v3, v4, v5}, Landroid/util/Log;->d(Ljava/lang/String; Ljava/lang/String;)I"

    def test_iget_field_colon(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "iget-object",
            "v0, v4, LF;->a Ljava/lang/String;"
        )
        assert result == "v0, v4, LF;->a:Ljava/lang/String;"

    def test_iput_field_colon(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "iput-object",
            "v0, v1, LA;->b Ljava/lang/String;"
        )
        assert result == "v0, v1, LA;->b:Ljava/lang/String;"

    def test_sget_primitive_field(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "sget",
            "v0, Lcom/Foo;->count I"
        )
        assert result == "v0, Lcom/Foo;->count:I"

    def test_sput_array_field(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "sput-object",
            "v0, Lcom/Foo;->data [B"
        )
        assert result == "v0, Lcom/Foo;->data:[B"

    def test_non_invoke_non_field_passthrough(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands(
            "const-string",
            'v0, "hello world"'
        )
        assert result == 'v0, "hello world"'

    def test_move_passthrough(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands("move", "v0, v4")
        assert result == "v0, v4"

    def test_goto_passthrough(self):
        from redb.extractors.decompiler.apk.analyzer import _normalize_androguard_operands
        result = _normalize_androguard_operands("goto", "+005h")
        assert result == "+005h"


class TestSmaliCFG:
    """Tests for smali CFG construction and metrics computation."""

    def test_empty_body(self):
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        m = compute_cfg_metrics("")
        assert m.block_count == 0
        assert m.cyclomatic_complexity == 1

    def test_linear_method_apktool(self):
        """Single basic block — no branches."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 2
            invoke-direct {v1}, Ljava/lang/Object;-><init>()V
            const-string v0, "hello"
            iput-object v0, v1, LA;->a:Ljava/lang/String;
            return-void
        """)
        m = compute_cfg_metrics(smali)
        assert m.block_count == 1
        assert m.edge_count == 0
        assert m.cyclomatic_complexity == 1
        assert m.loop_count == 0
        assert m.max_depth == 0
        assert m.max_fan_out == 0

    def test_linear_method_androguard(self):
        """Single basic block — androguard format (no labels/directives)."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = (
            "    invoke-direct {v1}, Ljava/lang/Object;-><init>()V\n"
            "    const-string v0, \"hello\"\n"
            "    iput-object v0, v1, LA;->a:Ljava/lang/String;\n"
            "    return-void"
        )
        m = compute_cfg_metrics(smali)
        assert m.block_count == 1
        assert m.edge_count == 0
        assert m.cyclomatic_complexity == 1

    def test_if_branch_apktool(self):
        """Diamond pattern: if-else with two paths merging."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 2
            const/4 v0, 0x0
            if-eqz v0, :cond_0
            const/4 v0, 0x1
            goto :goto_0
            :cond_0
            const/4 v0, 0x2
            :goto_0
            return v0
        """)
        m = compute_cfg_metrics(smali)
        # Blocks: [const,if] [const,goto] [const] [return]
        assert m.block_count == 4
        assert m.cyclomatic_complexity == 2  # E - N + 2
        assert m.loop_count == 0
        assert m.max_fan_out == 2  # if-branch has 2 successors

    def test_loop_apktool(self):
        """Simple loop: goto back to earlier label."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 2
            const/4 v0, 0x0
            :loop_start
            add-int/lit8 v0, v0, 0x1
            const/16 v1, 0xa
            if-lt v0, v1, :loop_start
            return v0
        """)
        m = compute_cfg_metrics(smali)
        assert m.loop_count == 1  # back edge from if-lt to loop_start
        assert m.cyclomatic_complexity >= 2

    def test_if_branch_androguard(self):
        """If-else in androguard offset format."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = (
            "    const/4 v0, 0x0\n"
            "    if-eqz v0, +2h\n"        # skip 2 instructions ahead
            "    const/4 v0, 0x1\n"
            "    goto +1h\n"               # skip 1 ahead
            "    const/4 v0, 0x2\n"
            "    return v0"
        )
        m = compute_cfg_metrics(smali)
        assert m.block_count >= 3
        assert m.cyclomatic_complexity >= 2

    def test_multiple_if_branches(self):
        """Multiple if-branches increase cyclomatic complexity."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 3
            if-eqz v0, :cond_0
            if-eqz v1, :cond_1
            const/4 v2, 0x0
            goto :end
            :cond_0
            const/4 v2, 0x1
            goto :end
            :cond_1
            const/4 v2, 0x2
            :end
            return v2
        """)
        m = compute_cfg_metrics(smali)
        # Two if-branches: CC should be >= 3
        assert m.cyclomatic_complexity >= 3

    def test_return_terminates_block(self):
        """Return instruction terminates block with no successor."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 1
            const/4 v0, 0x0
            return v0
        """)
        m = compute_cfg_metrics(smali)
        assert m.block_count == 1
        assert m.edge_count == 0

    def test_throw_terminates_block(self):
        """Throw instruction terminates block with no successor."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 1
            new-instance v0, Ljava/lang/RuntimeException;
            invoke-direct {v0}, Ljava/lang/RuntimeException;-><init>()V
            throw v0
        """)
        m = compute_cfg_metrics(smali)
        assert m.block_count == 1
        assert m.edge_count == 0

    def test_max_depth_linear_chain(self):
        """Chain of blocks gives increasing depth."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        # 3 blocks chained: entry -> if -> fall-through -> return
        smali = textwrap.dedent("""\
            .registers 2
            const/4 v0, 0x0
            if-nez v0, :cond_0
            const/4 v0, 0x1
            :cond_0
            return v0
        """)
        m = compute_cfg_metrics(smali)
        assert m.max_depth >= 1

    def test_nested_loop_apktool(self):
        """Nested loop: two back edges."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 3
            const/4 v0, 0x0
            :outer
            const/4 v1, 0x0
            :inner
            add-int/lit8 v1, v1, 0x1
            if-lt v1, v2, :inner
            add-int/lit8 v0, v0, 0x1
            if-lt v0, v2, :outer
            return-void
        """)
        m = compute_cfg_metrics(smali)
        assert m.loop_count == 2

    def test_consistency_formula(self):
        """Verify E - N + 2 formula matches cyclomatic_complexity."""
        from redb.extractors.decompiler.apk.smali_cfg import compute_cfg_metrics
        smali = textwrap.dedent("""\
            .registers 2
            const/4 v0, 0x0
            if-eqz v0, :cond_0
            const/4 v0, 0x1
            goto :goto_0
            :cond_0
            const/4 v0, 0x2
            :goto_0
            return v0
        """)
        m = compute_cfg_metrics(smali)
        expected_cc = m.edge_count - m.block_count + 2
        assert m.cyclomatic_complexity == max(1, expected_cc)