cython.git
14 years agoFix imports in Cython/Include/numpy.pxd.
Craig Citro [Fri, 9 Jul 2010 07:25:37 +0000 (00:25 -0700)]
Fix imports in Cython/Include/numpy.pxd.

14 years agoMake str unsafe for type inference. See trac #553.
Craig Citro [Wed, 7 Jul 2010 05:34:43 +0000 (22:34 -0700)]
Make str unsafe for type inference. See trac #553.

14 years agoCorrectly resolve imports of modules already cimported.
Craig Citro [Wed, 7 Jul 2010 07:20:50 +0000 (00:20 -0700)]
Correctly resolve imports of modules already cimported.

14 years agoFix type inference on unary operators.
Craig Citro [Wed, 7 Jul 2010 07:47:07 +0000 (00:47 -0700)]
Fix type inference on unary operators.

14 years agoVarious cosmetic touch-ups.
Craig Citro [Wed, 7 Jul 2010 08:06:43 +0000 (01:06 -0700)]
Various cosmetic touch-ups.

14 years agoFix an error with coercing C ints in boolean context.
Craig Citro [Wed, 7 Jul 2010 08:11:24 +0000 (01:11 -0700)]
Fix an error with coercing C ints in boolean context.

14 years agoFix a bug with automatic conversion of public attributes to properties.
Craig Citro [Wed, 7 Jul 2010 08:11:24 +0000 (01:11 -0700)]
Fix a bug with automatic conversion of public attributes to properties.

14 years agoFix a warning coming from tests/run/cython_includes.pyx.
Craig Citro [Thu, 8 Jul 2010 05:16:20 +0000 (22:16 -0700)]
Fix a warning coming from tests/run/cython_includes.pyx.

14 years agoCopy over Cython/Includes/Deprecated directory on install...
"Robert Bradshaw ext:(%22) [Wed, 7 Jul 2010 03:15:16 +0000 (20:15 -0700)]
Copy over Cython/Includes/Deprecated directory on install...

14 years agofix order of surrogate pair in wide unicode strings
Stefan Behnel [Sat, 3 Jul 2010 16:22:12 +0000 (18:22 +0200)]
fix order of surrogate pair in wide unicode strings

14 years agofix "Py_UNICODE in ..." against wide unicode literals on narrow Unicode platforms
Stefan Behnel [Sat, 3 Jul 2010 15:34:52 +0000 (17:34 +0200)]
fix "Py_UNICODE in ..." against wide unicode literals on narrow Unicode platforms

14 years agofix parsing of wide unicode escapes on narrow Unicode platforms
Stefan Behnel [Sat, 3 Jul 2010 15:23:36 +0000 (17:23 +0200)]
fix parsing of wide unicode escapes on narrow Unicode platforms

14 years agofix Cython installation, make compilation obligatory (unless explicitly disabled...
Stefan Behnel [Fri, 2 Jul 2010 19:53:06 +0000 (21:53 +0200)]
fix Cython installation, make compilation obligatory (unless explicitly disabled) and abort the installation if the compilation fails

14 years agouse PyCapsule for Py 2.7+ (but not in Py 3.0)
Lisandro Dalcin [Fri, 2 Jul 2010 18:57:21 +0000 (15:57 -0300)]
use PyCapsule for Py 2.7+ (but not in Py 3.0)

14 years agoalways use decoded filenames in FileSourceDescriptor
Stefan Behnel [Wed, 30 Jun 2010 20:05:58 +0000 (22:05 +0200)]
always use decoded filenames in FileSourceDescriptor

14 years agofix version - if anything, it's certainly no longer 0.12.x
Stefan Behnel [Fri, 25 Jun 2010 10:12:01 +0000 (12:12 +0200)]
fix version - if anything, it's certainly no longer 0.12.x

14 years agofix bug #544: handle side-effects in flattened in-list tests correctly
Stefan Behnel [Tue, 15 Jun 2010 19:55:52 +0000 (21:55 +0200)]
fix bug #544: handle side-effects in flattened in-list tests correctly

14 years agomove legacy pxd files to Cython/Includes/Deprecated
Lisandro Dalcin [Fri, 11 Jun 2010 19:27:59 +0000 (16:27 -0300)]
move legacy pxd files to Cython/Includes/Deprecated

--HG--
rename : Cython/Includes/python.pxd => Cython/Includes/Deprecated/python.pxd
rename : Cython/Includes/python2.5.pxd => Cython/Includes/Deprecated/python2.5.pxd
rename : Cython/Includes/python_bool.pxd => Cython/Includes/Deprecated/python_bool.pxd
rename : Cython/Includes/python_buffer.pxd => Cython/Includes/Deprecated/python_buffer.pxd
rename : Cython/Includes/python_bytes.pxd => Cython/Includes/Deprecated/python_bytes.pxd
rename : Cython/Includes/python_cobject.pxd => Cython/Includes/Deprecated/python_cobject.pxd
rename : Cython/Includes/python_complex.pxd => Cython/Includes/Deprecated/python_complex.pxd
rename : Cython/Includes/python_dict.pxd => Cython/Includes/Deprecated/python_dict.pxd
rename : Cython/Includes/python_exc.pxd => Cython/Includes/Deprecated/python_exc.pxd
rename : Cython/Includes/python_float.pxd => Cython/Includes/Deprecated/python_float.pxd
rename : Cython/Includes/python_function.pxd => Cython/Includes/Deprecated/python_function.pxd
rename : Cython/Includes/python_getargs.pxd => Cython/Includes/Deprecated/python_getargs.pxd
rename : Cython/Includes/python_instance.pxd => Cython/Includes/Deprecated/python_instance.pxd
rename : Cython/Includes/python_int.pxd => Cython/Includes/Deprecated/python_int.pxd
rename : Cython/Includes/python_iterator.pxd => Cython/Includes/Deprecated/python_iterator.pxd
rename : Cython/Includes/python_list.pxd => Cython/Includes/Deprecated/python_list.pxd
rename : Cython/Includes/python_long.pxd => Cython/Includes/Deprecated/python_long.pxd
rename : Cython/Includes/python_mapping.pxd => Cython/Includes/Deprecated/python_mapping.pxd
rename : Cython/Includes/python_mem.pxd => Cython/Includes/Deprecated/python_mem.pxd
rename : Cython/Includes/python_method.pxd => Cython/Includes/Deprecated/python_method.pxd
rename : Cython/Includes/python_module.pxd => Cython/Includes/Deprecated/python_module.pxd
rename : Cython/Includes/python_number.pxd => Cython/Includes/Deprecated/python_number.pxd
rename : Cython/Includes/python_object.pxd => Cython/Includes/Deprecated/python_object.pxd
rename : Cython/Includes/python_oldbuffer.pxd => Cython/Includes/Deprecated/python_oldbuffer.pxd
rename : Cython/Includes/python_pycapsule.pxd => Cython/Includes/Deprecated/python_pycapsule.pxd
rename : Cython/Includes/python_ref.pxd => Cython/Includes/Deprecated/python_ref.pxd
rename : Cython/Includes/python_sequence.pxd => Cython/Includes/Deprecated/python_sequence.pxd
rename : Cython/Includes/python_set.pxd => Cython/Includes/Deprecated/python_set.pxd
rename : Cython/Includes/python_string.pxd => Cython/Includes/Deprecated/python_string.pxd
rename : Cython/Includes/python_tuple.pxd => Cython/Includes/Deprecated/python_tuple.pxd
rename : Cython/Includes/python_type.pxd => Cython/Includes/Deprecated/python_type.pxd
rename : Cython/Includes/python_unicode.pxd => Cython/Includes/Deprecated/python_unicode.pxd
rename : Cython/Includes/python_version.pxd => Cython/Includes/Deprecated/python_version.pxd
rename : Cython/Includes/python_weakref.pxd => Cython/Includes/Deprecated/python_weakref.pxd
rename : Cython/Includes/stdio.pxd => Cython/Includes/Deprecated/stdio.pxd
rename : Cython/Includes/stdlib.pxd => Cython/Includes/Deprecated/stdlib.pxd
rename : Cython/Includes/stl.pxd => Cython/Includes/Deprecated/stl.pxd

14 years agoFix Py_ssize_t/Py_ssize_t* issues in buffer API signatures by renaming
Chuck Blake [Wed, 9 Jun 2010 16:03:00 +0000 (12:03 -0400)]
Fix Py_ssize_t/Py_ssize_t* issues in buffer API signatures by renaming
format_map['Z'] => format_map['z'] to make room for a new Z=>Py_ssize_t*.
Also update existing uses of Z in TypeSlots.py and Builtin.py and delete
no longer needed "get"-prefixed versions of readbufferproc & friends.

14 years agoAdd control of --line-directives to Distutils build_ext
Chuck Blake [Thu, 10 Jun 2010 14:36:41 +0000 (11:36 -0300)]
Add control of --line-directives to Distutils build_ext

14 years agoAnother large integer literal fix (indexing).
Robert Bradshaw [Mon, 7 Jun 2010 18:06:45 +0000 (11:06 -0700)]
Another large integer literal fix (indexing).

14 years agoBug in large literal indexing.
Robert Bradshaw [Mon, 7 Jun 2010 18:01:23 +0000 (11:01 -0700)]
Bug in large literal indexing.

14 years agoFix large integer literal inference.
Robert Bradshaw [Mon, 7 Jun 2010 17:51:51 +0000 (10:51 -0700)]
Fix large integer literal inference.

14 years agoLarge integer literal type inference test.
Robert Bradshaw [Mon, 7 Jun 2010 17:50:29 +0000 (10:50 -0700)]
Large integer literal type inference test.

14 years agoreverted temp name changes - wrong 'fix'
Stefan Behnel [Wed, 2 Jun 2010 06:48:40 +0000 (08:48 +0200)]
reverted temp name changes - wrong 'fix'

14 years agofix another temp var name encoding problem - seems to fix ticket #536
Stefan Behnel [Wed, 2 Jun 2010 06:34:23 +0000 (08:34 +0200)]
fix another temp var name encoding problem - seems to fix ticket #536

14 years agofix stupid typo
Stefan Behnel [Tue, 1 Jun 2010 11:21:03 +0000 (13:21 +0200)]
fix stupid typo

14 years agofix test case
Stefan Behnel [Tue, 1 Jun 2010 06:55:30 +0000 (08:55 +0200)]
fix test case

14 years agotemp var names in the TemplateTransform may become user visible, so they must be...
Stefan Behnel [Tue, 1 Jun 2010 06:54:37 +0000 (08:54 +0200)]
temp var names in the TemplateTransform may become user visible, so they must be encoded as identifiers

14 years agotest for ticket #536
Stefan Behnel [Tue, 1 Jun 2010 06:36:18 +0000 (08:36 +0200)]
test for ticket #536

14 years agocompiler cmdline switches -2 and -3
Stefan Behnel [Mon, 31 May 2010 21:20:07 +0000 (23:20 +0200)]
compiler cmdline switches -2 and -3

14 years agosupport setting language level (2 or 3) for source code - currently configures string...
Stefan Behnel [Mon, 31 May 2010 20:30:08 +0000 (22:30 +0200)]
support setting language level (2 or 3) for source code - currently configures string literals and print()

14 years agoextended test case
Stefan Behnel [Mon, 31 May 2010 12:20:15 +0000 (14:20 +0200)]
extended test case

14 years agore-enable friendly exceptions to make map exception traces back to tree traces
Stefan Behnel [Fri, 28 May 2010 10:41:40 +0000 (12:41 +0200)]
re-enable friendly exceptions to make map exception traces back to tree traces

14 years agoremember constant values during new constant node creation
Stefan Behnel [Thu, 27 May 2010 16:19:34 +0000 (18:19 +0200)]
remember constant values during new constant node creation

14 years agoAnother IntNode fix.
Robert Bradshaw [Thu, 27 May 2010 04:41:40 +0000 (21:41 -0700)]
Another IntNode fix.

14 years agoFix types of marked integer literals.
Robert Bradshaw [Thu, 27 May 2010 04:21:16 +0000 (21:21 -0700)]
Fix types of marked integer literals.

14 years agoMore large literal as double fixes.
Robert Bradshaw [Thu, 27 May 2010 04:04:08 +0000 (21:04 -0700)]
More large literal as double fixes.

14 years agoFix large integer literals used in C double context.
Robert Bradshaw [Thu, 27 May 2010 03:45:55 +0000 (20:45 -0700)]
Fix large integer literals used in C double context.

14 years agoLarge literal int + double test.
Robert Bradshaw [Thu, 27 May 2010 03:29:53 +0000 (20:29 -0700)]
Large literal int + double test.

14 years agomove 'for from' syntax out of the way in Python file compilation
Stefan Behnel [Wed, 26 May 2010 14:18:32 +0000 (16:18 +0200)]
move 'for from' syntax out of the way in Python file compilation

14 years agofix some error reportings in parser
Stefan Behnel [Tue, 25 May 2010 19:09:36 +0000 (21:09 +0200)]
fix some error reportings in parser

14 years agoAllow longer int literals on 64-bit machines.
Robert Bradshaw [Mon, 24 May 2010 23:03:23 +0000 (16:03 -0700)]
Allow longer int literals on 64-bit machines.

14 years agofix indexing for inferred Py_UNICODE 'strings'
Stefan Behnel [Mon, 17 May 2010 14:43:08 +0000 (16:43 +0200)]
fix indexing for inferred Py_UNICODE 'strings'

14 years agoextended test case
Stefan Behnel [Mon, 17 May 2010 11:23:56 +0000 (13:23 +0200)]
extended test case

14 years agomake len(Py_UNICODE) efficient
Stefan Behnel [Mon, 17 May 2010 11:23:31 +0000 (13:23 +0200)]
make len(Py_UNICODE) efficient

14 years agofix test after fixing code
Stefan Behnel [Mon, 17 May 2010 09:25:57 +0000 (11:25 +0200)]
fix test after fixing code

14 years agodo not optimise len(str) as it doesn't map to a simple C-API function, small cleanup
Stefan Behnel [Mon, 17 May 2010 06:38:00 +0000 (08:38 +0200)]
do not optimise len(str) as it doesn't map to a simple C-API function, small cleanup

14 years agomerge
Stefan Behnel [Sun, 16 May 2010 08:10:06 +0000 (10:10 +0200)]
merge

14 years agooptimise predicates and methods for single unicode characters
Stefan Behnel [Sun, 16 May 2010 08:09:33 +0000 (10:09 +0200)]
optimise predicates and methods for single unicode characters

14 years agomerge
Robert Bradshaw [Sat, 15 May 2010 20:50:21 +0000 (13:50 -0700)]
merge

14 years agoAdd failing test to bugs list.
Robert Bradshaw [Sat, 15 May 2010 20:49:43 +0000 (13:49 -0700)]
Add failing test to bugs list.

14 years agoC++ failures / tests
David Barnett [Sat, 15 May 2010 20:47:40 +0000 (13:47 -0700)]
C++ failures / tests

I noticed two failures to compile that I think are bugs:
 - "ctypedef Foo[int] Bar" gives a syntax error (i.e., there doesn't seem to be any way to typedef a templated type).
 - Defining a struct in a namespace and trying to convert it to a Python dict doesn't work. Instead you get nasty "__pyx_convert__to_py_THENAMESPACE" errors from the C++ compiler (it doesn't mangle the cname properly and tries to define __pyx_convert__to_py_THENAMESPACE::THESTRUCT).

I made a patch to *add tests* for the two bugs (not fix them).

14 years agoinfer plain object for bytes_string[i] and str/unicode for indexed unicode/str objects
Stefan Behnel [Sat, 15 May 2010 13:57:56 +0000 (15:57 +0200)]
infer plain object for bytes_string[i] and str/unicode for indexed unicode/str objects

14 years ago'fix' stupid test
Stefan Behnel [Fri, 14 May 2010 20:13:17 +0000 (22:13 +0200)]
'fix' stupid test

14 years agoinfer type of loop variable when for-in-looping over pointers, C arrays, unicode...
Stefan Behnel [Fri, 14 May 2010 20:03:16 +0000 (22:03 +0200)]
infer type of loop variable when for-in-looping over pointers, C arrays, unicode strings, etc.

14 years agotypo
Stefan Behnel [Thu, 13 May 2010 13:48:29 +0000 (15:48 +0200)]
typo

14 years agocomment fixes
Stefan Behnel [Thu, 13 May 2010 11:09:20 +0000 (13:09 +0200)]
comment fixes

14 years agofix comment
Stefan Behnel [Thu, 13 May 2010 05:18:08 +0000 (07:18 +0200)]
fix comment

14 years agoerror handling in __test__ dict creation code
Stefan Behnel [Wed, 12 May 2010 20:20:21 +0000 (22:20 +0200)]
error handling in __test__ dict creation code

14 years agofix star import utility code in Py3
Stefan Behnel [Wed, 12 May 2010 19:01:34 +0000 (21:01 +0200)]
fix star import utility code in Py3

14 years agoprevent redundant coercion from Py_UNICODE to a unicode string when the subscript...
Stefan Behnel [Wed, 12 May 2010 17:11:00 +0000 (19:11 +0200)]
prevent redundant coercion from Py_UNICODE to a unicode string when the subscript index is a Python object - this case is no longer optimised

14 years agofix doctest in Py3
Stefan Behnel [Wed, 12 May 2010 15:10:02 +0000 (17:10 +0200)]
fix doctest in Py3

14 years agofix copy+paste bug
Stefan Behnel [Wed, 12 May 2010 14:57:24 +0000 (16:57 +0200)]
fix copy+paste bug

14 years agofix test py_unicode_type, remove code from Optimize.py that became redundant when...
Stefan Behnel [Wed, 12 May 2010 14:45:19 +0000 (16:45 +0200)]
fix test py_unicode_type, remove code from Optimize.py that became redundant when Py_UNICODE started coercing to unicode by default

14 years agoprevent Py_UNICODE from becoming a plain integer during arithmetic operations
Stefan Behnel [Wed, 12 May 2010 14:24:29 +0000 (16:24 +0200)]
prevent Py_UNICODE from becoming a plain integer during arithmetic operations

14 years agoimplement ticket #535: fast index access into unicode strings
Stefan Behnel [Wed, 12 May 2010 13:48:13 +0000 (15:48 +0200)]
implement ticket #535: fast index access into unicode strings

14 years agofix ticket #525: let float values pass through the compiler literally
Stefan Behnel [Tue, 11 May 2010 17:31:27 +0000 (19:31 +0200)]
fix ticket #525: let float values pass through the compiler literally

14 years agoString literal identifiers ending in newlines.
Robert Bradshaw [Tue, 11 May 2010 04:18:46 +0000 (21:18 -0700)]
String literal identifiers ending in newlines.

14 years agobackout 63a493cdeee2 (usage of & is intentional)
Lisandro Dalcin [Mon, 10 May 2010 23:19:17 +0000 (20:19 -0300)]
backout 63a493cdeee2 (usage of & is intentional)

14 years agochange & to && in many places
Lisandro Dalcin [Mon, 10 May 2010 16:22:13 +0000 (13:22 -0300)]
change & to && in many places

14 years agoenable working test
Stefan Behnel [Sun, 9 May 2010 11:15:30 +0000 (13:15 +0200)]
enable working test

14 years agofix ticket #533: 'continue' in the 'else' block of a for-in-loop leaks a reference
Stefan Behnel [Sun, 9 May 2010 11:14:09 +0000 (13:14 +0200)]
fix ticket #533: 'continue' in the 'else' block of a for-in-loop leaks a reference

14 years agofix except+ for cppclass methods (with Denys Duchier)
Lisandro Dalcin [Sat, 8 May 2010 22:24:53 +0000 (19:24 -0300)]
fix except+ for cppclass methods (with Denys Duchier)

14 years agotest for ticket #533: reference leak in 'continue' statement
Stefan Behnel [Sat, 8 May 2010 20:35:17 +0000 (22:35 +0200)]
test for ticket #533: reference leak in 'continue' statement

14 years agoextended test case
Stefan Behnel [Thu, 6 May 2010 06:27:37 +0000 (08:27 +0200)]
extended test case

14 years agonew test for pointer operations
Stefan Behnel [Wed, 5 May 2010 19:53:25 +0000 (21:53 +0200)]
new test for pointer operations

14 years agofix last commit
Stefan Behnel [Wed, 5 May 2010 19:41:47 +0000 (21:41 +0200)]
fix last commit

14 years agofix ticket #145 also for CondExprNode, make "bint (+) non-bint -> object" a general...
Stefan Behnel [Wed, 5 May 2010 19:16:49 +0000 (21:16 +0200)]
fix ticket #145 also for CondExprNode, make "bint (+) non-bint -> object" a general rule for independent spanning type finding, merge duplicated type determination functionality from CondExprNode back into PyrexTypes.py

14 years agoadd some POSIX pxd's and a few tests
Lisandro Dalcin [Wed, 5 May 2010 17:51:56 +0000 (14:51 -0300)]
add some POSIX pxd's and a few tests

14 years agocollapse BoolBinopNode during constant folding, small fix for BoolNode folding
Stefan Behnel [Tue, 4 May 2010 19:11:33 +0000 (21:11 +0200)]
collapse BoolBinopNode during constant folding, small fix for BoolNode folding

14 years agofix ticket #145: the result of 'True or 5' must not be coerced into an integer
Stefan Behnel [Tue, 4 May 2010 19:00:24 +0000 (21:00 +0200)]
fix ticket #145: the result of 'True or 5' must not be coerced into an integer

14 years agoseveral test cases for ticket 145
Stefan Behnel [Tue, 4 May 2010 12:12:54 +0000 (14:12 +0200)]
several test cases for ticket 145

14 years agoextended test case based on ticket #145
Stefan Behnel [Tue, 4 May 2010 11:26:03 +0000 (13:26 +0200)]
extended test case based on ticket #145

14 years agonew test for ticket #354
Stefan Behnel [Tue, 4 May 2010 07:52:05 +0000 (09:52 +0200)]
new test for ticket #354

14 years agoenable .pop() optimisation also for typed lists
Stefan Behnel [Tue, 4 May 2010 05:55:20 +0000 (07:55 +0200)]
enable .pop() optimisation also for typed lists

14 years agoslight speed-up in unicode/bytes indexing
Stefan Behnel [Mon, 3 May 2010 16:13:59 +0000 (18:13 +0200)]
slight speed-up in unicode/bytes indexing

14 years agoMSVC: quick fix for int complex test failing in C++, do not use std::complex<int>
dalcinl [Mon, 3 May 2010 01:22:36 +0000 (22:22 -0300)]
MSVC: quick fix for int complex test failing in C++, do not use std::complex<int>

14 years agoDisable test for libc.stdint (missing stdint.h in MSVC)
dalcinl [Mon, 3 May 2010 00:43:09 +0000 (21:43 -0300)]
Disable test for libc.stdint (missing stdint.h in MSVC)

14 years agofix ssize_t tescase (ticket #399)
Lisandro Dalcin [Sun, 2 May 2010 21:46:17 +0000 (18:46 -0300)]
fix ssize_t tescase (ticket #399)

14 years agoreverted last commit, cast must happen to the value, not its pointer
Stefan Behnel [Sun, 2 May 2010 16:10:39 +0000 (18:10 +0200)]
reverted last commit, cast must happen to the value, not its pointer

14 years agocode simplification
Stefan Behnel [Sun, 2 May 2010 15:59:06 +0000 (17:59 +0200)]
code simplification

14 years agofix 'cython.set' and 'cython.frozenset' when set/frozenset are declared names in...
Stefan Behnel [Sat, 1 May 2010 16:29:44 +0000 (18:29 +0200)]
fix 'cython.set' and 'cython.frozenset' when set/frozenset are declared names in the module

14 years agocode cleanup
Stefan Behnel [Sat, 1 May 2010 16:20:25 +0000 (18:20 +0200)]
code cleanup

14 years agocode cleanup
Stefan Behnel [Sat, 1 May 2010 16:10:42 +0000 (18:10 +0200)]
code cleanup

14 years agoavoid GIL error for optimised container bool tests that run in plain C
Stefan Behnel [Sat, 1 May 2010 15:38:23 +0000 (17:38 +0200)]
avoid GIL error for optimised container bool tests that run in plain C

14 years agofix error on def-nogil functions
Stefan Behnel [Sat, 1 May 2010 15:28:46 +0000 (17:28 +0200)]
fix error on def-nogil functions

14 years agoremoved dead copy of test file
Stefan Behnel [Sat, 1 May 2010 15:26:38 +0000 (17:26 +0200)]
removed dead copy of test file

14 years agossize_t in Cython now means Py_ssize_t in C ((ticket #399))
Lisandro Dalcin [Fri, 30 Apr 2010 18:35:39 +0000 (15:35 -0300)]
ssize_t in Cython now means Py_ssize_t in C ((ticket #399))

14 years agotest fix after extending dead code removal
Stefan Behnel [Thu, 29 Apr 2010 06:48:19 +0000 (08:48 +0200)]
test fix after extending dead code removal