macs3-project/MACS

Two lines in Signal/PeakVariants.pyx causing installation errors

franciskim-yonsei opened this issue · 1 comments

Since I eventually managed to fix the bug, I will be brief in describing the problem itself.

When installing MACS3-3.0.0b2 via pip, the following error message occurred:

[14/25] Cythonizing MACS3/Signal/PeakVariants.pyx
      Traceback (most recent call last):
        File "/home/user/envs/macs2/lib/python3.10/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 363, in <module>
          main()
        File "/home/user/envs/macs2/lib/python3.10/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 345, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
        File "/home/user/envs/macs2/lib/python3.10/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 130, in get_requires_for_build_wheel
          return hook(config_settings)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 341, in get_requires_for_build_wheel
          return self._get_build_requires(config_settings, requirements=['wheel'])
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 323, in _get_build_requires
          self.run_setup()
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 487, in run_setup
          super(_BuildMetaLegacyBackend,
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 338, in run_setup
          exec(code, locals())
        File "<string>", line 156, in <module>
        File "<string>", line 152, in main
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Build/Dependencies.py", line 1134, in cythonize
          cythonize_one(*args)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Build/Dependencies.py", line 1280, in cythonize_one
          result = compile_single(pyx_file, options, full_module_name=full_module_name)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Main.py", line 615, in compile_single
          return run_pipeline(source, options, full_module_name)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Main.py", line 539, in run_pipeline
          err, enddata = Pipeline.run_pipeline(pipeline, source)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Pipeline.py", line 398, in run_pipeline
          data = run(phase, data)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Pipeline.py", line 375, in run
          return phase(data)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Pipeline.py", line 52, in generate_pyx_code_stage
          module_node.process_implementation(options, result)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/ModuleNode.py", line 222, in process_implementation
          self.generate_c_code(env, options, result)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/ModuleNode.py", line 516, in generate_c_code
          self.body.generate_function_definitions(env, code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 404, in generate_function_definitions
          stat.generate_function_definitions(env, code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 5497, in generate_function_definitions
          self.body.generate_function_definitions(self.scope, code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 404, in generate_function_definitions
          stat.generate_function_definitions(env, code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 404, in generate_function_definitions
          stat.generate_function_definitions(env, code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 2197, in generate_function_definitions
          self.generate_function_body(env, code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 1953, in generate_function_body
          self.body.generate_execution_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 410, in generate_execution_code
          stat.generate_execution_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 410, in generate_execution_code
          stat.generate_execution_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 7528, in generate_execution_code
          self.body.generate_execution_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 410, in generate_execution_code
          stat.generate_execution_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 7109, in generate_execution_code
          if_clause.generate_execution_code(code, end_label, is_last=i == last)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 7156, in generate_execution_code
          self.body.generate_execution_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 410, in generate_execution_code
          stat.generate_execution_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 7109, in generate_execution_code
          if_clause.generate_execution_code(code, end_label, is_last=i == last)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 7156, in generate_execution_code
          self.body.generate_execution_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 410, in generate_execution_code
          stat.generate_execution_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 7109, in generate_execution_code
          if_clause.generate_execution_code(code, end_label, is_last=i == last)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 7156, in generate_execution_code
          self.body.generate_execution_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 410, in generate_execution_code
          stat.generate_execution_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 5998, in generate_execution_code
          self.generate_rhs_evaluation_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/Nodes.py", line 6297, in generate_rhs_evaluation_code
          self.rhs.generate_evaluation_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/ExprNodes.py", line 11840, in generate_evaluation_code
          super(NumBinopNode, self).generate_evaluation_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/ExprNodes.py", line 831, in generate_evaluation_code
          self.generate_subexpr_evaluation_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/ExprNodes.py", line 846, in generate_subexpr_evaluation_code
          node.generate_evaluation_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/ExprNodes.py", line 831, in generate_evaluation_code
          self.generate_subexpr_evaluation_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/ExprNodes.py", line 846, in generate_subexpr_evaluation_code
          node.generate_evaluation_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/ExprNodes.py", line 837, in generate_evaluation_code
          self.generate_result_code(code)
        File "/tmp/pip-build-env-axzar69u/overlay/lib/python3.10/site-packages/Cython/Compiler/ExprNodes.py", line 4498, in generate_result_code
          assert False, "unexpected type %s and base type %s for indexing (%s)" % (
      AssertionError: unexpected type Py_UCS4 and base type Python object for indexing ((<FileSourceDescriptor:/home/user/envs/macs2/lib/python3.10/site-packages/MACS3-3.0.0b2/MACS3/Signal/PeakVariants.pyx>, 326, 79))

I asked ChatGPT to identify and fix the error, and eventually found out that changing lines 326 & 327 in PeakVariants.pyx into the following resolved the problem.

self.d_Variants[ p-1 ]["ref_allele"] = str(self.refseq).encode('ascii', 'ignore').decode()[ p - self.start ] + self.d_Variants[ p-1 ]["ref_allele"]
self.d_Variants[ p-1 ]["alt_allele"] = str(self.refseq).encode('ascii', 'ignore').decode()[ p - self.start ]

Since I have limited knowledge in programming, I don't know exactly what was the root cause of the problem. I am also perplexed that there seems to be virtually nobody that have faced a similar issue. Nevertheless, I decided to share my experiences just in case it could help someone in trouble.

System (please complete the following information):

  • OS: Linux
  • Python version: 3.11.4 (but the same phenomenon could be reproduced also in environments using 3.10 or 3.9)
  • Numpy version: 1.25.1
  • MACS Version: 3.0.0b2
taoliu commented

@franciskim-yonsei This is caused by the recent major upgrade of Cython to version 3, related to #568 and #569. We will post a new MACS3 version to address this. Thanks!