astroquery icon indicating copy to clipboard operation
astroquery copied to clipboard

Vizier.find_catalogs doesn't find Gaia DR3

Open jkrick opened this issue 3 years ago • 3 comments

I get UnitsWarnings, and I see those in other issues. But, I also get ValueErrors and TableParseError, with the result that no table is returned although I see on the Vizier website that they do have the table available.

Here is my code (straight from the documentation): gaia_catalog_list = Vizier.find_catalogs('GAIA DR3') print({k:v.description for k,v in gaia_catalog_list.items()})

The last error I get is TableParseError: Failed to parse VIZIER result! The raw response can be found in self.response, and the error in self.table_parse_error. The attempted parsed result is in self.parsed_result. Exception: 3520:4: not well-formed (invalid token)

And I do see that astroquery.gaia exists, but I want to use xmatch with the gaia catalog, which I think I have to do through vizier since I do not have a gaia login.

jkrick avatar Aug 05 '22 23:08 jkrick

@jkrick please post the full tracebacks for errors like this.

This looks like an upstream error:

from astroquery.vizier import Vizier
result = Vizier(catalog='IV/38/tic').query_constraints_async(TIC='1402786096')
Vizier.response.text.split("\n")[-13:]
['<INFO name="QUERY_STATUS" value="ERROR">',
 '',
 ' --POSTGRES MSG db=2',
 ' Report from: stdb_pg,     Status: STDB_ERR',
 'ERROR:  relation "ssoobservation" does not exist LINE 1: ..._gaia, vy_gaia, vz_g',
 'aia, position_angle_scan From SsoObserva...',
 '                         ^',
 'ERROR:  relation "ssoobservation" does not exist LINE 1: ..._gaia, vy_gaia, vz_g',
 'aia, position_angle_scan From SsoObserva...',
 '                         ^',
 '</INFO>',
 '</VOTABLE>',
 '']

keflavich avatar Aug 05 '22 23:08 keflavich

ok, full tracebacks below:

`WARNING: UnitsWarning: The unit 'ph' has been deprecated in the VOUnit standard. [astropy.units.format.utils]
/opt/conda/lib/python3.8/site-packages/astroquery/vizier/core.py:769: UserWarning: VOTABLE parsing raised exception: 3520:4: not well-formed (invalid token)
  warnings.warn("VOTABLE parsing raised exception: {0}".format(ex))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/opt/conda/lib/python3.8/site-packages/astroquery/vizier/core.py in parse_vizier_votable(data, verbose, invalid, get_catalog_names)
    766         try:
--> 767             vo_tree = votable.parse(tf, verify='warn', invalid='exception')
    768         except Exception as ex:

/opt/conda/lib/python3.8/site-packages/astropy/utils/decorators.py in wrapper(*args, **kwargs)
    545 
--> 546             return function(*args, **kwargs)
    547 

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/table.py in parse(source, columns, invalid, verify, chunk_size, table_number, table_id, filename, unit_format, datatype_mapping, _debug_python_based_parser)
    158             _debug_python_based_parser=_debug_python_based_parser) as iterator:
--> 159         return tree.VOTableFile(
    160             config=config, pos=(1, 1)).parse(iterator, config)

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/tree.py in parse(self, iterator, config)
   3615             if start:
-> 3616                 tag_mapping.get(tag, self._add_unknown_tag)(
   3617                     iterator, tag, data, config, pos)

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/tree.py in _add_resource(self, iterator, tag, data, config, pos)
   3494         self.resources.append(resource)
-> 3495         resource.parse(self, iterator, config)
   3496 

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/tree.py in parse(self, votable, iterator, config)
   3292             if start:
-> 3293                 tag_mapping.get(tag, self._add_unknown_tag)(
   3294                     iterator, tag, data, config, pos)

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/tree.py in _add_table(self, iterator, tag, data, config, pos)
   3238         self.tables.append(table)
-> 3239         table.parse(iterator, config)
   3240 

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/tree.py in parse(self, iterator, config)
   2468 
-> 2469                     tag_mapping.get(tag, self._add_unknown_tag)(
   2470                         iterator, tag, data, config, pos)

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/tree.py in _add_field(self, iterator, tag, data, config, pos)
   2384         self.fields.append(field)
-> 2385         field.parse(iterator, config)
   2386 

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/tree.py in parse(self, iterator, config)
   1475     def parse(self, iterator, config):
-> 1476         for start, tag, data, pos in iterator:
   1477             if start:

ValueError: 3520:4: not well-formed (invalid token)

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
/opt/conda/lib/python3.8/site-packages/astroquery/vizier/core.py in _parse_result(self, response, get_catalog_names, verbose, invalid)
    698             try:
--> 699                 return parse_vizier_votable(
    700                     response.content, verbose=verbose, invalid=invalid,

/opt/conda/lib/python3.8/site-packages/astroquery/vizier/core.py in parse_vizier_votable(data, verbose, invalid, get_catalog_names)
    769             warnings.warn("VOTABLE parsing raised exception: {0}".format(ex))
--> 770             vo_tree = votable.parse(tf, verify='warn', invalid='mask')
    771     elif invalid == 'exception':

/opt/conda/lib/python3.8/site-packages/astropy/utils/decorators.py in wrapper(*args, **kwargs)
    545 
--> 546             return function(*args, **kwargs)
    547 

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/table.py in parse(source, columns, invalid, verify, chunk_size, table_number, table_id, filename, unit_format, datatype_mapping, _debug_python_based_parser)
    158             _debug_python_based_parser=_debug_python_based_parser) as iterator:
--> 159         return tree.VOTableFile(
    160             config=config, pos=(1, 1)).parse(iterator, config)

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/tree.py in parse(self, iterator, config)
   3615             if start:
-> 3616                 tag_mapping.get(tag, self._add_unknown_tag)(
   3617                     iterator, tag, data, config, pos)

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/tree.py in _add_resource(self, iterator, tag, data, config, pos)
   3494         self.resources.append(resource)
-> 3495         resource.parse(self, iterator, config)
   3496 

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/tree.py in parse(self, votable, iterator, config)
   3292             if start:
-> 3293                 tag_mapping.get(tag, self._add_unknown_tag)(
   3294                     iterator, tag, data, config, pos)

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/tree.py in _add_table(self, iterator, tag, data, config, pos)
   3238         self.tables.append(table)
-> 3239         table.parse(iterator, config)
   3240 

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/tree.py in parse(self, iterator, config)
   2468 
-> 2469                     tag_mapping.get(tag, self._add_unknown_tag)(
   2470                         iterator, tag, data, config, pos)

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/tree.py in _add_field(self, iterator, tag, data, config, pos)
   2384         self.fields.append(field)
-> 2385         field.parse(iterator, config)
   2386 

/opt/conda/lib/python3.8/site-packages/astropy/io/votable/tree.py in parse(self, iterator, config)
   1475     def parse(self, iterator, config):
-> 1476         for start, tag, data, pos in iterator:
   1477             if start:

ValueError: 3520:4: not well-formed (invalid token)

During handling of the above exception, another exception occurred:

TableParseError                           Traceback (most recent call last)
<ipython-input-16-7c9279157fc9> in <module>
----> 1 gaia_catalog_list = Vizier.find_catalogs('GAIA DR3')
      2 #print({k:v.description for k,v in gaia_catalog_list.items()})

/opt/conda/lib/python3.8/site-packages/astroquery/vizier/core.py in find_catalogs(self, keywords, include_obsolete, verbose, max_catalogs, return_type)
    233                              "setting max_catalogs to a large number and"
    234                              " try again")
--> 235         result = self._parse_result(response, verbose=verbose,
    236                                     get_catalog_names=True)
    237 

/opt/conda/lib/python3.8/site-packages/astroquery/vizier/core.py in _parse_result(self, response, get_catalog_names, verbose, invalid)
    703                 self.response = response
    704                 self.table_parse_error = ex
--> 705                 raise TableParseError("Failed to parse VIZIER result! The "
    706                                       "raw response can be found in "
    707                                       "self.response, and the error in "

TableParseError: Failed to parse VIZIER result! The raw response can be found in self.response, and the error in self.table_parse_error. The attempted parsed result is in self.parsed_result.
 Exception: 3520:4: not well-formed (invalid token)`

jkrick avatar Aug 08 '22 16:08 jkrick

@fgrollier Can you comment on what's going wrong here?

keflavich avatar Aug 08 '22 17:08 keflavich

The upstream part has been fixed, at least Adams example now works.

But the actual query and it's resulted VOtable from the OP is still not parsed properly, so I change the labels for this to be a bug.

In [20]: gaia_catalog_list = Vizier.find_catalogs('GAIA DR3')
/Users/bsipocz/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/units/format/utils.py:220: UnitsWarning: The unit 'ph' has been deprecated in the VOUnit standard.
  warnings.warn(message, UnitsWarning)
/Users/bsipocz/munka/devel/astroquery/astroquery/vizier/core.py:750: UserWarning: VOTABLE parsing raised exception: 3524:4: not well-formed (invalid token)
  warnings.warn("VOTABLE parsing raised exception: {0}".format(ex))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
File ~/munka/devel/astroquery/astroquery/vizier/core.py:748, in _parse_vizier_votable(data, verbose, invalid, get_catalog_names)
    747 try:
--> 748     vo_tree = votable.parse(tf, verify='warn', invalid='exception')
    749 except Exception as ex:

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/utils/decorators.py:607, in deprecated_renamed_argument.<locals>.decorator.<locals>.wrapper(*args, **kwargs)
    605         warnings.warn(msg, warning_type, stacklevel=2)
--> 607 return function(*args, **kwargs)

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/table.py:177, in parse(source, columns, invalid, verify, chunk_size, table_number, table_id, filename, unit_format, datatype_mapping, _debug_python_based_parser)
    174 with iterparser.get_xml_iterator(
    175     source, _debug_python_based_parser=_debug_python_based_parser
    176 ) as iterator:
--> 177     return tree.VOTableFile(config=config, pos=(1, 1)).parse(iterator, config)

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/tree.py:3897, in VOTableFile.parse(self, iterator, config)
   3896 if start:
-> 3897     tag_mapping.get(tag, self._add_unknown_tag)(
   3898         iterator, tag, data, config, pos
   3899     )
   3900 elif tag == "DESCRIPTION":

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/tree.py:3777, in VOTableFile._add_resource(self, iterator, tag, data, config, pos)
   3776 self.resources.append(resource)
-> 3777 resource.parse(self, iterator, config)

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/tree.py:3575, in Resource.parse(self, votable, iterator, config)
   3574 if start:
-> 3575     tag_mapping.get(tag, self._add_unknown_tag)(
   3576         iterator, tag, data, config, pos
   3577     )
   3578 elif tag == "DESCRIPTION":

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/tree.py:3521, in Resource._add_table(self, iterator, tag, data, config, pos)
   3520 self.tables.append(table)
-> 3521 table.parse(iterator, config)

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/tree.py:2700, in Table.parse(self, iterator, config)
   2698         break
-> 2700     tag_mapping.get(tag, self._add_unknown_tag)(
   2701         iterator, tag, data, config, pos
   2702     )
   2703 else:

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/tree.py:2618, in Table._add_field(self, iterator, tag, data, config, pos)
   2617 self.fields.append(field)
-> 2618 field.parse(iterator, config)

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/tree.py:1618, in Field.parse(self, iterator, config)
   1617 def parse(self, iterator, config):
-> 1618     for start, tag, data, pos in iterator:
   1619         if start:

ValueError: 3524:4: not well-formed (invalid token)

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
File ~/munka/devel/astroquery/astroquery/vizier/core.py:680, in VizierClass._parse_result(self, response, get_catalog_names, verbose, invalid)
    679 try:
--> 680     return _parse_vizier_votable(
    681         response.content, verbose=verbose, invalid=invalid,
    682         get_catalog_names=get_catalog_names)
    683 except Exception as ex:

File ~/munka/devel/astroquery/astroquery/vizier/core.py:751, in _parse_vizier_votable(data, verbose, invalid, get_catalog_names)
    750         warnings.warn("VOTABLE parsing raised exception: {0}".format(ex))
--> 751         vo_tree = votable.parse(tf, verify='warn', invalid='mask')
    752 elif invalid == 'exception':

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/utils/decorators.py:607, in deprecated_renamed_argument.<locals>.decorator.<locals>.wrapper(*args, **kwargs)
    605         warnings.warn(msg, warning_type, stacklevel=2)
--> 607 return function(*args, **kwargs)

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/table.py:177, in parse(source, columns, invalid, verify, chunk_size, table_number, table_id, filename, unit_format, datatype_mapping, _debug_python_based_parser)
    174 with iterparser.get_xml_iterator(
    175     source, _debug_python_based_parser=_debug_python_based_parser
    176 ) as iterator:
--> 177     return tree.VOTableFile(config=config, pos=(1, 1)).parse(iterator, config)

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/tree.py:3897, in VOTableFile.parse(self, iterator, config)
   3896 if start:
-> 3897     tag_mapping.get(tag, self._add_unknown_tag)(
   3898         iterator, tag, data, config, pos
   3899     )
   3900 elif tag == "DESCRIPTION":

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/tree.py:3777, in VOTableFile._add_resource(self, iterator, tag, data, config, pos)
   3776 self.resources.append(resource)
-> 3777 resource.parse(self, iterator, config)

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/tree.py:3575, in Resource.parse(self, votable, iterator, config)
   3574 if start:
-> 3575     tag_mapping.get(tag, self._add_unknown_tag)(
   3576         iterator, tag, data, config, pos
   3577     )
   3578 elif tag == "DESCRIPTION":

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/tree.py:3521, in Resource._add_table(self, iterator, tag, data, config, pos)
   3520 self.tables.append(table)
-> 3521 table.parse(iterator, config)

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/tree.py:2700, in Table.parse(self, iterator, config)
   2698         break
-> 2700     tag_mapping.get(tag, self._add_unknown_tag)(
   2701         iterator, tag, data, config, pos
   2702     )
   2703 else:

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/tree.py:2618, in Table._add_field(self, iterator, tag, data, config, pos)
   2617 self.fields.append(field)
-> 2618 field.parse(iterator, config)

File ~/.pyenv/versions/3.11.0/lib/python3.11/site-packages/astropy/io/votable/tree.py:1618, in Field.parse(self, iterator, config)
   1617 def parse(self, iterator, config):
-> 1618     for start, tag, data, pos in iterator:
   1619         if start:

ValueError: 3524:4: not well-formed (invalid token)

During handling of the above exception, another exception occurred:

TableParseError                           Traceback (most recent call last)
Cell In [20], line 1
----> 1 gaia_catalog_list = Vizier.find_catalogs('GAIA DR3')

File ~/munka/devel/astroquery/astroquery/vizier/core.py:235, in VizierClass.find_catalogs(self, keywords, include_obsolete, verbose, max_catalogs, return_type)
    231 if 'STOP, Max. number of RESOURCE reached' in response.text:
    232     raise ValueError("Maximum number of catalogs exceeded.  Try "
    233                      "setting max_catalogs to a large number and"
    234                      " try again")
--> 235 result = self._parse_result(response, verbose=verbose,
    236                             get_catalog_names=True)
    238 # Filter out the obsolete catalogs, unless requested
    239 if include_obsolete is False:

File ~/munka/devel/astroquery/astroquery/vizier/core.py:686, in VizierClass._parse_result(self, response, get_catalog_names, verbose, invalid)
    684         self.response = response
    685         self.table_parse_error = ex
--> 686         raise TableParseError("Failed to parse VIZIER result! The "
    687                               "raw response can be found in "
    688                               "self.response, and the error in "
    689                               "self.table_parse_error. The attempted "
    690                               "parsed result is in "
    691                               "self.parsed_result.\n Exception: " +
    692                               str(self.table_parse_error))
    693 elif response.content[:5] == b'#\n#  ':
    694     return _parse_vizier_tsvfile(response.content, verbose=verbose)

TableParseError: Failed to parse VIZIER result! The raw response can be found in self.response, and the error in self.table_parse_error. The attempted parsed result is in self.parsed_result.
 Exception: 3524:4: not well-formed (invalid token)

bsipocz avatar Dec 20 '22 21:12 bsipocz

It's upstream, we're on it.

To get the votable,

from astroquery.vizier import Vizier
Vizier.clear_cache()
data_payload = {'-words': 'GAIA DR3', '-meta.all': 1}
data_payload['-ucd'] = Vizier.ucd
response = Vizier._request(method='POST', url=Vizier._server_to_url(return_type='votable'),data=data_payload, timeout=Vizier.TIMEOUT)
with open("votable.xml", "w") as f:
    f.write(response.text)

And the faulty line looks like 3527 where a link is not closed

───────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: votable.xml
───────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
3520   │       <LINK href="http://axel.u-strasbg.fr/cgi-bin/gaia_dr3_bprp_coeff.cgi?print_header=true&amp;mode[BP][recno]=${BPrecnoS}&amp;
       │ mode[BP][nrecords]=${BPNelem}"/>
3521   │     </FIELD>
3522   │     <FIELD name="BPNelem" ucd="meta.number" display="1" datatype="short" width="2"><!-- ucd="NUMBER" -->
3523   │       <DESCRIPTION>[0/55] Number of elements in the separated bp_coeff/e_bp_coeff file (always 55 except for 1 line) (added by CD
       │ S) (bp_n_elems)</DESCRIPTION>
3524   │     </FIELD>
3525   │     <FIELD name="BPcorrrecnoS" ucd="meta.number" display="1" datatype="long" width="12"><!-- ucd="NUMBER" -->
3526   │       <DESCRIPTION>Starting record number in the separated bp_coeff_corr file (added by CDS) (bp_corr_start_recno)</DESCRIPTION>
3527   │       <LINK href=" http://axel.u-strasbg.fr/cgi-bin/gaia_dr3_bprp_coeff.cgi?print_header=true&amp;mode[BPCorr][recno]=${BPcorrrec
       │ noS}&amp;mode[BPCorr][nrecords]=${BPcorrNelem}+/>
3528   │     </FIELD>
3529   │     <FIELD name="BPcorrNelem" ucd="meta.number" display="1" datatype="short" width="4"><!-- ucd="NUMBER" -->
3530   │       <DESCRIPTION>[0/1485] Number of elements in the separated bp_coeff_corr file (added by CDS) (always 1485 except for 1 line)
       │  (bp_corr_n_elems)</DESCRIPTION>
3531   │     </FIELD>
3532   │     <FIELD name="RPrecnoS" ucd="meta.number" display="1" datatype="long" width="11"><!-- ucd="NUMBER" -->
3533   │       <DESCRIPTION>Starting record number in the separated rp_coeff/e_rp_coeff file (added by CDS) (rp_start_recno)</DESCRIPTION>
3534   │       <LINK href="http://axel.u-strasbg.fr/cgi-bin/gaia_dr3_bprp_coeff.cgi?print_header=true&amp;mode[RP][recno]=${RPrecnoS}"/>
3535   │     </FIELD>
3536   │     <FIELD name="RPNelem" ucd="meta.number" display="1" datatype="short" width="2"><!-- ucd="NUMBER" -->
3537   │       <DESCRIPTION>Number of elements in the separated rp_coeff/e_rp_coeff file (always 55) (rp_n_elems)</DESCRIPTION>
3538   │     </FIELD>
3539   │     <FIELD name="RPcorrrecnoS" ucd="meta.number" display="1" datatype="long" width="12"><!-- ucd="NUMBER" -->
3540   │       <DESCRIPTION>Starting record number in the separated rp_coeff_corr file (added by CDS) (rp_corr_start_recno)</DESCRIPTION>
───────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

The investigation is on-going

ManonMarchand avatar Jan 09 '24 11:01 ManonMarchand

Solved! Thanks for reporting the issue

ManonMarchand avatar Jan 09 '24 15:01 ManonMarchand