Python Forum
Very strange error of indentation - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Very strange error of indentation (/thread-16954.html)

Pages: 1 2


Very strange error of indentation - samsonite - Mar-21-2019

Reference is made to the python code listed here http://reionization.org/wp-content/uploads/2013/03/HERA_Memo46_lst2ra.html and, in details, to this piece one http://imgbox.com/uaj4dzLS
By running the file below, and being checked the proper indentations which match the original, surprisingly I obtain next awful prompt:

Output:
C:\Training>python bryna.py File "bryna.py", line 35 return cirs_ra ^ TabError: inconsistent use of tabs and spaces in indentation
Where is my fault? Thx in advance

# ---------bryna.py ------------
import numpy as np
from astropy.coordinates import SkyCoord, Angle, EarthLocation
from astropy.time import Time
from astropy import units
#
mjd = 55780.1
latitude = Angle('-26d42m11.94986s')
longitude = Angle('116d40m14.93485s')
#
obs_time = Time(mjd, format='mjd', location = (longitude, latitude))
lst_apparent = obs_time.sidereal_time('apparent')
print(lst_apparent)
#  Output1: 7h11m46.2716s
#
# The frame radio astronomers call the apparent or current epoch is the
# "true equator & equinox" frame, notated E_gamma in the USNO circular 179
# (http://aa.usno.navy.mil/publications/docs/Circular_179.php)
# astropy doesn't have this frame but it's pretty easy to adapt the CIRS frame
# by modifying the ra to reflect the difference between
# GAST (Grenwich Apparent Sidereal Time) and the earth rotation angle (theta).
# The earth rotation angle is most clearly explained in the 2nd paragraph of Chapter 6
# of the USNO circular (page 50)
# The relationship between E_gamma and CIRS is shown in the figure on page 57 of the circular

def egamma_to_cirs_ra(egamma_ra, time):
    from astropy import _erfa as erfa
    from astropy.coordinates.builtin_frames.utils import get_jd12
    era = erfa.era00(*get_jd12(Time(mjd, format='mjd'), 'ut1'))
    theta_earth = Angle(era, unit='rad')

    assert(isinstance(time, Time))
    gast = time.sidereal_time('apparent', longitude=0)
    cirs_ra = egamma_ra - (gast-theta_earth)
	return cirs_ra

# If we define a source at RA = apparent LST and Dec = latitude it should be at zenith
loc_obj = EarthLocation.from_geodetic(lon=longitude, lat=latitude)
# use CIRS but with a different ra to account for the difference between LST & earth's rotation angle
cirs_ra = egamma_to_cirs_ra(lst_apparent, Time(mjd, format='mjd'))

egamma_zenith_coord = SkyCoord(ra=cirs_ra, dec=latitude, frame='cirs',
                               obstime=Time(mjd, format='mjd'), location = loc_obj)
egamma_zenith_coord
# Output2
#<SkyCoord (CIRS: obstime=55780.1): (ra, dec) in deg
#    (107.78961213, -26.70331941)>
#
# check where it is in altaz (should be near zenith):
egamma_zenith_altaz = egamma_zenith_coord.transform_to('altaz')
egamma_zenith_altaz
# Output3
#<SkyCoord (AltAz: obstime=55780.1, location=(-2559302.5737783727, 5095070.526830904, -2848887.400942108) m, pressure=0.0 hPa, temperature=0.0 deg_C, relative_humidity=0, obswl=1.0 micron): (az, alt) in deg
#    (28.60732437, 89.99985797)>
#
(egamma_zenith_altaz.alt - Angle('90d')).to_string(unit=units.degree, sep=('deg', 'm', 's'))
# Output4
# '-0deg00m00.5113s'
#
# ------ EOF: bryna.py ----------



RE: Very strange error of indentation - ichabod801 - Mar-21-2019

I'm not sure we can tell. I think the code plug-in automatically converts tabs to spaces. All the indentation I am seeing is spaces.

What to do in this situation is to find the settings in your editor that make white space visible, or show hidden characters. Then you can see where the different indentation is. Alternatively, you can just per-emptively change all tabs to four spaces.


RE: Very strange error of indentation - samsonite - Mar-21-2019

My editor (geany) doesn't show anomalies, as per this screenshot http://imgbox.com/GUsclMUy
Thank you, administrator.


RE: Very strange error of indentation - ichabod801 - Mar-21-2019

You are only showing line endings. You need to also show whitespace.


RE: Very strange error of indentation - buran - Mar-21-2019

The problem is you have mixed tabs and spaces. Use just spaces. Normally editors have option to convert tab to spaces.
(Mar-21-2019, 07:11 PM)samsonite Wrote: My editor (geany) doesn't show anomalies,
Note, it's not that indentation level is incorrect, but that you have mix of tabs and space.


RE: Very strange error of indentation - samsonite - Mar-21-2019

Nothing changes clicking On/Off white spaces, unfortunately. The figure shows white spaces settled on: http://imgbox.com/5uquVik4


RE: Very strange error of indentation - snippsat - Mar-21-2019

There is no error(inconsistent use of tabs and space) in code you posted.
As i did install astropy as test in your other thread i can run code.
Code is from a Jupyter Notebook,so running as script need to add print() to get output.
# ---------bryna.py ------------
import numpy as np
from astropy.coordinates import SkyCoord, Angle, EarthLocation
from astropy.time import Time
from astropy import units
#
mjd = 55780.1
latitude = Angle('-26d42m11.94986s')
longitude = Angle('116d40m14.93485s')
#
obs_time = Time(mjd, format='mjd', location = (longitude, latitude))
lst_apparent = obs_time.sidereal_time('apparent')
print(lst_apparent)
#  Output1: 7h11m46.2716s
#
# The frame radio astronomers call the apparent or current epoch is the
# "true equator & equinox" frame, notated E_gamma in the USNO circular 179
# (http://aa.usno.navy.mil/publications/docs/Circular_179.php)
# astropy doesn't have this frame but it's pretty easy to adapt the CIRS frame
# by modifying the ra to reflect the difference between
# GAST (Grenwich Apparent Sidereal Time) and the earth rotation angle (theta).
# The earth rotation angle is most clearly explained in the 2nd paragraph of Chapter 6
# of the USNO circular (page 50)
# The relationship between E_gamma and CIRS is shown in the figure on page 57 of the circular
 
def egamma_to_cirs_ra(egamma_ra, time):
    from astropy import _erfa as erfa
    from astropy.coordinates.builtin_frames.utils import get_jd12
    era = erfa.era00(*get_jd12(Time(mjd, format='mjd'), 'ut1'))
    theta_earth = Angle(era, unit='rad')
 
    assert(isinstance(time, Time))
    gast = time.sidereal_time('apparent', longitude=0)
    cirs_ra = egamma_ra - (gast-theta_earth)
    return cirs_ra    
 
# If we define a source at RA = apparent LST and Dec = latitude it should be at zenith
loc_obj = EarthLocation.from_geodetic(lon=longitude, lat=latitude)
# use CIRS but with a different ra to account for the difference between LST & earth's rotation angle
cirs_ra = egamma_to_cirs_ra(lst_apparent, Time(mjd, format='mjd'))
 
egamma_zenith_coord = SkyCoord(ra=cirs_ra, dec=latitude, frame='cirs', 
                               obstime=Time(mjd, format='mjd'), location = loc_obj)
print('-' * 20)                               
print(egamma_zenith_coord)
# Output2
#<SkyCoord (CIRS: obstime=55780.1): (ra, dec) in deg
#    (107.78961213, -26.70331941)>
#
# check where it is in altaz (should be near zenith):
egamma_zenith_altaz = egamma_zenith_coord.transform_to('altaz')
print('-' * 20)
print(egamma_zenith_altaz)
# Output3
#<SkyCoord (AltAz: obstime=55780.1, location=(-2559302.5737783727, 5095070.526830904, -2848887.400942108) m, pressure=0.0 hPa, temperature=0.0 deg_C, relative_humidity=0, obswl=1.0 micron): (az, alt) in deg
#    (28.60732437, 89.99985797)>
#
n = (egamma_zenith_altaz.alt - Angle('90d')).to_string(unit=units.degree, sep=('deg', 'm', 's'))
print('-' * 20)
print(n)
# Output4
# '-0deg00m00.5113s'
#
# ------ EOF: bryna.py ----------
Test:
Output:
(del_env) E:\div_code\del_env λ python as.py 7h11m46.2716s -------------------- <SkyCoord (CIRS: obstime=55780.1): (ra, dec) in deg (107.78961179, -26.70331941)> -------------------- <SkyCoord (AltAz: obstime=55780.1, location=(-2559302.57377837, 5095070.5268309, -2848887.40094211) m, pressure=0.0 hPa, temperature=0.0 deg_C, relative_humidity=0.0, obswl=1.0 micron): (az, alt) in deg (28.60357927, 89.99985796)> -------------------- -0deg00m00.5114s



RE: Very strange error of indentation - ichabod801 - Mar-21-2019

Then change all tabs to spaces. You should be able to do replace all with '\t' to ' '.


RE: Very strange error of indentation - buran - Mar-21-2019

(Mar-21-2019, 07:59 PM)samsonite Wrote: Nothing changes clicking On/Off white spaces, unfortunately. The figure shows white spaces settled on: http://imgbox.com/5uquVik4
on line 35 from the picture you have tab! all others are spaces


RE: Very strange error of indentation - samsonite - Mar-21-2019

Oh yes, snippsat code, renamed br.py, works properly! Thanks all
# ---------br.py ------------
import numpy as np
from astropy.coordinates import SkyCoord, Angle, EarthLocation
from astropy.time import Time
from astropy import units
#
mjd = 55780.1
latitude = Angle('-26d42m11.94986s')
longitude = Angle('116d40m14.93485s')
#
obs_time = Time(mjd, format='mjd', location = (longitude, latitude))
lst_apparent = obs_time.sidereal_time('apparent')
print(lst_apparent)
#  Output1: 7h11m46.2716s
#
# The frame radio astronomers call the apparent or current epoch is the
# "true equator & equinox" frame, notated E_gamma in the USNO circular 179
# (http://aa.usno.navy.mil/publications/docs/Circular_179.php)
# astropy doesn't have this frame but it's pretty easy to adapt the CIRS frame
# by modifying the ra to reflect the difference between
# GAST (Grenwich Apparent Sidereal Time) and the earth rotation angle (theta).
# The earth rotation angle is most clearly explained in the 2nd paragraph of Chapter 6
# of the USNO circular (page 50)
# The relationship between E_gamma and CIRS is shown in the figure on page 57 of the circular
  
def egamma_to_cirs_ra(egamma_ra, time):
    from astropy import _erfa as erfa
    from astropy.coordinates.builtin_frames.utils import get_jd12
    era = erfa.era00(*get_jd12(Time(mjd, format='mjd'), 'ut1'))
    theta_earth = Angle(era, unit='rad')
  
    assert(isinstance(time, Time))
    gast = time.sidereal_time('apparent', longitude=0)
    cirs_ra = egamma_ra - (gast-theta_earth)
    return cirs_ra    
  
# If we define a source at RA = apparent LST and Dec = latitude it should be at zenith
loc_obj = EarthLocation.from_geodetic(lon=longitude, lat=latitude)
# use CIRS but with a different ra to account for the difference between LST & earth's rotation angle
cirs_ra = egamma_to_cirs_ra(lst_apparent, Time(mjd, format='mjd'))
  
egamma_zenith_coord = SkyCoord(ra=cirs_ra, dec=latitude, frame='cirs', 
                               obstime=Time(mjd, format='mjd'), location = loc_obj)
print('-' * 20)                               
print(egamma_zenith_coord)
# Output2
#<SkyCoord (CIRS: obstime=55780.1): (ra, dec) in deg
#    (107.78961213, -26.70331941)>
#
# check where it is in altaz (should be near zenith):
egamma_zenith_altaz = egamma_zenith_coord.transform_to('altaz')
print('-' * 20)
print(egamma_zenith_altaz)
# Output3
#<SkyCoord (AltAz: obstime=55780.1, location=(-2559302.5737783727, 5095070.526830904, -2848887.400942108) m, pressure=0.0 hPa, temperature=0.0 deg_C, relative_humidity=0, obswl=1.0 micron): (az, alt) in deg
#    (28.60732437, 89.99985797)>
#
n = (egamma_zenith_altaz.alt - Angle('90d')).to_string(unit=units.degree, sep=('deg', 'm', 's'))
print('-' * 20)
print(n)
# Output4
# '-0deg00m00.5113s'
#
# ------ EOF: br.py ----------
#
# ----------- OUTPUT -------------
#C:\Training>python br.py
#7h11m46.2716s
#--------------------
#<SkyCoord (CIRS: obstime=55780.1): (ra, dec) in deg
#    (107.78961179, -26.70331941)>
#--------------------
#<SkyCoord (AltAz: obstime=55780.1, location=(-2559302.57377837, 5095070.5268309, -2848887.40094211) m, pressure=0.0 h
#Pa, temperature=0.0 deg_C, relative_humidity=0.0, obswl=1.0 micron): (az, alt) in deg
#    (28.60357927, 89.99985796)>
#--------------------
#-0deg00m00.5114s
# ---------------------------