Han Zhao

151 papers A* 7A 8C 11Journal 97Unranked 28
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Yifan Sui, Han Zhao, Rui Ma, Zhiyuan He, Hao Wang, Jianxun Li, Yuqing Yang
2026 J jnl
CoRR
Weixin Chen, Antonio Vergari, Han Zhao
2026 J jnl
CoRR
Weixin Chen, Han Zhao
2026 A* conf
WWW
Han Zhao, Xu Yang, Cheng Deng, Fan Liu
2026 J jnl
CoRR
Meitong Liu, Christopher Jung, Rui Li, Xue Feng, Han Zhao
2026 J jnl
CoRR
Siyuan Huang, Ziyu Wang, Chao Pan, Han Zhao
2026 J jnl
CoRR
Jiaxuan Liu, Yang Xiang, Han Zhao, Xiangang Li, Zhenhua Ling
2026 J jnl
Expert Syst. Appl.
Qingzhou Chen, Liguo Yao, Guanghui Li, Taihua Zhang, Han Zhao
2026 J jnl
CoRR
Hao Wang, Ziao Wang, Xiangpeng Liang, Han Zhao, Jianqi Hu, Junjie Jiang, Xing Fu, Jianshi Tang, Huaqiang Wu, Sylvain Gigan, Qiang Liu
2025 J jnl
CoRR
Han Zhao, Haotian Wang, Yiping Peng, Sitong Zhao, Xiaoyu Tian, Shuaiting Chen, Yunjie Ji, Xiangang Li
2025 conf
ISSCC
Han Zhao, Xuanhao Zhang, Qijin Deng, Jialin Hu, Zhenbing Li, Shiheng Yang, Jiaxin Liu
2025 J jnl
Adv. Eng. Softw.
Huifang Hu, Ping Xiang, Han Zhao, Yingying Zeng, Peng Zhang, Zhanjun Shao, Xiaonan Xie, Lizhong Jiang
2025 J jnl
IEEE Robotics Autom. Lett.
Han Zhao, Qi Zhang, Jianing Li, Zhenlin Chen, Chongyun Wang, Zhen Liu, Dong Sun
2025 J jnl
CoRR
Yunjie Ji, Xiaoyu Tian, Sitong Zhao, Haotian Wang, Shuaiting Chen, Yiping Peng, Han Zhao, Xiangang Li
2025 A conf
LAK
Xinyun He, Qi Shu, Mo Zhang, Wei Huang, Han Zhao, Mengxiao Zhu
2025 A conf
CIKM
Guillaume Guy, Mihajlo Grbovic, Chun How Tan, Han Zhao
2025 J jnl
CoRR
Guillaume Guy, Mihajlo Grbovic, Chun How Tan, Han Zhao
2025 J jnl
CoRR
Pan Yang, Cheng Deng, Jing Yang, Han Zhao, Yun Liu, Yuling Chen, Xiaoli Ruan, Yanping Chen
2025 J jnl
Neurocomputing
Jun Gao, Junlin Cui, Huijia Wu, Liuyu Xiang, Han Zhao, Xiangang Li, Meng Fang, Yaodong Yang, Zhaofeng He
2025 J jnl
J. King Saud Univ. Comput. Inf. Sci.
Jingya Dong, Peiming Ning, Han Zhao, Chunhe Song
2025 J jnl
CoRR
Xiaoyu Tian, Sitong Zhao, Haotian Wang, Shuaiting Chen, Yiping Peng, Yunjie Ji, Han Zhao, Xiangang Li
2025 J jnl
Knowl. Inf. Syst.
Zihan Wang, Shi Feng, Daling Wang, Kaisong Song, Gang Wu, Yifei Zhang, Han Zhao, Ge Yu
2025 A conf
ICWS
Han Zhao, Yong Ma, Kunyin Guo, Yunni Xia, Yuyin Ma, Peng Chen, Yunye Wan
2025 J jnl
Adv. Eng. Softw.
Ping Xiang, Xiaonan Xie, Zhanjun Shao, Hongkai Ma, Peng Zhang, Han Zhao
2025 J jnl
CoRR
Changfeng Gao, Yabin Li, Keyu An, Zhifu Gao, Zhihao Du, Han Zhao, Xiangang Li
2025 J jnl
CoRR
Xiaoyu Tian, Sitong Zhao, Haotian Wang, Shuaiting Chen, Yiping Peng, Yunjie Ji, Han Zhao, Xiangang Li
2025 J jnl
CoRR
Keyu An, Yanni Chen, Chong Deng, Changfeng Gao, Zhifu Gao, Bo Gong, Xiangang Li, Yabin Li, Xiang Lv, Yunjie Ji, Yiheng Jiang, Bin Ma, Haoneng Luo, Chongjia Ni, Zexu Pan, Yiping Peng, Zhendong Peng, Peiyao Wang, Hao Wang, Wen Wang, Wupeng Wang, Biao Tian, Zhentao Tan, Nan Yang, Bin Yuan, Jieping Ye, Jixing Yu, Qinglin Zhang, Kun Zou, Han Zhao, Shengkui Zhao, Jingren Zhou
2025 J jnl
CoRR
Yunjie Ji, Sitong Zhao, Xiaoyu Tian, Haotian Wang, Shuaiting Chen, Yiping Peng, Han Zhao, Xiangang Li
2025 J jnl
Comput. Networks
Yubo Song, Yuxin Lin, Hongyu Zhu, Han Zhao, Qingyue Yu, Yile Zhang, Dali Deng, Zhefu Deng
2025 J jnl
Neurocomputing
Zihan Wang, Fanheng Kong, Shi Feng, Ming Wang, Xiaocui Yang, Han Zhao, Daling Wang, Yifei Zhang
2025 J jnl
IEEE Trans. Aerosp. Electron. Syst.
Xiaolu Zeng, Han Zhao, Shichao Zhong, Zixiang Yin, Xiaopeng Yang
2025 J jnl
CoRR
Haotian Wang, Han Zhao, Shuaiting Chen, Xiaoyu Tian, Sitong Zhao, Yunjie Ji, Yiping Peng, Xiangang Li
2025 J jnl
CoRR
Xingxuan Li, Yao Xiao, Dianwen Ng, Hai Ye, Yue Deng, Xiang Lin, Bin Wang, Zhanfeng Mo, Chong Zhang, Yueyi Zhang, Zonglin Yang, Ruilin Li, Lei Lei, Shihao Xu, Han Zhao, Weiling Chen, Feng Ji, Lidong Bing
2025 J jnl
Clust. Comput.
Qingzhou Chen, Liguo Yao, Taihua Zhang, Yao Lu, Zhenggong Han, Han Zhao
2025 J jnl
CoRR
Xiaoyu Tian, Yunjie Ji, Haotian Wang, Shuaiting Chen, Sitong Zhao, Yiping Peng, Han Zhao, Xiangang Li
2025 J jnl
CoRR
Boyuan Liu, Feng Ji, Jiayan Nan, Han Zhao, Weiling Chen, Shihao Xu, Xing Zhou
2025 J jnl
Eng. Comput.
Han Zhao, John T. Hwang, Jiun-Shyan Chen
2025 J jnl
Int. J. Digit. Earth
Wangfei Zhang, Mengjin Wang, Jianmin Shi, Feifei Yang, Wei Zhang, Armando Marino, Yueqiu Tian, Yongjie Ji, Han Zhao
2025 J jnl
CoRR
Do-kyum Kim, Han Zhao, Huiji Gao, Liwei He, Malay Haldar, Sanjeev Katariya
2025 C conf
INDIN
Han Zhao, Suyi Zhao, Shuai Tao, Peiming Ning, Jingya Dong
2025 A conf
ICWSM
Mengxiao Zhu, Liu He, Han Zhao, Ruoxiao Su, Licheng Zhang, Bo Hu
2025 J jnl
CoRR
Xiaoyu Tian, Sitong Zhao, Haotian Wang, Shuaiting Chen, Yunjie Ji, Yiping Peng, Han Zhao, Xiangang Li
2024 conf
CIS-RAM
Guoqiang Liu, Huan Yang, Han Zhao, David Wang Zhiwei
2024 J jnl
Adv. Eng. Softw.
Peng Zhang, Han Zhao, Zhanjun Shao, Xiaonan Xie, Huifang Hu, Yingying Zeng, Ping Xiang
2024 J jnl
Adv. Eng. Softw.
Zhanjun Shao, Ping Xiang, Han Zhao, Peng Zhang, Xiaonan Xie, Linxiong Gan, Wenwu Li, Binbin Yin, Kim-Meow Liew
2024 J jnl
Comput. Biol. Medicine
Fei Pan, Yutong Wu, Kangning Cui, Shuxun Chen, Yanfang Li, Yaofang Liu, Adnan Shakoor, Han Zhao, Beijia Lu, Shaohua Zhi, Raymond Honfu Chan, Dong Sun
2024 J jnl
Eng. Comput.
Han Zhao, David Kamensky, John T. Hwang, Jiun-Shyan Chen
2024 conf
ACL (1)
Longwei Zou, Qingyang Wang, Han Zhao, Jiangangkong Jiangangkong, Yi Yang, Yangdong Deng
2024 J jnl
CoRR
Longwei Zou, Qingyang Wang, Han Zhao, Jiangang Kong, Yi Yang, Yangdong Deng
2024 J jnl
NeuroImage
Yu Song, Xia Zhou, Han Zhao, Wenming Zhao, Zhongwu Sun, Jiajia Zhu, Yongqiang Yu
2024 C conf
IGARSS
Feifei Yang, Armando Marino, Yongjie Ji, Jianmin Shi, Han Zhao, Wangfei Zhang
2024 A* conf
AAAI
Han Zhao, Xu Yang, Cheng Deng, Junchi Yan
2024 J jnl
Int. J. Digit. Earth
Yongjie Ji, Lu Wang, Wangfei Zhang, Armando Marino, Mengjin Wang, Jiamin Ma, Jianmin Shi, Qian Jing, Fuxiang Zhang, Han Zhao, Guoran Huang, Feifei Yang, Guoqing Wang
2024 J jnl
CoRR
Zihan Wang, Fanheng Kong, Shi Feng, Ming Wang, Han Zhao, Daling Wang, Yifei Zhang
2024 J jnl
CoRR
Xun Jiang, Feng Li, Han Zhao, Jiaying Wang, Jun Shao, Shihao Xu, Shu Zhang, Weiling Chen, Xavier Tang, Yize Chen, Mengyue Wu, Weizhi Ma, Mengdi Wang, Tianqiao Chen
2024 J jnl
Remote. Sens.
Huantong Geng, Han Zhao, Zhanpeng Shi, Fangli Wu, Liangchao Geng, Kefei Ma
2024 J jnl
IEEE Trans. Ind. Electron.
Huanran Wang, Chunyang Gu, Weiduo Zhao, Shuo Wang, Han Zhao, Giampaolo Buticchi, Chris Gerada, He Zhang
2024 J jnl
ACM Trans. Knowl. Discov. Data
Han Zhao, Xu Yang, Cheng Deng
2024 A conf
ICWS
Kunyin Guo, Han Zhao, Yunni Xia, Yunye Wan, Long Yang, Jiafeng Feng, Yang Yu, Ke Zhang
2024 A* conf
SP
Hadi Givehchian, Nishant Bhaskar, Alexander Redding, Han Zhao, Aaron Schulman, Dinesh Bharadia
2024 J jnl
Mach. Vis. Appl.
Haixia Pan, Han Zhao, Xingyun Wei, Dongdong Zhang, Biao Dong, Jiahua Lan
2024 A conf
CIKM
Dillon Davis, Huiji Gao, Thomas Legrand, Malay Haldar, Alex Deng, Han Zhao, Liwei He, Sanjeev Katariya
2024 J jnl
CoRR
Dillon Davis, Huiji Gao, Weiwei Guo, Thomas Legrand, Malay Haldar, Alex Deng, Han Zhao, Liwei He, Sanjeev Katariya
2024 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Han Zhao, Tingwei Zhang, Yongjie Ji, Wangfei Zhang
2024 J jnl
IEEE Trans. Knowl. Data Eng.
Han Zhao, Xu Yang, Kun Wei, Cheng Deng, Dacheng Tao
2024 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Han Zhao, Xu Yang, Cheng Deng, Dacheng Tao
2024 A* conf
CVPR
Fuli Wan, Han Zhao, Xu Yang, Cheng Deng
2024 A conf
ICWS
Tenghui Wang, Jiafeng Feng, Yong Ma, Yunni Xia, Yang Yu, Yumin Dong, Xifeng Xu, Jinpeng Li, Han Zhao, Mengxuan Dai
2023 conf
CIS-RAM
Guoqiang Liu, Han Zhao, Huan Yang, David Wang Zhiwei, Danwei Wang
2023 conf
CollaborateCom (2)
Han Zhao, Shiyun Shao, Yong Ma, Yunni Xia, Jiajun Su, Lingmeng Liu, Kaiwei Chen, Qinglan Peng
2023 conf
EMNLP (Findings)
Jun Gao, Liuyu Xiang, Huijia Wu, Han Zhao, Yiqi Tong, Zhaofeng He
2023 conf
SysCon
Qingsong Zhao, Qihong Chen, Qunyou Qian, Han Zhao
2023 J jnl
ACM Trans. Asian Low Resour. Lang. Inf. Process.
Kaifang Long, Han Zhao, Zengzhen Shao, Yang Cao, Yanfang Geng, Yintai Sun, Weizhi Xu, Hui Yu
2023 J jnl
Adv. Intell. Syst.
Chunqi Zhang, Hangjie Mo, Liushuai Zheng, Han Zhao, Gang Feng, Dong Sun
2023 J jnl
Concurr. Comput. Pract. Exp.
Juan Chen, Ying Chen, Han Zhao, Tao Ma
2023 J jnl
CoRR
Fei Pan, Yutong Wu, Kangning Cui, Shuxun Chen, Yanfang Li, Yaofang Liu, Adnan Shakoor, Han Zhao, Beijia Lu, Shaohua Zhi, Raymond H. Chan, Dong Sun
2023 C conf
IGARSS
Mengjin Wang, Armando Marino, Wangfei Zhang, Jianmin Shi, Han Zhao, Yongjie Ji
2023 J jnl
Int. J. Appl. Earth Obs. Geoinformation
Jianmin Shi, Wangfei Zhang, Armando Marino, Peng Zeng, Yongjie Ji, Han Zhao, Guoran Huang, Mengjin Wang
2023 conf
ITSC
Huan Yang, Han Zhao, Guoqiang Liu, Yu Wang, Jun Zhang, Mingxing Wen, Guohao Peng, Danwei Wang
2023 J jnl
Eng. Comput.
Grant E. Neighbor, Han Zhao, Mehdi Saraeian, Ming-Chen Hsu, David Kamensky
2023 A* conf
SIGIR
Han Zhao, Qing Cui, Xinyu Li, Rongzhou Bao, Longfei Li, Jun Zhou, Zhehao Liu, Jinghua Feng
2023 J jnl
IEEE Access
Bowen Shi, Xiaoyan Huang, Jing Li, He Zhang, Han Zhao, Xiaochen Zhang, Fengyu Zhang, Chris Gerada
2023 conf
CACRE
Huimin Yu, Han Zhao
2023 conf
CIS-RAM
Huan Yang, Han Zhao, Guoqiang Liu, Yu Wang, Danwei Wang
2022 J jnl
CoRR
Yaofeng Song, Han Zhao, Ruikang Luo, Liping Huang, Yicheng Zhang, Rong Su
2022 J jnl
Comput. Math. Appl.
Han Zhao, Xiangbei Liu, Andrew H. Fletcher, Ru Xiang, John T. Hwang, David Kamensky
2022 J jnl
CoRR
Kaifang Long, Jikun Dong, Shengyu Fan, Yanfang Geng, Yang Cao, Han Zhao, Hui Yu, Weizhi Xu
2022 conf
SemEval@NAACL
Ziming Zhou, Han Zhao, Jingjing Dong, Ning Ding, Xiaolong Liu, Kangli Zhang
2022 conf
ITSC
Huan Yang, Han Zhao, Yu Wang, Guoqiang Liu, Danwei Wang
2022 J jnl
CoRR
Ruikang Luo, Yaofeng Song, Han Zhao, Yicheng Zhang, Yi Zhang, Nanbin Zhao, Liping Huang, Rong Su
2022 conf
MONAMI
Han Zhao, Mengxuan Dai, Kaiwen Ji, Wenshan Wei, Xinghong Jiang, Yong Ma, Yunni Xia, Bingbing He
2022 C conf
ICARCV
Han Zhao, Ruikang Luo, Bowen Yao, Yiyi Wang, Shaoqing Hu, Rong Su
2022 J jnl
CoRR
Jennifer E. Fromm, Nils Wunsch, Ru Xiang, Han Zhao, Kurt Maute, John A. Evans, David Kamensky
2022 conf
ICIT
Han Zhao, He Zhang, Xiaochen Zhang, David Gerada, Jing Li, Jing Zhang
2022 conf
ICEMT
Han Zhao, Kang Li
2022 C conf
ICARCV
Yuzhen Li, Jiawen Tang, Han Zhao, Ruikang Luo
2022 J jnl
Symmetry
Jincheng Tan, Ping Xiang, Han Zhao, Jian Yu, Bailong Ye, Delei Yang
2022 C conf
IGARSS
Wangfei Zhang, Tingwei Zhang, Han Zhao, Yongxin Zhang, Erxue Chen
2021 J jnl
IEEE Access
Han Zhao, Lawu Zhou, Yu Liang, Shuowang Zhang, Mianzhuo Ma
2021 J jnl
CoRR
Xuecong Sun, Han Jia, Yuzhen Yang, Han Zhao, Yafeng Bi, Zhaoyong Sun, Jun Yang
2021 J jnl
BMC Bioinform.
Yongxue Huo, Yikun Zhao, Liwen Xu, Hongmei Yi, Yunlong Zhang, Xianqing Jia, Han Zhao, Jiuran Zhao, Fengge Wang
2021 conf
ITSC
Han Zhao, Huan Yang, Yu Wang, Rong Su, Danwei Wang
2021 J jnl
IEEE Trans. Instrum. Meas.
Ning Chu, Han Zhao, Liang Yu, Qian Huang, Yue Ning
2021 A* conf
IJCAI
Han Zhao, Xu Yang, Zhenru Wang, Erkun Yang, Cheng Deng
2021 J jnl
CoRR
Han Zhao, Lei Guo
2021 J jnl
CoRR
Lei Guo, Han Zhao
2021 J jnl
Sensors
Han Zhao, Xinfa Liu, Changbei Ma
2021 C conf
BIBE
Meng Fang, Peng Zeng, Jinglou Chen, Han Zhao, Haiping Wang, Jing Guo
2021 J jnl
Pers. Ubiquitous Comput.
Yunchuan Sun, Xiaoping Zeng, Siyu Zhou, Han Zhao, Peter Thomas, Haifeng Hu
2021 J jnl
IEEE Access
Han Zhao, Lawu Zhou, Shuowang Zhang, Yu Liang
2020 C conf
IECON
Chunting Jiao, Xiong Wei, Han Zhao, Xiaojie Su
2020 conf
ITSC
Han Zhao, Huan Yang, Yu Wang, Danwei Wang, Rong Su
2020 J jnl
Neural Process. Lett.
Yifu Liu, Chenfeng Xu, Zhihong Chen, Chao Chen, Han Zhao, Xinyu Jin
2020 conf
HCI (6)
Weiqi Zheng, Han Zhao, Yichen Zhang, Jiaxin Ma, Ziyuan Ren
2020 conf
ITSC
Huan Yang, Yu Wang, Han Zhao, Jinlin Zhu, Danwei Wang
2019 J jnl
Sensors
Han Zhao, Mingjian Chen, Changbei Ma
2019 A* conf
VR
Lili Wang, Han Zhao, Zesheng Wang, Jian Wu, Bingqiang Li, Zhiming He, Voicu Popescu
2019 J jnl
IEEE Access
Han Zhao, Shiji Song, Yuli Zhang, Jatinder N. D. Gupta, Anna G. Devlin
2019 J jnl
Asia Pac. J. Oper. Res.
Han Zhao, Shiji Song, Yuli Zhang, Jatinder N. D. Gupta, Anna G. Devlin, Raymond Chiong
2018 J jnl
Sensors
Xinxing Tang, Kefeng Wu, Han Zhao, Mingjian Chen, Changbei Ma
2018 J jnl
IEEE Access
Lisong Wang, Rui Song, Zhao Qu, Han Zhao, Chenmiao Zhai
2017 conf
ASICON
Yongsheng Wang, Qiao Ye, Han Zhao, Xiaowei Liu
2017 J jnl
Int. J. Prod. Res.
Biao Yu, Han Zhao, Deyi Xue
2016 J jnl
IEEE Trans. Veh. Technol.
Weihan Li, Han Zhao, Junjun Deng, Siqi Li, Chunting Chris Mi
2016 J jnl
JOCN
Liangjia Zong, Han Zhao, Yunfei Yan, Zhiyong Feng
2016 conf
OFC
Liangjia Zong, Han Zhao, Zhiyong Feng, Yunfei Yan
2016 C conf
IDEAL
Hui Yang, Xiaobing Sun, Yucong Duan, Han Zhao, Bin Li
2016 J jnl
Int. J. Sens. Networks
Yanli Wei, Han Zhao, Yude Dong
2016 J jnl
IEEE Trans. Ind. Electron.
Siqi Li, Zhe Liu, Han Zhao, Liyan Zhu, Chunyan Shuai, Zheng Chen
2015 C conf
MMSP
Han Zhao, Xiaoguang Li, Li Liu, Li Zhuo
2015 J jnl
CoRR
Xichuan Zhou, Qin Li, Han Zhao, Shengli Li, Lei Yu, Fang Tang, Shengdong Hu, Guojun Li, Yujie Feng
2015 J jnl
Artif. Intell. Rev.
Shifei Ding, Han Zhao, Yanan Zhang, Xinzheng Xu, Ru Nie
2015 J jnl
Biomed. Signal Process. Control.
Liying Fang, Han Zhao, Pu Wang, Mingwei Yu, Jianzhuo Yan, Wenshuai Cheng, Peiyu Chen
2015 J jnl
IEEE Trans. Ind. Electron.
Weihan Li, Han Zhao, Siqi Li, Junjun Deng, Tianze Kan, Chunting Chris Mi
2015 J jnl
Artif. Intell. Rev.
Shifei Ding, Huajuan Huang, Junzhao Yu, Han Zhao
2015 J jnl
IEEE Trans. Image Process.
Fang-Lue Zhang, Jue Wang, Han Zhao, Ralph R. Martin, Shi-Min Hu
2015 A conf
INTERSPEECH
Fei Chen, Nan Yan, Lan Wang, Tao Yang, Jiantao Wu, Han Zhao, Gang Peng
2014 conf
ICME Workshops
Han Zhao, Xiaoguang Li, Li Zhuo
2014 conf
ECOC
Liangjia Zong, Han Zhao, Zhiyong Feng, Shiyi Cao
2014 J jnl
Simul.
Han Zhao, Jeferson A. Souza, Juan Carlos Ordonez
2014 conf
OFC
Liangjia Zong, Gordon Ning Liu, Han Zhao, Teng Ma, Andrew Lord
2014 C conf
ICMLA
Wenshuai Cheng, Liying Fang, Lin Yang, Han Zhao, Pu Wang, Jianzhuo Yan
2013 J jnl
J. Comput.
Yanan Zhang, Shifei Ding, Xinzheng Xu, Han Zhao, Wanqiu Xing
2013 J jnl
J. Softw.
Hong Zhu, Shifei Ding, Han Zhao, Lina Bao
2013 conf
OFC/NFOEC
Bo Wu, Shaofeng Qiu, Zhiyong Feng, Shiyi Cao, Han Zhao, Junling Xiang, Chiwu Ding, Gordon Ning Liu, Ning Deng, Qianjin Xiong
2013 J jnl
Knowl. Based Syst.
Xiaohang Zhang, Ji Zhu, Qi Wang, Han Zhao
2013 J jnl
IEEE Trans. Biomed. Eng.
Xichuan Zhou, Qin Li, Zhenglin Zhu, Han Zhao, Hao Tang, Yujie Feng
2013 J jnl
J. Comput.
Shifei Ding, Junzhao Yu, Huajuan Huang, Han Zhao
2010 conf
BuildSys@SenSys
Younghun Kim, Rahul Balani, Han Zhao, Mani B. Srivastava
2009 conf
HSC
Han Zhao, Jeferson A. Souza, Juan Carlos Ordonez
2008 conf
FSKD (3)
Yanming Wu, Jun Wang, Xiaohong Yin, Han Zhao
tests/conftest.py
← Index tests/conftest.py python
"""
Pytest configuration and shared fixtures for REDB unit tests.
"""
import os
import sys
import pytest
import logging
import tempfile
import hashlib
from unittest.mock import Mock, MagicMock, patch
from pathlib import Path

# Add the project root to the path
sys.path.insert(0, str(Path(__file__).parent.parent))

# Test files directory
TEST_FILES_DIR = Path(__file__).parent.parent / "test_files"


# ============================================================================
# Logger Fixtures
# ============================================================================

@pytest.fixture
def mock_logger():
    """Create a mock logger for testing."""
    logger = Mock()
    logger.debug = Mock()
    logger.info = Mock()
    logger.warning = Mock()
    logger.error = Mock()
    return logger


@pytest.fixture
def real_logger():
    """Create a real logger for testing with debug output."""
    logger = logging.getLogger("test_logger")
    logger.setLevel(logging.DEBUG)
    if not logger.handlers:
        handler = logging.StreamHandler()
        handler.setLevel(logging.DEBUG)
        formatter = logging.Formatter('%(levelname)s - %(message)s')
        handler.setFormatter(formatter)
        logger.addHandler(handler)
    return logger


# ============================================================================
# Test Binary Files Fixtures
# ============================================================================

@pytest.fixture
def elf_binary_path():
    """Path to the ELF test binary."""
    path = TEST_FILES_DIR / "hello"
    if not path.exists():
        pytest.skip(f"Test file not found: {path}")
    return str(path)


@pytest.fixture
def elf_advanced_binary_path():
    """Path to the advanced ELF test binary."""
    path = TEST_FILES_DIR / "hello_advanced"
    if not path.exists():
        pytest.skip(f"Test file not found: {path}")
    return str(path)


@pytest.fixture
def pe_binary_path():
    """Path to the PE test binary (.NET PE)."""
    path = TEST_FILES_DIR / "d8637bdbcfc9112fcb1f0167b398e771"
    if not path.exists():
        pytest.skip(f"Test file not found: {path}")
    return str(path)


@pytest.fixture
def elf_binary_content(elf_binary_path):
    """Read the ELF test binary content."""
    with open(elf_binary_path, "rb") as f:
        return f.read()


@pytest.fixture
def pe_binary_content(pe_binary_path):
    """Read the PE test binary content."""
    with open(pe_binary_path, "rb") as f:
        return f.read()


# ============================================================================
# Temporary Files Fixtures
# ============================================================================

@pytest.fixture
def temp_binary_file():
    """Create a temporary binary file for testing."""
    with tempfile.NamedTemporaryFile(delete=False, suffix=".bin") as f:
        # Write some test data
        f.write(b"\x7fELF" + b"\x00" * 100 + b"test data")
        temp_path = f.name

    yield temp_path

    # Cleanup
    if os.path.exists(temp_path):
        os.unlink(temp_path)


@pytest.fixture
def temp_text_file():
    """Create a temporary text file for testing."""
    with tempfile.NamedTemporaryFile(delete=False, suffix=".txt", mode="w") as f:
        f.write("This is a test file with some text content.")
        temp_path = f.name

    yield temp_path

    # Cleanup
    if os.path.exists(temp_path):
        os.unlink(temp_path)


@pytest.fixture
def temp_pe_like_file():
    """Create a temporary file with PE-like header for testing."""
    with tempfile.NamedTemporaryFile(delete=False, suffix=".exe") as f:
        # MZ header
        f.write(b"MZ" + b"\x00" * 58)
        # e_lfanew pointing to PE header at offset 64
        f.write(b"\x40\x00\x00\x00")
        # PE signature at offset 64
        f.write(b"PE\x00\x00")
        # Minimal COFF header (20 bytes)
        f.write(b"\x4c\x01")  # Machine (i386)
        f.write(b"\x01\x00")  # NumberOfSections
        f.write(b"\x00" * 16)  # Rest of COFF header
        temp_path = f.name

    yield temp_path

    # Cleanup
    if os.path.exists(temp_path):
        os.unlink(temp_path)


# ============================================================================
# Mock Exporter Fixtures
# ============================================================================

@pytest.fixture
def mock_print_exporter(mock_logger):
    """Create a mock PrintExporter."""
    from redb.extractors.database_exporters import PrintExporter
    exporter = PrintExporter(mock_logger, "test_index")
    return exporter


@pytest.fixture
def mock_elasticsearch_exporter(mock_logger):
    """Create a mock ElasticsearchExporter with mocked client."""
    with patch('redb.settings.get_elasticsearch_client') as mock_client:
        mock_client.return_value = Mock()
        from redb.extractors.database_exporters import ElasticsearchExporter
        exporter = ElasticsearchExporter(mock_logger, "test_index")
        return exporter


@pytest.fixture
def mock_clickhouse_exporter(mock_logger):
    """Create a mock ClickHouseExporter with mocked client."""
    with patch('redb.settings.create_clickhouse_client') as mock_client:
        mock_client.return_value = Mock()
        from redb.extractors.database_exporters import ClickHouseExporter
        exporter = ClickHouseExporter(mock_logger, "test_index", client=Mock())
        return exporter


# ============================================================================
# Mock Settings Fixtures
# ============================================================================

@pytest.fixture
def mock_settings():
    """Mock the redb.settings module."""
    with patch.multiple(
        'redb.settings',
        ELASTIC_BINARIES_COLLECTION="test_collection",
        get_elasticsearch_client=Mock(return_value=Mock()),
        create_clickhouse_client=Mock(return_value=Mock()),
    ):
        yield


# ============================================================================
# Hash Fixtures
# ============================================================================

@pytest.fixture
def known_hashes(elf_binary_content):
    """Compute known hashes for the ELF test binary."""
    return {
        'md5': hashlib.md5(elf_binary_content).hexdigest(),
        'sha1': hashlib.sha1(elf_binary_content).hexdigest(),
        'sha256': hashlib.sha256(elf_binary_content).hexdigest(),
    }


@pytest.fixture
def pe_known_hashes(pe_binary_content):
    """Compute known hashes for the PE test binary."""
    return {
        'md5': hashlib.md5(pe_binary_content).hexdigest(),
        'sha1': hashlib.sha1(pe_binary_content).hexdigest(),
        'sha256': hashlib.sha256(pe_binary_content).hexdigest(),
    }


# ============================================================================
# Sample Data Fixtures
# ============================================================================

@pytest.fixture
def sample_binary_data():
    """Sample binary data for entropy and hash testing."""
    return b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" * 16


@pytest.fixture
def high_entropy_data():
    """High entropy random-like data for testing."""
    import random
    random.seed(42)  # Reproducible
    return bytes(random.randint(0, 255) for _ in range(256))


@pytest.fixture
def low_entropy_data():
    """Low entropy repetitive data for testing."""
    return b"\x00" * 256


# ============================================================================
# PE Object Fixtures
# ============================================================================

@pytest.fixture
def pe_object(pe_binary_path):
    """Create a pefile PE object for testing."""
    import pefile
    try:
        pe = pefile.PE(pe_binary_path)
        yield pe
        pe.close()
    except Exception as e:
        pytest.skip(f"Failed to parse PE file: {e}")


# ============================================================================
# ELF Object Fixtures
# ============================================================================

@pytest.fixture
def elf_object(elf_binary_path):
    """Create an ELFFile object for testing."""
    from elftools.elf.elffile import ELFFile
    try:
        with open(elf_binary_path, 'rb') as f:
            elf = ELFFile(f)
            # We need to keep the file open for ELFFile to work
            yield elf
    except Exception as e:
        pytest.skip(f"Failed to parse ELF file: {e}")


# ============================================================================
# Dataclass Fixtures
# ============================================================================

@pytest.fixture
def sample_hash_dataclass():
    """Create a sample Hash dataclass."""
    from redb.models.dataclasses import Hash
    return Hash(
        md5="d41d8cd98f00b204e9800998ecf8427e",
        sha1="da39a3ee5e6b4b0d3255bfef95601890afd80709",
        sha256="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    )


@pytest.fixture
def sample_hashes_dataclass():
    """Create a sample Hashes dataclass."""
    from redb.models.dataclasses import Hashes
    return Hashes(
        md5="d41d8cd98f00b204e9800998ecf8427e",
        sha1="da39a3ee5e6b4b0d3255bfef95601890afd80709",
        sha256="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
        ssdeep_hash="3::",
        tlsh_hash=""
    )


@pytest.fixture
def sample_basic_properties():
    """Create a sample BasicProperties dataclass."""
    from redb.models.dataclasses import BasicProperties
    return BasicProperties(
        filename="test.exe",
        sample_name="test.exe",
        filesize=1024,
        filetype="PE32 executable",
        filetype_mime="application/x-dosexec",
        filetype_magika="pebin",
        file_entropy=6.5
    )


# ============================================================================
# Utility Functions for Tests
# ============================================================================

def compute_entropy(data):
    """Compute entropy of data for verification in tests."""
    import math
    from collections import Counter

    if not data:
        return 0.0

    if isinstance(data, str):
        counts = Counter(data)
        frequencies = (i / len(data) for i in counts.values())
        return -sum(f * math.log(f, 2) for f in frequencies)
    else:
        occurrences = Counter(bytearray(data))
        entropy = 0
        for x in occurrences.values():
            p_x = float(x) / len(data)
            entropy -= p_x * math.log(p_x, 2)
        return entropy


# Make the function available as a fixture
@pytest.fixture
def entropy_calculator():
    """Return the entropy calculation function."""
    return compute_entropy


# ============================================================================
# Skip Markers
# ============================================================================

# Mark tests that require external tools
requires_die = pytest.mark.skipif(
    not os.path.exists("/usr/bin/diec") and not os.path.exists("/usr/local/bin/diec"),
    reason="Detect It Easy (diec) not installed"
)

requires_capa = pytest.mark.skipif(
    not os.path.exists("/usr/bin/capa") and not os.path.exists("/usr/local/bin/capa"),
    reason="capa not installed"
)

requires_floss = pytest.mark.skipif(
    not os.path.exists("/usr/bin/floss") and not os.path.exists("/usr/local/bin/floss"),
    reason="floss not installed"
)