Yeah, you are right.  So the next question is, is it valid to mix mass and atom fractions when the value is zero?    I don't think it is.  That is to say, the following is not OK:
```python
nuc1   0.0
nuc2   -1.0
nuc3   -0.1
```

I think you always have to have all negatives or all positives right?  If this is the case you can use numpy's signbit function:
```python
nucvecvals = nucvec.values()
isatom = ~np.signbit(nucvecvals[0])
for value in nucvecvals[1:]:
    if isatom != ~np.signbit(value):
        msg = 'Mixed atom and mass fractions not supported.  See material defined on line {0}'.format(mat_line)
        raise ValueError(msg)
```

Although the following is probably the fastest way to do it:
```python
signs = ~np.signbit(nucvec.values())
isbool = np.all(signs)
if not isbool and len(signs) != signs.sum():
    msg = 'Mixed atom and mass fractions not supported.  See material defined on line {0}'.format(mat_line)
    raise ValueError(msg)
```


However, if you can mix zero signs on a single material you have to do the full terrible thing:
```python
nucvecvals = nucvec.values()
n = 0
isatom = 0 < nucvecvals[n]
while 0 == nucvecvals[n]:
    n += 1
    isatom = 0 < nucvecvals[n]
for value in nucvecvals[n+1:]:
    if isatom != (0 <= value):
        msg = 'Mixed atom and mass fractions not supported.  See material defined on line {0}'.format(mat_line)
        raise ValueError(msg)
```