Repository: CORE-GATECH-GROUP/serpent-tools

Issue:
Support for non-integer named universes for branching reader
## Summary of issue

Serpent 2 allows universe names to be quite generic string literals. However, the branching reader of serpentTools only seems to support universe names that are integers.

This seems to be related to the int conversion on line 113 of serpentTools/parsers/branching.py (commit dd886ff):

`unvID, numVariables = [int(xx) for xx in self._advance()]`

Simply limiting the int conversion to numVariables reads the universe in without problems.

## Code for reproducing the issue

```
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import serpentTools

# --- Try to read in a .coe file with a non-integer universe name

serpentTools.read("./problematic.coe")
```

problematic.coe:
```
1 1 1 1 1
1 nom
3 VERSION 2.1.31 DATE 19/07/10 TIME 14:27:27
0 1 1
-u_SI_RR01 66
INF_FLX 2  5.74041E+14  3.00746E+13
INF_KINF 1  0.00000E+00
INF_REP_TIME 0
INF_PROMPT_LIFE 0
INF_TOT 2  5.78347E-01  1.28879E+00
INF_CAPT 2  3.99876E-03  9.30813E-02
INF_FISS 2  0.00000E+00  0.00000E+00
INF_NSF 2  0.00000E+00  0.00000E+00
INF_KAPPA 2  0.00000E+00  0.00000E+00
INF_INVV 2  5.83143E-08  2.27285E-06
INF_NUBAR 2  0.00000E+00  0.00000E+00
INF_ABS 2  3.99876E-03  9.30813E-02
INF_REMXS 2  7.45100E-03  1.03549E-01
INF_RABSXS 2  3.99876E-03  9.30813E-02
INF_CHIT 2  0.00000E+00  0.00000E+00
INF_CHIP 2  0.00000E+00  0.00000E+00
INF_CHID 2  0.00000E+00  0.00000E+00
INF_I135_YIELD 2  0.00000E+00  0.00000E+00
INF_XE135_YIELD 2  0.00000E+00  0.00000E+00
INF_XE135M_YIELD 2  0.00000E+00  0.00000E+00
INF_PM149_YIELD 2  0.00000E+00  0.00000E+00
INF_SM149_YIELD 2  0.00000E+00  0.00000E+00
INF_I135_MICRO_ABS 2  0.00000E+00  0.00000E+00
INF_XE135_MICRO_ABS 2  0.00000E+00  0.00000E+00
INF_XE135M_MICRO_ABS 2  0.00000E+00  0.00000E+00
INF_PM149_MICRO_ABS 2  0.00000E+00  0.00000E+00
INF_SM149_MICRO_ABS 2  0.00000E+00  0.00000E+00
INF_I135_MACRO_ABS 0
INF_XE135_MACRO_ABS 2  0.00000E+00  0.00000E+00
INF_XE135M_MACRO_ABS 2  0.00000E+00  0.00000E+00
INF_PM149_MACRO_ABS 0
INF_SM149_MACRO_ABS 2  0.00000E+00  0.00000E+00
INF_S0 4  5.70896E-01  3.51081E-03  4.01709E-03  1.18524E+00
INF_S1 4  6.95375E-02  4.69803E-04  9.90811E-05  1.36274E-01
INF_S2 4  2.99465E-02 -3.00374E-04  5.04317E-04  1.47021E-02
INF_S3 4  5.67487E-03 -1.63405E-04 -9.41070E-04  2.33707E-02
INF_S4 4 -6.29423E-04  1.48058E-05 -3.04844E-04  9.08625E-03
INF_S5 4 -8.77400E-04  5.21018E-05 -7.86868E-04  1.47220E-02
INF_S6 4 -1.00766E-03 -3.48433E-05  7.28146E-04  8.25812E-03
INF_S7 4  3.55102E-04  9.54221E-05 -1.89967E-04  3.26062E-03
INF_SP0 4  5.70896E-01  3.51081E-03  4.01709E-03  1.18524E+00
INF_SP1 4  6.95375E-02  4.69803E-04  9.90811E-05  1.36274E-01
INF_SP2 4  2.99465E-02 -3.00374E-04  5.04317E-04  1.47021E-02
INF_SP3 4  5.67487E-03 -1.63405E-04 -9.41070E-04  2.33707E-02
INF_SP4 4 -6.29423E-04  1.48058E-05 -3.04844E-04  9.08625E-03
INF_SP5 4 -8.77400E-04  5.21018E-05 -7.86868E-04  1.47220E-02
INF_SP6 4 -1.00766E-03 -3.48433E-05  7.28146E-04  8.25812E-03
INF_SP7 4  3.55102E-04  9.54221E-05 -1.89967E-04  3.26062E-03
INF_SCATT0 2  5.74407E-01  1.18926E+00
INF_SCATT1 2  7.00073E-02  1.36373E-01
INF_SCATT2 2  2.96461E-02  1.52065E-02
INF_SCATT3 2  5.51146E-03  2.24297E-02
INF_SCATT4 2 -6.14618E-04  8.78141E-03
INF_SCATT5 2 -8.25298E-04  1.39351E-02
INF_SCATT6 2 -1.04250E-03  8.98627E-03
INF_SCATT7 2  4.50524E-04  3.07065E-03
INF_SCATTP0 2  5.```
74407E-01  1.18926E+00
INF_SCATTP1 2  7.00073E-02  1.36373E-01
INF_SCATTP2 2  2.96461E-02  1.52065E-02
INF_SCATTP3 2  5.51146E-03  2.24297E-02
INF_SCATTP4 2 -6.14618E-04  8.78141E-03
INF_SCATTP5 2 -8.25298E-04  1.39351E-02
INF_SCATTP6 2 -1.04250E-03  8.98627E-03
INF_SCATTP7 2  4.50524E-04  3.07065E-03
INF_TRANSPXS 2  3.32000E-01  1.06608E+00
INF_DIFFCOEF 2  1.00402E+00  3.12672E-01
```

## Actual outcome including console output and error traceback if applicable

```
Traceback (most recent call last):
  File "test.py", line 8, in <module>
    serpentTools.read("./problematic.coe")
  File "/usr/local/lib/python3.6/dist-packages/serpentTools-0.7.0-py3.6.egg/serpentTools/parsers/__init__.py", line 155, in read
    returnedFromLoader.read()
  File "/usr/local/lib/python3.6/dist-packages/serpentTools-0.7.0-py3.6.egg/serpentTools/parsers/base.py", line 52, in read
    self._read()
  File "/usr/local/lib/python3.6/dist-packages/serpentTools-0.7.0-py3.6.egg/serpentTools/parsers/branching.py", line 48, in _read
    self._processBranchBlock()
  File "/usr/local/lib/python3.6/dist-packages/serpentTools-0.7.0-py3.6.egg/serpentTools/parsers/branching.py", line 75, in _processBranchBlock
    self._whereAmI['buIndx'])
  File "/usr/local/lib/python3.6/dist-packages/serpentTools-0.7.0-py3.6.egg/serpentTools/parsers/branching.py", line 113, in _processBranchUniverses
    unvID, numVariables = [int(xx) for xx in self._advance()]
  File "/usr/local/lib/python3.6/dist-packages/serpentTools-0.7.0-py3.6.egg/serpentTools/parsers/branching.py", line 113, in <listcomp>
    unvID, numVariables = [int(xx) for xx in self._advance()]
ValueError: invalid literal for int() with base 10: '-u_SI_RR01'
```

## Expected outcome

## Versions

* Version  from ``serpentTools.__version__``: 0.7.0 (commit dd886ff)


Discussion:

Patch:
diff --git a/docs/changelog.rst b/docs/changelog.rst
index 706620d..97aee8a 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -21,6 +21,16 @@ Bug fixes
 ---------
 
 * Tally data for detectors with time-bins are properly handled - :issue:`312`
+* Support for generic string universe names for |BranchingReader| and
+  |BranchCollector| - :issue:`318`
+
+Pending Deprecations
+--------------------
+
+* Keys to |BranchedUniv| objects stored in
+  :attr:`serpentTools.xs.BranchCollector.universes` are stored as strings,
+  rather than integers, e.g. ``0`` is replaced with ``"0"``. A workaround
+  is in-place, but will be removed in future versions.
 
 .. _v0.7.0:
 
diff --git a/docs/examples/BranchToNodalDiffusion.rst b/docs/examples/BranchToNodalDiffusion.rst
index 131a53d..ef159ae 100644
--- a/docs/examples/BranchToNodalDiffusion.rst
+++ b/docs/examples/BranchToNodalDiffusion.rst
@@ -155,12 +155,12 @@ constants for specific universes with the |BranchCol-universes| dictionary.
 .. code:: 
     
     >>> collector.universes
-    {0: <serpentTools.BranchedUniv at 0x7fb62f749a98>, 10:
+    {"0": <serpentTools.BranchedUniv at 0x7fb62f749a98>, 10:
     <serpentTools.BranchedUniv at 0x7fb62f731b88>, 20:
     <serpentTools.BranchedUniv at 0x7fb62f749e08>, 30:
     <serpentTools.BranchedUniv at 0x7fb62f749e58>, 40:
     <serpentTools.BranchedUniv at 0x7fb62f749ea8>}
-    >>> u0 = collector.universes[0]
+    >>> u0 = collector.universes["0"]
 
 These |BranchedUniv| objects store views into the underlying
 collectors |BranchedUniv-tables| data corresponding to a single universe. The
diff --git a/docs/examples/Branching.rst b/docs/examples/Branching.rst
index 6f9b5a5..28dff8d 100644
--- a/docs/examples/Branching.rst
+++ b/docs/examples/Branching.rst
@@ -101,21 +101,21 @@ The |BranchContainer| stores group constant data in |HomogUniv| objects in the
     
     >>> for key in b0.universes:
     ...     print(key)
-    (0, 1.0, 1)
-    (10, 1.0, 1)
-    (20, 1.0, 1)
-    (30, 1.0, 1)
-    (20, 0, 0)
-    (40, 0, 0)
-    (20, 10.0, 2)
-    (10, 10.0, 2)
-    (0, 0, 0)
-    (10, 0, 0)
-    (0, 10.0, 2)
-    (30, 0, 0)
-    (40, 10.0, 2)
-    (40, 1.0, 1)
-    (30, 10.0, 2)
+    ('0", 1.0, 1)
+    ('10", 1.0, 1)
+    ('20", 1.0, 1)
+    ('30", 1.0, 1)
+    ('20", 0, 0)
+    ('40", 0, 0)
+    ('20", 10.0, 2)
+    ('10", 10.0, 2)
+    ('0", 0, 0)
+    ('10", 0, 0)
+    ('0", 10.0, 2)
+    ('30", 0, 0)
+    ('40", 10.0, 2)
+    ('40", 1.0, 1)
+    ('30", 10.0, 2)
 
 The keys here are vectors indicating the universe ID, burnup, and burnup
 index corresponding to the point in the burnup schedule. ``SERPENT``
@@ -129,7 +129,7 @@ the :meth:`~serpentTools.objects.BranchContainer.getUniv` method
 
 .. code:: 
     
-    >>> univ0 = b0.universes[0, 1, 1]
+    >>> univ0 = b0.universes["0", 1, 1]
     >>> print(univ0)
     <HomogUniv 0: burnup: 1.000 MWd/kgu, step: 1>
     >>> print(univ0.name)
@@ -295,7 +295,7 @@ variables explicitly requested are present
 
 .. code:: 
     
-    >>> univ4 = b1.getUniv(0, 0)
+    >>> univ4 = b1.getUniv("0", 0)
     >>> univ4.infExp
     {'infTot': array([ 0.313338,  0.54515 ])}
     >>> univ4.b1Exp
diff --git a/examples/BranchToNodalDiffusion.ipynb b/examples/BranchToNodalDiffusion.ipynb
index adb329e..fbf45fd 100644
--- a/examples/BranchToNodalDiffusion.ipynb
+++ b/examples/BranchToNodalDiffusion.ipynb
@@ -87,16 +87,7 @@
    "cell_type": "code",
    "execution_count": 4,
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "/home/ajohnson400/github/my-serpent-tools/.venv/develop/lib/python3.7/site-packages/serpentTools-0.6.1+36.g1facac0.dirty-py3.7.egg/serpentTools/xs.py:227: UserWarning: This is an experimental feature, subject to change.\n",
-      "  UserWarning)\n"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
     "collector = BranchCollector(coe)"
    ]
@@ -244,7 +235,7 @@
     {
      "data": {
       "text/plain": [
-       "(0, 10, 20, 30, 40)"
+       "('0', '10', '20', '30', '40')"
       ]
      },
      "execution_count": 11,
@@ -392,11 +383,11 @@
     {
      "data": {
       "text/plain": [
-       "{0: <serpentTools.xs.BranchedUniv at 0x7fb62f749a98>,\n",
-       " 10: <serpentTools.xs.BranchedUniv at 0x7fb62f731b88>,\n",
-       " 20: <serpentTools.xs.BranchedUniv at 0x7fb62f749e08>,\n",
-       " 30: <serpentTools.xs.BranchedUniv at 0x7fb62f749e58>,\n",
-       " 40: <serpentTools.xs.BranchedUniv at 0x7fb62f749ea8>}"
+       "{'0': <serpentTools.xs.BranchedUniv at 0x7f322a0458b8>,\n",
+       " '10': <serpentTools.xs.BranchedUniv at 0x7f322a0538b8>,\n",
+       " '20': <serpentTools.xs.BranchedUniv at 0x7f322a053908>,\n",
+       " '30': <serpentTools.xs.BranchedUniv at 0x7f322a053958>,\n",
+       " '40': <serpentTools.xs.BranchedUniv at 0x7f322a0539a8>}"
       ]
      },
      "execution_count": 17,
@@ -412,9 +403,33 @@
    "cell_type": "code",
    "execution_count": 18,
    "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'0': <serpentTools.xs.BranchedUniv at 0x7f322a0458b8>,\n",
+       " '10': <serpentTools.xs.BranchedUniv at 0x7f322a0538b8>,\n",
+       " '20': <serpentTools.xs.BranchedUniv at 0x7f322a053908>,\n",
+       " '30': <serpentTools.xs.BranchedUniv at 0x7f322a053958>,\n",
+       " '40': <serpentTools.xs.BranchedUniv at 0x7f322a0539a8>}"
+      ]
+     },
+     "execution_count": 18,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "collector.universes"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
    "outputs": [],
    "source": [
-    "u0 = collector.universes[0]"
+    "u0 = collector.universes['0']"
    ]
   },
   {
@@ -426,7 +441,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 20,
    "metadata": {},
    "outputs": [
     {
@@ -435,7 +450,7 @@
        "('BOR', 'TFU')"
       ]
      },
-     "execution_count": 19,
+     "execution_count": 20,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -446,7 +461,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 21,
    "metadata": {},
    "outputs": [
     {
@@ -455,7 +470,7 @@
        "('BOR', 'TFU', 'Burnup', 'Group')"
       ]
      },
-     "execution_count": 20,
+     "execution_count": 21,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -466,7 +481,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
+   "execution_count": 22,
    "metadata": {},
    "outputs": [
     {
@@ -475,7 +490,7 @@
        "(('B1000', 'B750', 'nom'), ('FT1200', 'FT600', 'nom'))"
       ]
      },
-     "execution_count": 21,
+     "execution_count": 22,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -493,7 +508,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 37,
+   "execution_count": 23,
    "metadata": {},
    "outputs": [
     {
@@ -511,7 +526,7 @@
        " 'b1Diffcoef']"
       ]
      },
-     "execution_count": 37,
+     "execution_count": 23,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -522,7 +537,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
+   "execution_count": 24,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -531,7 +546,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 25,
    "metadata": {},
    "outputs": [
     {
@@ -540,7 +555,7 @@
        "(3, 3, 3, 2)"
       ]
      },
-     "execution_count": 24,
+     "execution_count": 25,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -551,7 +566,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
+   "execution_count": 26,
    "metadata": {
     "scrolled": true
    },
@@ -598,7 +613,7 @@
        "         [0.206532, 0.      ]]]])"
       ]
      },
-     "execution_count": 25,
+     "execution_count": 26,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -618,7 +633,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 26,
+   "execution_count": 27,
    "metadata": {},
    "outputs": [
     {
@@ -628,7 +643,7 @@
        "       [1200.,  600.,  900.]])"
       ]
      },
-     "execution_count": 26,
+     "execution_count": 27,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -650,7 +665,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 27,
+   "execution_count": 28,
    "metadata": {},
    "outputs": [
     {
@@ -680,7 +695,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 28,
+   "execution_count": 29,
    "metadata": {},
    "outputs": [
     {
@@ -689,7 +704,7 @@
        "['boron conc', 'fuel temperature']"
       ]
      },
-     "execution_count": 28,
+     "execution_count": 29,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -701,7 +716,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 29,
+   "execution_count": 30,
    "metadata": {},
    "outputs": [
     {
@@ -732,7 +747,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 30,
+   "execution_count": 31,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -741,7 +756,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 31,
+   "execution_count": 32,
    "metadata": {},
    "outputs": [
     {
@@ -780,7 +795,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 32,
+   "execution_count": 33,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -789,7 +804,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 33,
+   "execution_count": 34,
    "metadata": {},
    "outputs": [
     {
@@ -819,17 +834,17 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 34,
+   "execution_count": 35,
    "metadata": {},
    "outputs": [],
    "source": [
     "# write to a file \"in memory\"\n",
-    "out = writer.write(0)"
+    "out = writer.write(\"0\")"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 35,
+   "execution_count": 36,
    "metadata": {},
    "outputs": [
     {
@@ -861,6 +876,13 @@
    "source": [
     "print(out[:1000])"
    ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
   }
  ],
  "metadata": {
@@ -879,7 +901,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.7.2"
+   "version": "3.7.3"
   }
  },
  "nbformat": 4,
diff --git a/examples/Branching.ipynb b/examples/Branching.ipynb
index 5b1a687..af548e6 100644
--- a/examples/Branching.ipynb
+++ b/examples/Branching.ipynb
@@ -48,7 +48,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 1,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -59,7 +59,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 2,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -75,33 +75,33 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "{('B1000',\n",
-       "  'FT1200'): <serpentTools.objects.containers.BranchContainer at 0x7ff79783ff28>,\n",
-       " ('B1000',\n",
-       "  'FT600'): <serpentTools.objects.containers.BranchContainer at 0x7ff79789c048>,\n",
-       " ('B1000',\n",
-       "  'nom'): <serpentTools.objects.containers.BranchContainer at 0x7ff797820e10>,\n",
-       " ('B750',\n",
-       "  'FT1200'): <serpentTools.objects.containers.BranchContainer at 0x7ff797839eb8>,\n",
+       "{('nom',\n",
+       "  'nom'): <serpentTools.objects.containers.BranchContainer at 0x7ff7e6664c88>,\n",
        " ('B750',\n",
-       "  'FT600'): <serpentTools.objects.containers.BranchContainer at 0x7ff797853f98>,\n",
-       " ('B750',\n",
-       "  'nom'): <serpentTools.objects.containers.BranchContainer at 0x7ff797852e10>,\n",
-       " ('nom',\n",
-       "  'FT1200'): <serpentTools.objects.containers.BranchContainer at 0x7ff797832e48>,\n",
+       "  'nom'): <serpentTools.objects.containers.BranchContainer at 0x7ff7bd7b6f28>,\n",
+       " ('B1000',\n",
+       "  'nom'): <serpentTools.objects.containers.BranchContainer at 0x7ff7bd7c8208>,\n",
        " ('nom',\n",
-       "  'FT600'): <serpentTools.objects.containers.BranchContainer at 0x7ff79784cf28>,\n",
+       "  'FT1200'): <serpentTools.objects.containers.BranchContainer at 0x7ff7bd7d34e0>,\n",
+       " ('B750',\n",
+       "  'FT1200'): <serpentTools.objects.containers.BranchContainer at 0x7ff7bd7df668>,\n",
+       " ('B1000',\n",
+       "  'FT1200'): <serpentTools.objects.containers.BranchContainer at 0x7ff7bd76a978>,\n",
        " ('nom',\n",
-       "  'nom'): <serpentTools.objects.containers.BranchContainer at 0x7ff7977c7e10>}"
+       "  'FT600'): <serpentTools.objects.containers.BranchContainer at 0x7ff7bd776c18>,\n",
+       " ('B750',\n",
+       "  'FT600'): <serpentTools.objects.containers.BranchContainer at 0x7ff7bd780f28>,\n",
+       " ('B1000',\n",
+       "  'FT600'): <serpentTools.objects.containers.BranchContainer at 0x7ff7bd793278>}"
       ]
      },
-     "execution_count": 4,
+     "execution_count": 3,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -126,7 +126,7 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "<BranchContainer for B1000, FT600 from demo.coe>\n"
+      "<BranchContainer for B1000, FT600 from /home/drew/.local/lib/python3.7/site-packages/serpentTools-0.7.0+30.g3066be7.dirty-py3.7.egg/serpentTools/data/demo.coe>\n"
      ]
     }
    ],
@@ -203,21 +203,21 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "(0, 0, 0)\n",
-      "(10, 0, 0)\n",
-      "(20, 0, 0)\n",
-      "(30, 0, 0)\n",
-      "(40, 0, 0)\n",
-      "(0, 1.0, 1)\n",
-      "(10, 1.0, 1)\n",
-      "(20, 1.0, 1)\n",
-      "(30, 1.0, 1)\n",
-      "(40, 1.0, 1)\n",
-      "(0, 10.0, 2)\n",
-      "(10, 10.0, 2)\n",
-      "(20, 10.0, 2)\n",
-      "(30, 10.0, 2)\n",
-      "(40, 10.0, 2)\n"
+      "('0', 0, 0)\n",
+      "('10', 0, 0)\n",
+      "('20', 0, 0)\n",
+      "('30', 0, 0)\n",
+      "('40', 0, 0)\n",
+      "('0', 1.0, 1)\n",
+      "('10', 1.0, 1)\n",
+      "('20', 1.0, 1)\n",
+      "('30', 1.0, 1)\n",
+      "('40', 1.0, 1)\n",
+      "('0', 10.0, 2)\n",
+      "('10', 10.0, 2)\n",
+      "('20', 10.0, 2)\n",
+      "('30', 10.0, 2)\n",
+      "('40', 10.0, 2)\n"
      ]
     }
    ],
@@ -254,7 +254,7 @@
     }
    ],
    "source": [
-    "univ0 = b0.universes[0, 1, 1]\n",
+    "univ0 = b0.universes['0', 1, 1]\n",
     "print(univ0)\n",
     "print(univ0.name)\n",
     "print(univ0.bu)\n",
@@ -276,8 +276,8 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "univ1 = b0.getUniv(0, burnup=1)\n",
-    "univ2 = b0.getUniv(0, index=1)\n",
+    "univ1 = b0.getUniv('0', burnup=1)\n",
+    "univ2 = b0.getUniv('0', index=1)\n",
     "assert univ0 is univ1 is univ2"
    ]
   },
@@ -468,22 +468,22 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 26,
+   "execution_count": 16,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "<matplotlib.axes._subplots.AxesSubplot at 0x7f769a7a0da0>"
+       "<matplotlib.axes._subplots.AxesSubplot at 0x7ff7bd7a3cf8>"
       ]
      },
-     "execution_count": 26,
+     "execution_count": 16,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "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\n",
+      "image/png": "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\n",
       "text/plain": [
        "<Figure size 432x288 with 1 Axes>"
       ]
@@ -498,12 +498,12 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 29,
+   "execution_count": 17,
    "metadata": {},
    "outputs": [
     {
      "data": {
-      "image/png": "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\nwTyCAAAAAElFTkSuQmCC\n",
+      "image/png": "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\n",
       "text/plain": [
        "<Figure size 432x288 with 1 Axes>"
       ]
@@ -533,22 +533,22 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 18,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "('nom', 'nom') <BranchContainer for nom, nom from demo.coe>\n",
-      "('B750', 'nom') <BranchContainer for B750, nom from demo.coe>\n",
-      "('B1000', 'nom') <BranchContainer for B1000, nom from demo.coe>\n",
-      "('nom', 'FT1200') <BranchContainer for nom, FT1200 from demo.coe>\n",
-      "('B750', 'FT1200') <BranchContainer for B750, FT1200 from demo.coe>\n",
-      "('B1000', 'FT1200') <BranchContainer for B1000, FT1200 from demo.coe>\n",
-      "('nom', 'FT600') <BranchContainer for nom, FT600 from demo.coe>\n",
-      "('B750', 'FT600') <BranchContainer for B750, FT600 from demo.coe>\n",
-      "('B1000', 'FT600') <BranchContainer for B1000, FT600 from demo.coe>\n"
+      "('nom', 'nom') <BranchContainer for nom, nom from /home/drew/.local/lib/python3.7/site-packages/serpentTools-0.7.0+30.g3066be7.dirty-py3.7.egg/serpentTools/data/demo.coe>\n",
+      "('B750', 'nom') <BranchContainer for B750, nom from /home/drew/.local/lib/python3.7/site-packages/serpentTools-0.7.0+30.g3066be7.dirty-py3.7.egg/serpentTools/data/demo.coe>\n",
+      "('B1000', 'nom') <BranchContainer for B1000, nom from /home/drew/.local/lib/python3.7/site-packages/serpentTools-0.7.0+30.g3066be7.dirty-py3.7.egg/serpentTools/data/demo.coe>\n",
+      "('nom', 'FT1200') <BranchContainer for nom, FT1200 from /home/drew/.local/lib/python3.7/site-packages/serpentTools-0.7.0+30.g3066be7.dirty-py3.7.egg/serpentTools/data/demo.coe>\n",
+      "('B750', 'FT1200') <BranchContainer for B750, FT1200 from /home/drew/.local/lib/python3.7/site-packages/serpentTools-0.7.0+30.g3066be7.dirty-py3.7.egg/serpentTools/data/demo.coe>\n",
+      "('B1000', 'FT1200') <BranchContainer for B1000, FT1200 from /home/drew/.local/lib/python3.7/site-packages/serpentTools-0.7.0+30.g3066be7.dirty-py3.7.egg/serpentTools/data/demo.coe>\n",
+      "('nom', 'FT600') <BranchContainer for nom, FT600 from /home/drew/.local/lib/python3.7/site-packages/serpentTools-0.7.0+30.g3066be7.dirty-py3.7.egg/serpentTools/data/demo.coe>\n",
+      "('B750', 'FT600') <BranchContainer for B750, FT600 from /home/drew/.local/lib/python3.7/site-packages/serpentTools-0.7.0+30.g3066be7.dirty-py3.7.egg/serpentTools/data/demo.coe>\n",
+      "('B1000', 'FT600') <BranchContainer for B1000, FT600 from /home/drew/.local/lib/python3.7/site-packages/serpentTools-0.7.0+30.g3066be7.dirty-py3.7.egg/serpentTools/data/demo.coe>\n"
      ]
     }
    ],
@@ -588,7 +588,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 19,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -604,7 +604,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 20,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -618,7 +618,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 21,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -627,7 +627,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
+   "execution_count": 22,
    "metadata": {},
    "outputs": [
     {
@@ -640,7 +640,7 @@
        " 'TFU': 600}"
       ]
      },
-     "execution_count": 21,
+     "execution_count": 22,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -651,7 +651,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 23,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -668,7 +668,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
+   "execution_count": 24,
    "metadata": {},
    "outputs": [
     {
@@ -677,19 +677,19 @@
        "{'infTot': array([0.313338, 0.54515 ])}"
       ]
      },
-     "execution_count": 23,
+     "execution_count": 24,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "univ4 = b1.getUniv(0, 0)\n",
+    "univ4 = b1.getUniv('0', 0)\n",
     "univ4.infExp"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 25,
    "metadata": {},
    "outputs": [
     {
@@ -698,7 +698,7 @@
        "{}"
       ]
      },
-     "execution_count": 24,
+     "execution_count": 25,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -732,7 +732,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.5.2"
+   "version": "3.7.3"
   }
  },
  "nbformat": 4,
diff --git a/serpentTools/objects/containers.py b/serpentTools/objects/containers.py
index 23bd7e4..8a8984c 100644
--- a/serpentTools/objects/containers.py
+++ b/serpentTools/objects/containers.py
@@ -9,8 +9,10 @@ Contents
 """
 from re import compile
 from itertools import product
+from warnings import warn
+from numbers import Real
 
-from six import iteritems
+from six import iteritems, PY2
 from matplotlib import pyplot
 from numpy import array, arange, hstack, ndarray, zeros_like
 
@@ -39,6 +41,11 @@ from serpentTools.messages import (
     error,
 )
 
+if PY2:
+    from collections import Iterable
+else:
+    from collections.abc import Iterable
+
 SCATTER_MATS = set()
 SCATTER_ORDERS = 8
 
@@ -614,6 +621,33 @@ class HomogUniv(NamedObject):
     compareGCData.__doc__ = __docCompare.format(qty='gc')
 
 
+# remove for versions >= 0.8.0
+
+class _BranchContainerUnivDict(dict):
+    """
+    Workaround for supporting integer and string universe ids
+
+    Keys are of the form ``univID, index, burnup``
+    """
+
+    def __getitem__(self, key):
+        if not isinstance(key, Iterable):
+            raise KeyError(key)
+        if isinstance(key[0], Real) and key not in self:
+            warn("Universe ids are stored as unconverted strings, not int. "
+                 "Support for previous integer-access will be removed in "
+                 "future versions.",
+                 FutureWarning)
+            key = (str(key[0]), ) + key[1:]
+        return dict.__getitem__(self, key)
+
+    def get(self, key, default=None):
+        try:
+            return self[key]
+        except KeyError:
+            return default
+
+
 class BranchContainer(BaseObject):
     """
     Class that stores data for a single branch.
@@ -652,7 +686,8 @@ class BranchContainer(BaseObject):
         self.filePath = filePath
         self.branchID = branchID
         self.stateData = stateData
-        self.universes = {}
+        # Revert to dict for version >= 0.8.0
+        self.universes = _BranchContainerUnivDict()
         self.branchNames = branchNames
         self.__orderedUniverses = None
         self.__keys = set()
@@ -733,9 +768,15 @@ class BranchContainer(BaseObject):
 
         If burnup and index are given, burnup is used to search
 
+        ..warning::
+
+            Future versions will store read and store universes from
+            coefficient files as generic strings, without integer
+            conversion
+
         Parameters
         ----------
-        univID: int
+        univID: str
             Unique ID for the desired universe
         burnup: float or int
             Burnup [MWd/kgU] of the desired universe
@@ -744,7 +785,7 @@ class BranchContainer(BaseObject):
 
         Returns
         -------
-        :py:class:`~serpentTools.objects.containers.HomogUniv`
+        :class:`~serpentTools.objects.containers.HomogUniv`
             Requested universe
 
         Raises
diff --git a/serpentTools/parsers/branching.py b/serpentTools/parsers/branching.py
index 8ba6fb4..d2a491a 100644
--- a/serpentTools/parsers/branching.py
+++ b/serpentTools/parsers/branching.py
@@ -110,11 +110,12 @@ class BranchingReader(XSReader):
 
     def _processBranchUniverses(self, branch, burnup, burnupIndex):
         """Add universe data to this branch at this burnup."""
-        unvID, numVariables = [int(xx) for xx in self._advance()]
+        unvID, numVariables = self._advance()
+        numVariables = int(numVariables)
         univ = branch.addUniverse(unvID, burnup, burnupIndex - 1)
         for step in range(numVariables):
             splitList = self._advance(
-                possibleEndOfFile=step == numVariables - 1)
+                possibleEndOfFile=(step == numVariables - 1))
             varName = splitList[0]
             varValues = [float(xx) for xx in splitList[2:]]
             if not varValues:
diff --git a/serpentTools/xs.py b/serpentTools/xs.py
index 6ca006c..44edf12 100644
--- a/serpentTools/xs.py
+++ b/serpentTools/xs.py
@@ -5,6 +5,8 @@ branching file
 
 from itertools import product
 from warnings import warn
+from numbers import Real
+
 from six import iteritems
 from six.moves import range
 from numpy import empty, nan, array, ndarray
@@ -18,6 +20,35 @@ __all__ = [
 ]
 
 
+# remove for versions >= 0.8.0
+
+
+class IntToStringDict(dict):
+    """Dictionary that allows accessing string keys with Reals
+
+    Used to mitigate API changes in how universe keys are stored
+    in BranchingReader and BranchCollector objects.
+    """
+
+    def __getitem__(self, key):
+        if key in self:
+            return dict.__getitem__(self, key)
+        if isinstance(key, Real) and float(key) in self:
+            warn("Universes will be stored as unconverted strings in future "
+                 "versions", FutureWarning)
+            return dict.__getitem__(self, str(key))
+        raise KeyError(key)
+
+    def get(self, key, default=None):
+        if key in self:
+            return dict.__getitem__(self, key)
+        if isinstance(key, Real) and float(key) in self:
+            warn("Universes will be stored as unconverted strings in future "
+                 "versions", FutureWarning)
+            return dict.__getitem__(self, str(key))
+        return dict.get(self, key, default)
+
+
 class BranchedUniv(object):
     """
     Class for storing cross sections for a single universe across branches
@@ -224,7 +255,8 @@ class BranchCollector(object):
         self.filePath = reader.filePath
         self._branches = reader.branches
         self.xsTables = {}
-        self.universes = {}
+        # Revert do dict for version >= 0.8.0
+        self.universes = IntToStringDict()
         self._perturbations = None
         self._states = None
         self._axis = None


Test patch:
diff --git a/serpentTools/tests/test_branching.py b/serpentTools/tests/test_branching.py
index 9780cd4..7be45e2 100644
--- a/serpentTools/tests/test_branching.py
+++ b/serpentTools/tests/test_branching.py
@@ -23,7 +23,7 @@ class _BranchTesterHelper(unittest.TestCase):
         cls.expectedBranches = {('nom', 'nom', 'nom')}
         cls.expectedUniverses = {
             # universe id, burnup, step
-            (0, 0, 0),
+            ("0", 0, 0),
         }
         with rc:
             rc['serpentVersion'] = '2.1.29'
@@ -78,10 +78,16 @@ class BranchContainerTester(_BranchTesterHelper):
     def setUpClass(cls):
         _BranchTesterHelper.setUpClass()
         cls.refBranchID = ('nom', 'nom', 'nom')
-        cls.refUnivKey = (0, 0, 0)
+        cls.refUnivKey = ("0", 0, 0)
         cls.refBranch = cls.reader.branches[cls.refBranchID]
         cls.refUniv = cls.refBranch.universes[cls.refUnivKey]
 
+    def test_universeIDWorkaround(self):
+        """Test that, for now, integer universe ids work"""
+        # Remove this test for versions >= 0.8.0
+        key = (int(self.refUnivKey[0]), ) + self.refUnivKey[1:]
+        self.assertIs(self.refUniv, self.refBranch.universes[key])
+
     def test_loadedUniv(self):
         """Verify the reference universe has the correct data loaded"""
         assortedExpected = {
@@ -149,7 +155,7 @@ class BranchWithUncsTester(unittest.TestCase):
             ],
         },
     }
-    BRANCH_UNIVKEY = (0, 0, 0)
+    BRANCH_UNIVKEY = ("0", 0, 0)
 
     def setUp(self):
         fp = getFile('demo_uncs.coe')
diff --git a/serpentTools/tests/test_xs.py b/serpentTools/tests/test_xs.py
index ee3e31c..91dc047 100644
--- a/serpentTools/tests/test_xs.py
+++ b/serpentTools/tests/test_xs.py
@@ -27,36 +27,36 @@ class CollectedHelper(_BranchTestHelper):
         ('nom', 'nom'): {  # branch
             'infTot': {  # group constant
                 0: {  # burnup
-                    0: array([2.10873E-01, 2.23528E-01]),  # univ: value
-                    20: array([2.10868E-01, 1.22701E-01]),
+                    "0": array([2.10873E-01, 2.23528E-01]),  # univ: value
+                    "20": array([2.10868E-01, 1.22701E-01]),
                 },
                 1: {
-                    0: array([2.08646E-01, 0.00000E+00]),
-                    20: array([2.08083E-01, 0.00000E+00]),
+                    "0": array([2.08646E-01, 0.00000E+00]),
+                    "20": array([2.08083E-01, 0.00000E+00]),
                 },
             },
             'b1Diffcoef': {
                 0: {
-                    0: array([1.80449E+00, 1.97809E+00]),
-                    20: array([1.80519E+00, 0.00000E+00]),
+                    "0": array([1.80449E+00, 1.97809E+00]),
+                    "20": array([1.80519E+00, 0.00000E+00]),
                 },
             },
         },
         ('B750', 'FT1200'): {
             'infTot': {
                 0: {
-                    0: array([3.13772E-01, 5.41505E-01]),
-                    20: array([3.13711E-01, 5.41453E-01]),
+                    "0": array([3.13772E-01, 5.41505E-01]),
+                    "20": array([3.13711E-01, 5.41453E-01]),
                 },
                 1: {
-                    0: array([3.11335E-01, 6.09197E-01]),
-                    20: array([3.11729E-01, 8.37580E-01]),
+                    "0": array([3.11335E-01, 6.09197E-01]),
+                    "20": array([3.11729E-01, 8.37580E-01]),
                 },
             },
             'b1Diffcoef': {
                 0: {
-                    0: array([1.75127E+00, 8.63097E-01]),
-                    20: array([1.75206E+00, 8.62754E-01]),
+                    "0": array([1.75127E+00, 8.63097E-01]),
+                    "20": array([1.75206E+00, 8.62754E-01]),
                 },
             },
         },