ratt-ru / CubiCal

A fast radio interferometric calibration suite.
GNU General Public License v2.0
18 stars 13 forks source link

Importing a gain machine directly causes a circular import #413

Closed JSKenyon closed 3 years ago

JSKenyon commented 3 years ago

The following:

from cubical.machines.interval_gain_machine import PerIntervalGains

causes

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-4-c7a8e8cd8613> in <module>
----> 1 from cubical.machines.interval_gain_machine import PerIntervalGains

~/venvs/v1env/lib/python3.6/site-packages/cubical/machines/interval_gain_machine.py in <module>
      7 import numpy as np
      8 from cubical.flagging import FL
----> 9 from cubical.machines.abstract_machine import MasterMachine
     10 import cubical.kernels
     11 from cubical.solver import log

~/venvs/v1env/lib/python3.6/site-packages/cubical/machines/abstract_machine.py in <module>
     14 
     15 from cubical.tools import logger, ModColor
---> 16 from cubical.main import expand_templated_name
     17 
     18 log = logger.getLogger("gain_machine")

~/venvs/v1env/lib/python3.6/site-packages/cubical/main.py in <module>
    102 from cubical.data_handler.wisdom import estimate_mem
    103 from cubical.tools import parsets, dynoptparse, shm_utils, ModColor
--> 104 from cubical.machines import machine_types
    105 from cubical.machines import jones_chain_machine, jones_chain_robust_machine
    106 from cubical.machines import ifr_gain_machine

~/venvs/v1env/lib/python3.6/site-packages/cubical/machines/machine_types.py in <module>
----> 1 from . import complex_2x2_machine
      2 from . import complex_W_2x2_machine
      3 from . import pol_gain_machine
      4 from . import phase_diag_machine
      5 from . import slope_machine

~/venvs/v1env/lib/python3.6/site-packages/cubical/machines/complex_2x2_machine.py in <module>
      4 # This code is distributed under the terms of GPLv2, see LICENSE.md for details
      5 from __future__ import print_function
----> 6 from cubical.machines.interval_gain_machine import PerIntervalGains
      7 import numpy as np
      8 import numpy.ma as ma

ImportError: cannot import name 'PerIntervalGains'

@o-smirnov I am going to assign this one to you as this seems to be in your code. I think the issue stems from from cubical.main import expand_templated_name as this means a submodule is importing main which is dangerous. This should likely just be split out into tools.

JSKenyon commented 3 years ago

Fixed by #414.